Docs / Base de Conhecimento / IEML × RDF × Situation Monitor — um grafo para sentido, fontes e tempo

Base de Conhecimento

Conteúdo

IEML × RDF × Situation Monitor — um grafo para sentido, fontes e tempo

Parte: Engenharia · Capítulo: IEML × RDF × Situation Monitor · Edição: 2026-10-07
Palavras-chave: RDF 1.2, termo-triplo, reificador, etiqueta de língua, direção de base, JSON-LD 1.1, SKOS, OntoLex, PROV-O, SHACL, OWL 2 RL, nove papéis IEML, Oxigraph, Neo4j, GQL
Glossário: language-tagged literal, base direction, rdf:type, SKOS, OntoLex, SHACL shape, triple term, OWL 2 RL closure — veja o Glossário

Em resumo

  • Uma frase IEML de nove papéis, um esquema de etiquetagem RDF e dados reais do Situation Monitor (SM) carregam-se em um único grafo RDF 1.2. Os dados do SM: o mapa argumentativo, um brief ao vivo com as suas fontes, o grafo de conceitos, os frames gramaticais e o mapa de identidade das palavras. O protótipo vive em research/rdf/ e foi executado em 2026-10-07.
  • Os metadados das arestas (fontes, regra, relógio, tempo de validade, tempo de registro) vivem em reificadores RDF 1.2. Para comparação, a mesma aresta também é escrita como reificação RDF 1.1 e como um nó n-ário, e as três formas respondem a uma consulta de modo idêntico. Os campos bi-temporais do Graphiti e as propriedades de relacionamento do Neo4j mapeiam um a um.
  • SHACL e OWL 2 RL funcionam como uma verificação determinística sobre o output de um LLM. No brief ao vivo de Economia e Mercados, a shape de ancoragem aponta os mesmos dois nomes que o ancorador Python aponta (DraftKings, Uruguai). Uma consulta mais estrita também captura um nome que o ancorador Python aceita por um âncora frouxo. As verificações restringem e assinalam. Não tornam um modelo veraz.
  • A ferramenta é o gargalo. O pyoxigraph 0.5.11 lê e consulta RDF 1.2. O rdflib 7.6, e portanto o pyshacl e o owlrl, não conseguem analisá-lo, de modo que a validação roda sobre uma projeção RDF 1.1. As especificações do RDF 1.2 ainda são Candidate Recommendation ou Working Draft.

Referências online (verificadas)

Verified 2026-10-07. Status and date are as printed on each page.

Ainda não há imagens de instantâneo neste capítulo. O protótipo guarda em research/rdf/data/live/ as respostas de API a partir das quais foi construído.

Este capítulo relata um ensaio. Keyne forneceu dois inputs: um @node no estilo IEML para uma sentença em inglês e uma nota curta sobre etiquetagem RDF (etiquetas de língua, direção de base, rdf:type, rdfs:label). A pergunta era se esses dois inputs e o próprio conteúdo do SM podem compartilhar um grafo, e o que esse grafo traz. O código, os instantâneos de dados e os outputs estão no repositório do SM, em research/rdf/. As consequências de desenho estão registradas em docs/CONCEPTS_GOVERNANCE.md, seção “RDF trial (2026-10-07)”. Cada número abaixo vem dessa execução.


1. Etiquetagem RDF, enunciada com precisão

Definição (rdf:type). A propriedade que diz que um recurso é uma instância de uma classe: ex:the-mother rdf:type schema:Person, escrita a em Turtle.
Definição (rdfs:label). Um nome legível por humanos para um recurso. Não tem força lógica; um rótulo em uma segunda língua é apenas um segundo triplo.

Literal com etiqueta de língua. Uma cadeia em par com uma etiqueta de língua BCP 47: "a mãe conta uma história"@pt-BR. A etiqueta “MUST be treated … in a case-insensitive manner” (RDF 1.2 Concepts §3.4). O Oxigraph armazena as etiquetas em minúsculas, de modo que pt-BR volta como pt-br, e o output JSON-LD carrega "@language": "pt-br".

Direção de base. O RDF 1.2 acrescenta uma cadeia com etiqueta de língua direcional (tipo de dados rdf:dirLangString). A sua direção de base é ltr ou rtl. Ela diz a um renderizador a direção inicial do texto, para que um título da direita para a esquerda se exiba corretamente mesmo quando começa com um dígito ou um acrônimo latino.

he^rtl

Forma correta
"שלום"@he--rtl (Turtle); {"@value": "שלום", "@language": "he", "@direction": "rtl"} (JSON-LD 1.1)
Onde está definida
RDF 1.2 Turtle; JSON-LD 1.1 §4.2.4.1

^ como separador de etiqueta

Forma correta
^^ é o marcador de tipo de dados ("3"^^xsd:integer). A língua usa @, a direção usa --
Onde está definida
RDF 1.2 Turtle

Direção como parte da língua

Forma correta
A direção é um componente separado do literal. ar permanece a língua
Onde está definida
RDF 1.2 Concepts §3.4

—

Forma correta
O RDF 1.1 não consegue armazenar a direção. O toRdf do JSON-LD 1.1 tem, portanto, uma opção rdfDirection (i18n-datatype ou compound-literal) para transportá-la
Onde está definida
JSON-LD 1.1 API

Uma etiqueta de língua é uma afirmação, não uma verificação. A consulta Q2c (§9) compara cada etiqueta com o script do seu texto. Ela assinala quatro títulos ao vivo no brief de geopolítica servido em 2026-10-07: o título id (indonésio) está em chinês (🌍 全球局势更新), e os títulos hi, th e uk estão em inglês. O sh:languageIn e o sh:uniqueLang do SHACL não conseguem ver isso. Eles verificam a etiqueta, não o texto.

2. RDF 1.1 versus RDF 1.2

Confrontado com o CR de RDF 1.2 Concepts, o WD de RDF 1.2 Turtle, o rascunho da nota de Interoperabilidade e o WD de SPARQL 1.2 Query.

Enunciados sobre enunciados

RDF 1.1 (Recommendation, 2014)
rdf:Statement com rdf:subject, rdf:predicate, rdf:object. O nó do enunciado não afirma o triplo
RDF 1.2 (CR / WD, 2026)
Termo-triplo <<( s p o )>>, permitido apenas na posição de objeto. Um termo-triplo “denota uma proposição” e não é afirmado

Quem carrega os metadados

RDF 1.1 (Recommendation, 2014)
O nó rdf:Statement
RDF 1.2 (CR / WD, 2026)
Um reificador: sujeito de rdf:reifies <<( s p o )>>. Vários reificadores podem apontar para uma proposição, por exemplo duas fontes

Açúcar sintático Turtle

RDF 1.1 (Recommendation, 2014)
—
RDF 1.2 (CR / WD, 2026)
<< s p o ~ r >> (triplo reificado) e `s p o ~ r {\

… \

RDF 1.1 (Recommendation, 2014)
}` (anotação: afirma o triplo e o reifica)
RDF 1.2 (CR / WD, 2026)
Direção do texto

nenhuma

RDF 1.1 (Recommendation, 2014)
"…"@ar--rtl, tipo de dados rdf:dirLangString
RDF 1.2 (CR / WD, 2026)
Sinalização de versão

nenhuma

RDF 1.1 (Recommendation, 2014)
VERSION "1.2" em Turtle; parâmetro de tipo de mídia version=1.2; rótulos "1.2", "1.2-basic", "1.1"
RDF 1.2 (CR / WD, 2026)
Conformidade

um nível

RDF 1.1 (Recommendation, 2014)
Full (termos-triplo permitidos) e Basic (sem termos-triplo)
RDF 1.2 (CR / WD, 2026)
SPARQL
Tópico
WD: LANGDIR, hasLANGDIR, STRLANGDIR, TRIPLE, SUBJECT/PREDICATE/OBJECT, isTRIPLE
RDF 1.1 (Recommendation, 2014)
Mover dados para baixo
RDF 1.2 (CR / WD, 2026)
—
Tópico
Nota de interoperabilidade: uma codificação básica de termos-triplo como nós rdf:PropositionForm. Preserva a informação, não a semântica
RDF 1.1 (Recommendation, 2014)
O antigo “RDF-star”
RDF 1.2 (CR / WD, 2026)
Relatório de Community Group, não um padrão
Tópico
Substituído. << >> agora significa um reificador, não um triplo citado na posição de sujeito. O Oxigraph removeu o suporte a RDF-star quando acrescentou RDF 1.2
RDF 1.1 (Recommendation, 2014)
Shapes
RDF 1.2 (CR / WD, 2026)
O SHACL 1.0 (2017) não conhece reificadores

O SHACL 1.2 Core WD acrescenta sh:reifierShape e sh:reificationRequired

3. Mapeamento IEML → RDF

Vocabulário: research/rdf/vocab/sm.ttl (namespace https://situationmonitor.info/ns#, 654 triplos). Reutiliza SKOS, PROV-O, DC Terms, schema.org, OntoLex-Lemon e LexInfo 3.0. Cada classe e propriedade tem rótulos em en, pt-BR, es e ar--rtl.

@node (frase)

RDF
sm:Node, uma subclasse de sm:Phrase
No exemplo da mãe
ex:node a sm:Node

Os nove papéis

RDF
Nove subpropriedades de sm:hasRole (sm:root, sm:initiator, sm:interactant, sm:recipient, sm:causality, sm:time, sm:place, sm:intention, sm:manner). Cada uma tem sm:roleIndex 0–8 e a sua cadeia Grammar v.1
No exemplo da mãe
ex:node sm:place ex:place

Preenchedor de papel

RDF
sm:RoleFiller (alcance de sm:hasRole)
No exemplo da mãe
ex:place a sm:RoleFiller

Lexema #

RDF
sm:lexeme → ontolex:LexicalEntry. O IRI da entrada segue o id de ocorrência do SM `lang\
No exemplo da mãe
UPOS\
Elemento IEML
lemma, de modo que os dados gramaticais ao vivo se fundem no carregamento |lex:en-NOUN-house| Inflexão~`
Elemento IEML
sm:inflection → um indivíduo sm:Inflection com o seu traço UD e skos:closeMatch para o LexInfo. A ordem é mantida em sm:inflectionOrder
RDF
sm:infl-definite (Definite=Def)
No exemplo da mãe
Caso / relação *

sm:case (funcional) → um indivíduo sm:CaseMarker

RDF
sm:case-in, sm:case-instrument (closeMatch lexinfo:instrumentalCase)
No exemplo da mãe
Junção &and [ … ]

sm:Junction com sm:junctionKind sm:and e sm:members como um rdf:List (ordenado)

RDF
ex:manner
No exemplo da mãe
Referente de um preenchedor
Elemento IEML
sm:denotes → uma entidade do mundo. O SHACL exige que o referente do iniciador seja agentivo
RDF
ex:the-mother a schema:Person
No exemplo da mãe
Descritores (traduções)
Elemento IEML
skos:prefLabel com etiqueta de língua no skos:Concept alcançado por ontolex:sense/ontolex:reference
RDF
"contar"@pt-BR
No exemplo da mãe
Texto-fonte

sm:iemlSource, verbatim

RDF
o bloco @node inteiro
No exemplo da mãe
Acento semântico !, frase aninhada em uma folha, USL, paradigmas de dicionário

Não modelados. O exemplo de Keyne não tem marca de acento, nem aninhamento, nem USL

RDF
—

4. O exemplo da mãe

research/rdf/examples/mother.ttl tem 241 triplos. Trecho:

VERSION "1.2"
PREFIX sm:  <https://situationmonitor.info/ns#>
PREFIX ex:  <https://situationmonitor.info/id/example/mother/>
PREFIX lex: <https://situationmonitor.info/id/lex/>

ex:node a sm:Node ;
    rdfs:label "the mother tells a story"@en , "a mãe conta uma história"@pt-BR ,
               "la madre cuenta una historia"@es , "الأم تحكي قصة"@ar--rtl ;
    sm:root ex:root ; sm:initiator ex:initiator ; sm:interactant ex:interactant ;
    sm:recipient ex:recipient ; sm:causality ex:causality ; sm:time ex:time ;
    sm:place ex:place ; sm:intention ex:intention ; sm:manner ex:manner .

ex:root      a sm:RoleFiller ; sm:inflection sm:infl-indicative , sm:infl-present ;
             sm:inflectionOrder "~indicative mood ~present" ; sm:lexeme lex:en-VERB-tell .
ex:initiator a sm:RoleFiller ; sm:inflection sm:infl-definite ; sm:lexeme lex:en-NOUN-mother ;
             sm:denotes ex:the-mother .
ex:recipient a sm:RoleFiller ; sm:inflection sm:infl-possessive-3sg , sm:infl-feminine ;
             sm:lexeme lex:en-NOUN-child ; sm:denotes ex:the-child .
ex:causality a sm:RoleFiller ; sm:case sm:case-instrument ; sm:inflection sm:infl-indefinite ;
             sm:lexeme lex:en-NOUN-book .
ex:manner    a sm:Junction ; sm:case sm:case-with ; sm:junctionKind sm:and ;
             sm:members ( ex:manner-1 ex:manner-2 ) .

lex:en-VERB-tell a ontolex:LexicalEntry ; sm:occurrenceId "en|VERB|tell" ;
    lexinfo:partOfSpeech lexinfo:verb ; ontolex:canonicalForm lex:en-VERB-tell-form ;
    ontolex:sense ex:sense-tell .
ex:sense-tell a ontolex:LexicalSense ; ontolex:reference ex:concept-tell .
ex:concept-tell a skos:Concept ;
    skos:prefLabel "tell"@en , "contar"@pt-BR , "contar"@es , "يحكي"@ar--rtl .

O mesmo grafo em JSON-LD 1.1 (examples/mother.jsonld) mantém a direção como @direction:

{"@language": "ar", "@direction": "rtl", "@value": "الأم تحكي قصة"}

Ida e volta: Turtle → JSON-LD → Turtle no pyoxigraph é isomorfo, 241 triplos, todos os 15 literais rtl preservados. Duas ferramentas perdem a direção sem emitir erro:

  • o rdflib analisa o JSON-LD, mas descarta @direction;
  • o PyLD 3.3 o descarta ao compactar em um mapa @container: @language, de modo que o contexto evita mapas de língua.

Notas sobre o texto-fonte:

  • O joyfull de Keyne é mantido verbatim em sm:iemlSource. O lexema é joyful laughter, uma ontolex:MultiwordExpression.
  • O IEML tem um segundo membro de maneira, cuddle, que a sentença em inglês não contém.
  • As renderizações em pt-BR (“a criança dela”) e em árabe (“لطفلها”) preservam o possuidor feminino de ~her ~feminine. O espanhol “su hijo” não consegue.
  • Essas traduções foram redigidas para o protótipo e precisam da revisão de um falante nativo.

5. O conteúdo do SM no mesmo grafo

Mapa de argumentosResumos e fontes (PROV-O)Léxico (OntoLex + SKOS)Camada IEML (sm:)sm:initiator … sm:mannersm:lexemesm:inflection / sm:caseontolex:sense/referenceontolex:denotes ⁻¹prov:wasDerivedFromsm:namesEntityskos:exactMatchsm:evidenceFor / sm:partOfsm:supports / sm:opposessm:mapRole →skos:closeMatchrdf:reifies «( s p o )»prov:wasDerivedFrom

sm:Node / sm:GrammarFrame

sm:RoleFiller

ontolex:LexicalEntry
lex:en-VERB-tell

sm:Inflection / sm:CaseMarker

skos:Concept
prefLabel @en @pt-BR @es @ar--rtl

grupo de identidade
skos:Concept

forma de identidade
LexicalEntry

sm:BriefSentence

sm:SourceArticle
Mongo _id

sm:NamedEntity

sm:Keyword

sm:Keyword

sm:Claim / sm:Scenario …

sm:Claim

reificador
sm:DerivedEdge

Figura 1. Camada IEML, léxico, resumos e fontes, e o mapa de argumentos num único grafo RDF 1.2; a aresta tracejada é um reificador que aponta para um termo-triplo. Role para o lado em telas pequenas.

scripts/export_sm.py lê apenas inputs reais e escreve out/sm-export.ttl: 2.699 triplos RDF 1.2, 134 deles vínculos reificador → termo-triplo. Os inputs são o agents/argument-map/map.json do repositório, instantâneos GET da API pública de 2026-10-07 05:42 UTC (02:42 BRT) e as próprias funções de backend do SM.

5.1 Mapa argumentativo

O map.json fornece 18 nós, 21 arestas e 6 fontes.

  • Os kinds dos nós tornam-se sm:Claim, sm:Scenario, sm:Evidence, sm:Opposition, sm:Warrant, sm:Rebuttal. Todos são subclasses de sm:ArgumentNode e de sm:Proposition ⊑ prov:Entity.
  • As relações tornam-se sm:supports, sm:opposes, sm:expands, sm:scenarioOf, sm:partOf, ….
  • Cada aresta é afirmada e reificada como um sm:AssertedEdge. O reificador carrega a regra save_map, o relógio certificado, o updated_at do mapa (2026-07-15 18:05 UTC) como tempo de registro, e prov:wasAttributedTo o updated_by do mapa (seed-ltring).

As próprias cadeias de papel do mapa (root, initiator, process, destination, time, location, manner, instrument, cause) não são os nove papéis da Grammar v.1. Tornam-se um esquema SKOS com correspondências explícitas (Q4):

Papel do mapaCorrespondênciaPapel IEMLNós
instrumentcloseMatchcausality4
rootexactMatchroot4
initiatorexactMatchinitiator3
process— (sem correspondência)—3
destinationcloseMatchrecipient2
mannerexactMatchmanner1
causeexactMatchcausality1

5.2 Grafo de conceitos (summary_concepts)

A partir de /api/category-summary/Economics & Markets/concepts (43 nós, 63 arestas):

  • As palavras-chave tornam-se sm:Keyword, mais sm:EvidenceKeyword quando o nó tem uma url de fonte e sm:ClaimKeyword quando não tem.
  • Cada aresta é afirmada e reificada como um sm:DerivedEdge com a sua regra: ranked_part_of 36, note_group 15, _clause 12. O reificador também carrega o relógio de opinião, o generated_at do brief como tempo de validade e o tempo da obtenção como tempo de registro.

Achados:

  • Proveniência. Somente 2 das 63 arestas recebem um artigo-fonte, e somente pela interseção das urls dos seus extremos. O payload não carrega ids de fonte nas arestas. Este é o item 8 da lista de apropriação, visto em dados ao vivo.
  • Arestas pendentes. 15 arestas apontam para nós ausentes de nodes[]. O exportador acrescenta 6 nós stub e os conta.
  • A junção por url funciona. Todas as 32 urls de fonte de conceitos juntaram-se a um _id de artigo do brief nesta amostra. Isso responde, para um brief, à pergunta em aberto “a url da manchete é estável o bastante?”.

5.3 Gramática

  • Classes gramaticais e lexemas. O UPOS UD torna-se um esquema SKOS de 17 conceitos, skos:closeMatch para as classes gramaticais do LexInfo. Os ids de ocorrência tornam-se IRIs ontolex:LexicalEntry (en|VERB|tell → lex:en-VERB-tell).
  • Frames. Um frame de grammar_index.frames_from_tokens torna-se um sm:GrammarFrame cujos papéis vêm do role_of do SM (nsubj → initiator, obj → interactant, iobj → recipient, …). Os FEATS do Stanza tornam-se sm:Inflections.
  • Os frames ao vivo são parciais. /api/ieml/occurrences/{id} devolve apenas os papéis que uma ocorrência preenche, e nenhum tempo de escrita. Os 45 frames ao vivo (para tell, ukraine, mother) são, portanto, sm:GrammarFrameView, deliberadamente não sm:Phrase.
  • Reanálise no box. O servidor gramatical do Mac estava fora do ar, de modo que duas sentenças foram reanalisadas no box com o Stanza, por meio dos próprios tokens_from_doc e frames_from_tokens do SM.

Q4c, a mesma sentença em inglês pelas duas lentes:

#PapelNó IEML de Keynerole_of do SM (Stanza)
0roottelltell
1initiatormothermother
2interactantstorystory
3recipientchild—
4causalitybook—
5timesleep—
6placehouse—
7intentionlove—
8mannerjoyful laughter & cuddle—

Por que o parser para em três papéis:

  • house é um obl nu, sem um subtipo :loc para o role_of usar.
  • child está ligado a book como nmod, o que é um erro de análise.
  • before she falls asleep é um advcl.

O nó IEML é a anotação-alvo. O parser é o alcance atual do SM.

5.4 Mapa de identidade das palavras

summary_grounding._EQUIV_GROUPS (9 grupos) é exportado em três partes:

  • cada grupo torna-se um skos:Concept (identity/america, …);
  • cada forma de superfície torna-se um ontolex:LexicalEntry com ontolex:denotes o grupo;
  • as cadeias de correspondência dobradas tornam-se sm:matchForm.

Uma entidade de brief que pertence a um grupo recebe skos:exactMatch para ele. Esta é a forma RDF do mapa de identidade em três estados que o item 10 propõe. “Ambíguo” seria uma forma que denota dois grupos. Nada no mapa atual faz isso.

5.5 Briefs e fontes

O brief de Economia e Mercados (llm, gerado em 2026-10-07 04:03 UTC, 91 artigos) expõe 24 manchetes-fonte. Elas se tornam sm:SourceArticles indexados pelo _id do Mongo, cada um com uma manchete com etiqueta de língua e sm:normalizedText.

As 4 sentenças do brief são sm:BriefSentences que prov:wasDerivedFrom todos os 24 artigos; a API não diz qual artigo sustenta qual sentença. Os nomes próprios vêm de summary_grounding.extract_proper_names e são ligados com sm:namesEntity.

O título do brief de geopolítica é exportado nas 21 línguas servidas; o árabe é @ar--rtl.

6. Metadados das arestas: reificadores em primeiro lugar

A decisão é usar reificadores RDF 1.2 para cada aresta que precise de fontes, regra, confiança ou margem, relógio, tempo de validade ou tempo de registro. O triplo afirmado também é enunciado, que é o que a sintaxe de anotação significa. Uma aresta real de conceito, investment —hinges→ economic stability, escrita de três modos (examples/edge-metadata.*.ttl):

# RDF 1.2 annotation: asserts the triple and names its reifier (9 triples)
c:kw%3Ainvestment sm:evidenceFor c:kw%3Aeconomic_stability ~ c:edge-614835cab950 {|
    a sm:DerivedEdge ; sm:rule "_clause" ; sm:clock sm:OpinionClock ; rdfs:label "hinges"@en ;
    prov:wasDerivedFrom article:6ac5d99e4f653fd254705cea ;
    sm:validFrom "2026-10-07T04:03:09.31389Z"^^xsd:dateTime ;     # valid time
    prov:generatedAtTime "2026-10-07T05:42:04Z"^^xsd:dateTime     # recorded time
|} .
# RDF 1.1 reification (12 triples): the statement node does not assert, so assert separately
c:kw%3Ainvestment sm:evidenceFor c:kw%3Aeconomic_stability .
c:stmt-614835cab950 a rdf:Statement , sm:DerivedEdge ;
    rdf:subject c:kw%3Ainvestment ; rdf:predicate sm:evidenceFor ; rdf:object c:kw%3Aeconomic_stability ;
    sm:rule "_clause" ; … same metadata … .
# n-ary relation node (10 triples): the relation is a resource; no direct triple at all
c:rel-614835cab950 a sm:DerivedEdge ;
    nary:from c:kw%3Ainvestment ; nary:relation sm:evidenceFor ; nary:to c:kw%3Aeconomic_stability ;
    sm:rule "_clause" ; … same metadata … .

As consultas Q6a, Q6b e Q6c devolvem a mesma linha a partir de cada codificação: _clause, artigo 6ac5d99e4f653fd254705cea, validade 2026-10-07 04:03:09 UTC, registro 05:42:04 UTC.

Reificador RDF 1.2rdf:Statement RDF 1.1Nó n-ário
Triplo simples consultável como ?s sm:evidenceFor ?osim (a anotação o afirma)sim, se afirmado à partenão
Duas fontes como dois reificadores de uma proposiçãosim, por desenhosim, mas nada amarra os dois nós a uma proposiçãosim, como dois nós de relação
rdflib / pyshacl / owlrlnão; precisa da codificação básicasimsim
Shapes SHACL 1.0 sobre os metadadosvia um alvo SPARQL, ou sobre a projeção RDF 1.1simsim

Mapeamento para o Graphiti e para um grafo de propriedades. scripts/export_cypher.py escreve cada reificador como um relacionamento Neo4j. Segue o padrão de agents/graph/scripts/map_to_cypher.py, e os nomes de propriedades seguem o EntityEdge do Graphiti:

Reificador (RDF 1.2)Graphiti EntityEdgePropriedade de relacionamento Neo4j
sm:validFromvalid_atr.valid_at (datetime)
sm:validUntilinvalid_atr.invalid_at
prov:generatedAtTimecreated_atr.created_at
sm:expiredAtexpired_atr.expired_at
prov:wasDerivedFromepisodesr.episodes (lista de IRIs de artigos)
sm:rule, sm:clock, sm:certificate—r.rule, r.clock, r.certificate
IRI do reificadoruuid da arestar.id
Resultado SHACL—r.shacl_ok, r.shacl_issues

A exportação tem 61 nós e 84 arestas. 61 das arestas carregam shacl_ok = false, quase todas por proveniência ausente. Um LPG tem um único conjunto de propriedades por relacionamento. Dois reificadores do mesmo triplo, por exemplo duas fontes com confianças diferentes, tornam-se dois relacionamentos paralelos.

Dois relógios. O tempo de validade diz quando o fato valia. O tempo de registro diz quando o SM o soube. A Q5 pergunta quais arestas eram válidas em T e estavam registradas até R:

T (válido em)R (registrado até)Certificado (save_map)Opinião (_clause / note_group / ranked_part_of)
2026-10-07 04:30 UTC2026-10-07 06:00 UTC2112 / 15 / 36
2026-10-07 04:30 UTC2026-08-01 00:00 UTC210 (ainda não registrado)
2026-10-07 03:00 UTC2026-10-07 06:00 UTC210 (brief ainda não válido)
As arestas de frames gramaticais nunca aparecem na Q5, porque a API de ocorrências não expõe um tempo de escrita para elas.

7. Uma visão em lógica proposicional

O RDF 1.2 Concepts diz que um termo-triplo “denota uma proposição”. Isso oferece uma leitura limpa do mapa argumentativo do SM:

  • cada afirmação, cenário ou oposição é uma proposição;
  • sm:supports e sm:opposes são arestas de apoio e de ataque entre proposições;
  • o reificador em uma aresta registra quem afirmou o apoio, a partir de qual fonte, em qual relógio.

Q7, no mapa ao vivo:

ProposiçãoKindApoiada porAtacada por
usl:root.fieldClaimusl:scenario.theory.superorganismusl:opposition.agent.vs.process
usl:scenario.rut.ciclo001Scenariousl:path.ltring.doctrine, usl:scenario.pi.fractal—
usl:scenario.tevep.methodScenariousl:path.ltring.doctrine—

O que o RDF não oferece:

  • Sem negação. “Atacada” não tem um sentido veritativo-funcional, e a implicação RDFS/OWL nunca conclui que uma proposição é falsa.
  • Monotonicidade. OWL é monotônico: acrescentar um ataque não pode remover uma implicação.
  • Sem semântica de aceitação. Decidir quais afirmações se sustentam, por exemplo uma extensão fundamentada na argumentação abstrata no estilo de Dung, é um programa executado sobre o grafo. Não é uma inferência que o grafo faça. O output desse programa pode ser reescrito como arestas reificadas e relogiadas, como qualquer outro fato derivado.

8. SHACL e OWL 2 RL como camada de validação do output de LLM

Os briefs e os grafos de conceitos do SM são output de LLM ou heurístico. O ensaio trata SHACL e OWL 2 RL como uma camada determinística sobre esse output: shapes fixas, uma tabela de regras fixa, o mesmo veredito em cada execução.

Ancoragem como uma restrição SHACL-SPARQL (shapes/sm-shapes.ttl). Usa o mesmo dobramento que summary_grounding.name_in_text: texto normalizado, com formas, aliases e âncoras como cadeias de correspondência.

sm:GroundingShape a sh:NodeShape ;
    sh:targetClass sm:BriefSentence ;
    sh:sparql [ a sh:SPARQLConstraint ; sh:prefixes sm:prefixes ;
        sh:message "Sentence names {?entity} but no prov:wasDerivedFrom source mentions it."@en ;
        sh:select """SELECT $this ?entity WHERE {
            $this sm:namesEntity ?entity .
            FILTER NOT EXISTS {
                $this prov:wasDerivedFrom ?src . ?src sm:normalizedText ?t .
                ?entity sm:matchForm ?f . FILTER (CONTAINS(?t, ?f)) } }""" ] .

Resultados no brief ao vivo mais um stub livre de LLM (examples/stub-ungrounded.ttl, uma sentença escrita à mão sobre um “Atlantis Central Bank” que o único artigo citado nunca menciona):

SentençaEntidadeSHACL / Q3Python name_in_textQ3b estrita de nome completo
s2DraftKingsnão ancoradas3Uruguay
não ancoradas4Los Angeles Mayor Bassancoradaancorada por 6ac5b8c700cc76971d42d218
não ancoradastubAtlantis Central Banknão ancorada—
não ancoradaOs vereditos SPARQL e Python concordam exatamente. A variante estrita acrescenta um achado. “Los Angeles Mayor Bass” só está ancorada pelo âncora angeles, correspondente em uma manchete sobre californianos reagindo a um comentário de Trump. Esse é o caso de ancoragem falsa que o item 10 da lista de apropriação descreve.Execução SHACL completa. scripts/validate.py roda o pyshacl 0.40.1 com inferência RDFS sobre a projeção RDF 1.1. Os dados não estão em conformidade: 172 resultados.

DerivedEdgeShape

Severidade
Violation
Contagem
61
Significado
aresta derivada de conceito sem prov:wasDerivedFrom

EdgeSignatureShape

Severidade
Violation
Contagem
15
Significado
evidenceFor a partir de uma palavra-chave sem url (ClaimKeyword) ou de um nó pendente; a tabela de assinaturas do item 11

GroundingShape

Severidade
Violation
Contagem
3
Significado
a tabela acima

DerivedEdgeShape

Severidade
Warning
Contagem
50
Significado
aresta derivada sem tempo de registro (frames gramaticais)

FrameInitiatorShape

Severidade
Warning
Contagem
22
Significado
iniciador de frame não tipado como agentivo. Os frames não têm tipagem NER. ukraine como iniciador está bem, mas a shape não pode saber disso

CertifiedClockShape

Severidade
Warning
Contagem
21
Significado
aresta afirmada do mapa no relógio certificado, sem id de certificado (item 6)
Shape
O nó da mãe passa: exatamente uma raiz, no máximo um preenchedor por papel, o seu iniciador denota um schema:Person, e cada prefLabel tem um valor por língua.
Shape
Fecho OWL 2 RL e conservatividade (scripts/conservativity.py, owlrl 7.6.2). O fecho de 4.121 triplos acrescenta 3.431 triplos implicados e não coloca nada em owl:Nothing. Cada mudança candidata de vocabulário é fechada de novo e comparada em quatro consultas permanentes: entidades agentivas, frases, proposições, afirmações de aresta.

A: anotação em sm:Claim

Novos triplos implicados
1
Crescimento das consultas permanentes
nenhum
Veredito
conservadora

B: sm:DerivedEdge rdfs:subClassOf prov:Entity

Novos triplos implicados
113
Crescimento das consultas permanentes
nenhum
Veredito
conservadora

C: sm:initiator rdfs:range sm:AgentiveEntity

Novos triplos implicados
23
Crescimento das consultas permanentes
+23 entidades agentivas (preenchedores de papel como ukraine, mother, peso)
Veredito
não conservadora → quarentena

D: sm:hasRole rdfs:domain sm:Phrase

Novos triplos implicados
64
Crescimento das consultas permanentes
+45 frases (toda visão parcial de frame)
Veredito
não conservadora → quarentena
Mudança
A mudança D apareceu primeiro como um bug real. Um sm.ttl inicial tinha esse axioma de domínio, e a inferência RDFS do pyshacl transformou todas as 45 visões parciais de frame em frases. Cada uma falhou então em “exatamente uma raiz”. É o caso da política silenciosa de Governança de conceitos, encontrado na prática: um axioma de aparência inofensiva, zero triplos afirmados novos, muitas respostas alteradas.
Mudança
Enquadramento honesto. Esta camada verifica estrutura, presença de proveniência e ancoragem no nível da cadeia. Não verifica a verdade. Uma sentença que copia fielmente uma manchete falsa passa. Uma etiqueta de língua errada passa no SHACL, e somente a consulta à parte do script (Q2c) a captura. Uma shape é tão boa quanto as suas cadeias de correspondência, como o caso do âncora mostra. A motivação, mesmo assim, se sustenta. Terrenzi e Ayvaz (arXiv:2607.05970v1) avaliaram metadados gerados por LLM para cerca de 1.000 conjuntos de dados RDF do ACORDAR 2.0. A reescrita sem restrições recuperou melhor, mas teve a menor fidelidade (taxa de afirmações sustentadas 0,528). Uma reescrita ancorada em perfil chegou a 0,815 e deu o melhor equilíbrio. A restrição sobre o que um gerador pode dizer é de onde vem a fidelidade. O SHACL é um modo barato e determinístico de enunciar e auditar essa restrição depois do fato.

9. Outputs reais das consultas

Todas as consultas estão em research/rdf/queries/ e rodam no pyoxigraph 0.5.11 sobre 3.625 quads. As tabelas completas estão em out/query-results.md.

Q1, afirmações sobre um ator com fontes. 13 frames têm ukraine como iniciador. Cada aresta de papel tem um reificador (regra role_of, relógio certificado) que aponta para o seu artigo. As fontes incluem TASS (7 frames), The Guardian (2 frames de um artigo), NY Post, ABC Australia, Al Jazeera e The Hindu.

Q2, rótulos por língua, com LANGDIR do SPARQL 1.2.

LínguaDir.n
en—266
pt-br—114
es—99
arrtl90
und—26
id—9
17 outras etiquetas—1–2 cada
A Q2b devolve o título de geopolítica em quatro línguas, com 🌍 تحديث الحالة العالمية como @ar--rtl.
Q2c, descompasso de script. id → texto chinês. hi, th, uk → texto em inglês (§1). tr também contém inglês, mas não é assinalado, porque uma verificação de script latino não distingue inglês de turco sem um detector de língua.
Q4b, preenchedores por papel em cada frase. Somente o nó da mãe preenche recipient, time, place, intention e manner. Os frames ao vivo preenchem root, initiator e um causality.

10. Bancos de grafos: Oxigraph, o laboratório Neo4j e um híbrido

Oxigraph (pyoxigraph 0.5.11)Laboratório Neo4j (agents/graph/)
ModeloDatasets RDF 1.2 (conformidade Full: termos-triplo)Grafo de propriedades etiquetado, propriedades nos relacionamentos
ConsultaSPARQL 1.1 mais as funções SPARQL 1.2 usadas aqui (LANGDIR, padrões de termo-triplo)Cypher
Metadados das arestasreificadores; vários por proposiçãoum mapa de propriedades por relacionamento
Validação e inferêncianenhuma embutida. pyshacl e owlrl rodam ao lado, sobre uma projeção RDF 1.1nenhuma para SHACL / OWL no laboratório
Implantaçãobiblioteca embutida (Rust, wheel Python); nenhum servidor necessárioCommunity edition em 127.0.0.1:7474/7687. O README a proíbe no sm-prod
Papel no SM hojeapenas pesquisa (research/rdf/)apenas laboratório, semeado a partir de map.json

O híbrido ensaiado aqui.

  1. O Oxigraph guarda o grafo RDF 1.2 canônico, com rótulos, direções e reificadores.
  2. SHACL e OWL 2 RL o validam, pela projeção RDF 1.1.
  3. export_cypher.py escreve as arestas validadas no laboratório Neo4j, com propriedades temporais no estilo Graphiti e um flag shacl_ok em cada relacionamento.

O lado LPG é, então, uma vista que pode ser reconstruída a partir do RDF e nunca é editada diretamente.

Contexto, não uma recomendação.

  • O GQL, ISO/IEC 39075:2024, é a linguagem ISO de consulta a grafos de propriedades.
  • O Google documenta o Spanner Graph como baseado em GQL e em SQL/PGQ (ISO/IEC 9075-16:2023).
  • Um futuro store de grafos do SM poderia situar-se de qualquer lado da linha RDF / LPG. Este ensaio não mediu nenhum deles em escala; a execução tem 3.625 quads.

11. Ressalvas de ferramentas (sondadas, out/tooling-matrix.json)

Recursopyoxigraph 0.5.11rdflib 7.6.0 → pyshacl 0.40.1, owlrl 7.6.2
VERSION "1.2"simerro de parse
"…"@ar--rtlsimerro de parse
<<( s p o )>>simerro de parse
<< s p o ~ r >>, {\ | … \ | }
simerro de parseJSON-LD @direction na entrada
sim (@ar--rtl)analisa, descarta a direção em silêncioJSON-LD na saída com termos-triplo
recusa (“JSON-LD does not support RDF 1.2 yet”)—SPARQL LANGDIR()
sim—O que isso significa na prática:
- scripts/rdf12_compat.py escreve *.rdf11.ttl para o lado rdflib. Mantém os termos-triplo pela codificação básica da nota de Interoperabilidade (rdf:PropositionForm) e descarta a direção, contando cada perda: 73 no vocabulário, 15 no exemplo da mãe, 1 na exportação.
- A ida e volta encode → decode é isomorfa para os três arquivos.
- As inferências que o owlrl faz sobre nós rdf:PropositionForm são inferências sobre a codificação. Não são a semântica do RDF 1.2.
- O changelog do Oxigraph coloca o RDF 1.2 atrás da feature de build rdf-12 desde 0.5.0-beta.1. A wheel PyPI usada aqui a tem habilitada.

12. Limites honestos

  • Especificações em rascunho. O RDF 1.2 Concepts é um CR. Turtle, SPARQL 1.2 e SHACL 1.2 são Working Drafts. As notas de Interoperabilidade e What’s New são rascunhos, e o corpo de What’s New ainda é, em grande parte, um stub. Detalhes de sintaxe podem mudar.
  • Duas cadeias de ferramentas. A validação e a inferência rodam sobre uma projeção RDF 1.1 com perdas. A direção desaparece ali, e os termos-triplo são codificados.
  • Dados parciais.
  • /api/orgs (401) e /api/agents/map (403) não foram alcançáveis sem credenciais, de modo que não há grafo da organização nem mapa de agentes ao vivo.
  • ?lang=ar devolveu o brief em inglês, e o brief em espanhol está em parte em inglês.
  • O brief expõe 24 das suas 91 fontes e não diz qual fonte sustenta qual sentença.
  • Os frames ao vivo são parciais e sem data.
  • A ancoragem por cadeia não é ancoragem semântica. Os âncoras a tornam permissiva (s4), e um nome correto em uma afirmação errada passa.
  • Cobertura IEML. Sem USL, sem paradigmas de dicionário, sem acento semântico, sem frase aninhada. Os nove nomes de papel seguem as cadeias Grammar v.1 usadas no SM. A sua semântica exata, por exemplo causality versus instrumento, é a leitura do SM, não a de uma autoridade IEML.
  • Traduções. Os rótulos em pt-BR, es e ar foram escritos para o protótipo e não foram revisados.
  • Consultas permanentes. A conservatividade é medida em quatro consultas permanentes escolhidas à mão. Um conjunto diferente de consultas dá vereditos diferentes.

13. Reproduzir

cd research/rdf
./run_all.sh            # venv from requirements.txt; rebuilds out/ from data/live/
./run_all.sh --fetch    # re-snapshot the public API (GET only)

Nada em research/rdf/ é importado pelo backend. Nada foi acrescentado a backend/requirements.txt.

Referências

W3C e normas:

  • RDF 1.2 Concepts and Abstract Data Model, CR Snapshot 2026-04-07 — https://www.w3.org/TR/rdf12-concepts/
  • RDF 1.2 Turtle, WD 2026-09-14 — https://www.w3.org/TR/rdf12-turtle/
  • RDF 1.2 Interoperability, Group Note Draft 2026-07-23 — https://www.w3.org/TR/rdf12-interop/
  • What’s New in RDF 1.2, Group Note Draft 2026-07-14 — https://www.w3.org/TR/rdf12-new/
  • SPARQL 1.2 Query Language, WD 2026-10-04 — https://www.w3.org/TR/sparql12-query/
  • JSON-LD 1.1, REC 2020-07-16 — https://www.w3.org/TR/json-ld11/ · API — https://www.w3.org/TR/json-ld11-api/
  • SHACL, REC 2017-07-20 — https://www.w3.org/TR/shacl/ · SHACL 1.2 Core, WD 2026-09-18 — https://www.w3.org/TR/shacl12-core/
  • OWL 2 Profiles (Second Edition), REC 2012-12-11 — https://www.w3.org/TR/owl2-profiles/
  • SKOS Reference, REC 2009-08-18 — https://www.w3.org/TR/skos-reference/
  • PROV-O, REC 2013-04-30 — https://www.w3.org/TR/prov-o/
  • OntoLex-Lemon, Final Community Group Report 2016-05-10 — https://www.w3.org/2016/05/ontolex/
  • ISO/IEC 39075:2024 (GQL) — https://www.iso.org/standard/76120.html · Spanner Graph ISO standards — https://cloud.google.com/spanner/docs/graph/iso-standards

IEML (como em IEML):

  • Lévy, P. (2023). Semantic computing with IEML. — https://journals.sagepub.com/doi/10.1177/26339137231207634
  • INTLEKT — https://intlekt.io/ieml/
  • Keyne/ieml-language — https://github.com/Keyne/ieml-language · Keyne/libieml — https://github.com/Keyne/libieml

Metadados de LLM:

Relacionados nesta base


Ensaio executado em 2026-10-07. Outputs: research/rdf/out/.

Voltar ao topo ↑

Todas as entradas Glossário Fundamentos