Docs / Base de Conhecimento / IEML × RDF × Situation Monitor — um grafo para sentido, fontes e tempo
Base de Conhecimento
Conteúdo
- Em resumo
- Referências online (verificadas)
- Instantâneos offline (proteção contra links quebrados)
- 1. Etiquetagem RDF, enunciada com precisão
- 2. RDF 1.1 versus RDF 1.2
- 3. Mapeamento IEML → RDF
- 4. O exemplo da mãe
- 5. O conteúdo do SM no mesmo grafo
- 5.1 Mapa argumentativo
- 5.2 Grafo de conceitos (summary_concepts)
- 5.3 Gramática
- 5.4 Mapa de identidade das palavras
- 5.5 Briefs e fontes
- 6. Metadados das arestas: reificadores em primeiro lugar
- 7. Uma visão em lógica proposicional
- 8. SHACL e OWL 2 RL como camada de validação do output de LLM
- 9. Outputs reais das consultas
- 10. Bancos de grafos: Oxigraph, o laboratório Neo4j e um híbrido
- 11. Ressalvas de ferramentas (sondadas, out/tooling-matrix.json)
- 12. Limites honestos
- 13. Reproduzir
- Referências
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.
- RDF 1.2 Concepts and Abstract Data Model — W3C Candidate Recommendation Snapshot, 7 April 2026.
- RDF 1.2 Turtle — W3C Working Draft, 14 September 2026.
- RDF 1.2 Interoperability — W3C Group Note Draft, 23 July 2026.
- What’s New in RDF 1.2 — W3C Group Note Draft, 14 July 2026 (W3C news item).
- SPARQL 1.2 Query Language — W3C Working Draft, 4 October 2026 (
LANGDIR,hasLANGDIR,TRIPLE,isTRIPLE). - JSON-LD 1.1 and JSON-LD 1.1 Processing Algorithms and API — W3C Recommendations, 16 July 2020.
- Shapes Constraint Language (SHACL) — W3C Recommendation, 20 July 2017. SHACL 1.2 Core — W3C Working Draft, 18 September 2026.
- OWL 2 Web Ontology Language Profiles (Second Edition) — W3C Recommendation, 11 December 2012. Section 4 is OWL 2 RL.
- SKOS Simple Knowledge Organization System Reference — W3C Recommendation, 18 August 2009.
- PROV-O: The PROV Ontology — W3C Recommendation, 30 April 2013.
- Lexicon Model for Ontologies (OntoLex-Lemon) — W3C Final Community Group Report, 10 May 2016.
- Terrenzi & Ayvaz, Faithful or Findable? Evaluating LLM-Generated Metadata for RDF Dataset Search — arXiv:2607.05970v1.
- ISO/IEC 39075:2024 — GQL — published 2024-04. Spanner Graph and ISO standards.
- Oxigraph (CHANGELOG).
Instantâneos offline (proteção contra links quebrados)
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, escritaaem 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.
arpermanece 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
toRdfdo JSON-LD 1.1 tem, portanto, uma opçãordfDirection(i18n-datatypeoucompound-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:Statementcomrdf: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 dadosrdf: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ídiaversion=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 desm: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 temsm:roleIndex0–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 desm: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íduosm:Inflectioncom o seu traço UD eskos:closeMatchpara o LexInfo. A ordem é mantida emsm: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(closeMatchlexinfo: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:prefLabelcom etiqueta de língua noskos:Conceptalcançado porontolex:sense/ontolex:reference- RDF
"contar"@pt-BR- No exemplo da mãe
- Texto-fonte
sm:iemlSource, verbatim
- RDF
- o bloco
@nodeinteiro - 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
joyfullde Keyne é mantido verbatim emsm:iemlSource. O lexema éjoyful laughter, umaontolex: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
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 desm:ArgumentNodee desm: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 regrasave_map, o relógio certificado, oupdated_atdo mapa (2026-07-15 18:05 UTC) como tempo de registro, eprov:wasAttributedTooupdated_bydo 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 mapa | Correspondência | Papel IEML | Nós |
|---|---|---|---|
| instrument | closeMatch | causality | 4 |
| root | exactMatch | root | 4 |
| initiator | exactMatch | initiator | 3 |
| process | — (sem correspondência) | — | 3 |
| destination | closeMatch | recipient | 2 |
| manner | exactMatch | manner | 1 |
| cause | exactMatch | causality | 1 |
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, maissm:EvidenceKeywordquando o nó tem uma url de fonte esm:ClaimKeywordquando não tem. - Cada aresta é afirmada e reificada como um
sm:DerivedEdgecom a sua regra:ranked_part_of36,note_group15,_clause12. O reificador também carrega o relógio de opinião, ogenerated_atdo 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
_idde 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:closeMatchpara as classes gramaticais do LexInfo. Os ids de ocorrência tornam-se IRIsontolex:LexicalEntry(en|VERB|tell→lex:en-VERB-tell). - Frames. Um frame de
grammar_index.frames_from_tokenstorna-se umsm:GrammarFramecujos papéis vêm dorole_ofdo SM (nsubj → initiator, obj → interactant, iobj → recipient, …). Os FEATS do Stanza tornam-sesm: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 (paratell,ukraine,mother) são, portanto,sm:GrammarFrameView, deliberadamente nãosm: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_doceframes_from_tokensdo SM.
Q4c, a mesma sentença em inglês pelas duas lentes:
| # | Papel | Nó IEML de Keyne | role_of do SM (Stanza) |
|---|---|---|---|
| 0 | root | tell | tell |
| 1 | initiator | mother | mother |
| 2 | interactant | story | story |
| 3 | recipient | child | — |
| 4 | causality | book | — |
| 5 | time | sleep | — |
| 6 | place | house | — |
| 7 | intention | love | — |
| 8 | manner | joyful laughter & cuddle | — |
Por que o parser para em três papéis:
- house é um
oblnu, sem um subtipo:locpara orole_ofusar. - 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:LexicalEntrycomontolex:denoteso 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.2 | rdf:Statement RDF 1.1 | Nó n-ário | |
|---|---|---|---|
Triplo simples consultável como ?s sm:evidenceFor ?o | sim (a anotação o afirma) | sim, se afirmado à parte | não |
| Duas fontes como dois reificadores de uma proposição | sim, por desenho | sim, mas nada amarra os dois nós a uma proposição | sim, como dois nós de relação |
| rdflib / pyshacl / owlrl | não; precisa da codificação básica | sim | sim |
| Shapes SHACL 1.0 sobre os metadados | via um alvo SPARQL, ou sobre a projeção RDF 1.1 | sim | sim |
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 EntityEdge | Propriedade de relacionamento Neo4j |
|---|---|---|
sm:validFrom | valid_at | r.valid_at (datetime) |
sm:validUntil | invalid_at | r.invalid_at |
prov:generatedAtTime | created_at | r.created_at |
sm:expiredAt | expired_at | r.expired_at |
prov:wasDerivedFrom | episodes | r.episodes (lista de IRIs de artigos) |
sm:rule, sm:clock, sm:certificate | — | r.rule, r.clock, r.certificate |
| IRI do reificador | uuid da aresta | r.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 UTC | 2026-10-07 06:00 UTC | 21 | 12 / 15 / 36 |
| 2026-10-07 04:30 UTC | 2026-08-01 00:00 UTC | 21 | 0 (ainda não registrado) |
| 2026-10-07 03:00 UTC | 2026-10-07 06:00 UTC | 21 | 0 (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:supportsesm:opposessã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ção | Kind | Apoiada por | Atacada por |
|---|---|---|---|
usl:root.field | Claim | usl:scenario.theory.superorganism | usl:opposition.agent.vs.process |
usl:scenario.rut.ciclo001 | Scenario | usl:path.ltring.doctrine, usl:scenario.pi.fractal | — |
usl:scenario.tevep.method | Scenario | usl: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ça | Entidade | SHACL / Q3 | Python name_in_text | Q3b estrita de nome completo |
|---|---|---|---|---|
| s2 | DraftKings | não ancorada | s3 | Uruguay |
| não ancorada | s4 | Los Angeles Mayor Bass | ancorada | ancorada por 6ac5b8c700cc76971d42d218 |
| não ancorada | stub | Atlantis Central Bank | não ancorada | — |
| não ancorada | Os 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
evidenceFora 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.
ukrainecomo 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 cadaprefLabeltem 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 emowl: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.ttlinicial 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íngua | Dir. | n |
|---|---|---|
| en | — | 266 |
| pt-br | — | 114 |
| es | — | 99 |
| ar | rtl | 90 |
| 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/) | |
|---|---|---|
| Modelo | Datasets RDF 1.2 (conformidade Full: termos-triplo) | Grafo de propriedades etiquetado, propriedades nos relacionamentos |
| Consulta | SPARQL 1.1 mais as funções SPARQL 1.2 usadas aqui (LANGDIR, padrões de termo-triplo) | Cypher |
| Metadados das arestas | reificadores; vários por proposição | um mapa de propriedades por relacionamento |
| Validação e inferência | nenhuma embutida. pyshacl e owlrl rodam ao lado, sobre uma projeção RDF 1.1 | nenhuma para SHACL / OWL no laboratório |
| Implantação | biblioteca embutida (Rust, wheel Python); nenhum servidor necessário | Community edition em 127.0.0.1:7474/7687. O README a proíbe no sm-prod |
| Papel no SM hoje | apenas pesquisa (research/rdf/) | apenas laboratório, semeado a partir de map.json |
O híbrido ensaiado aqui.
- O Oxigraph guarda o grafo RDF 1.2 canônico, com rótulos, direções e reificadores.
- SHACL e OWL 2 RL o validam, pela projeção RDF 1.1.
export_cypher.pyescreve as arestas validadas no laboratório Neo4j, com propriedades temporais no estilo Graphiti e um flagshacl_okem 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)
| Recurso | pyoxigraph 0.5.11 | rdflib 7.6.0 → pyshacl 0.40.1, owlrl 7.6.2 |
|---|---|---|
VERSION "1.2" | sim | erro de parse |
"…"@ar--rtl | sim | erro de parse |
<<( s p o )>> | sim | erro de parse |
<< s p o ~ r >>, {\ | … \ | } | ||
| sim | erro de parse | JSON-LD @direction na entrada |
sim (@ar--rtl) | analisa, descarta a direção em silêncio | JSON-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=ardevolveu 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
- IEML — frase de nove papéis, dicionário, USL
- Governança de conceitos — plano, certificado, conservatividade, dois relógios
- Memória de agentes e repositórios de modelo de mundo — arestas bi-temporais e episódios do Graphiti
- Plataforma WWW — RDF / OWL / JSON-LD ao lado do IEML
- Knowledge OS — mapa argumentativo
- Índices de parte: Engenharia · Ciência da computação
Ensaio executado em 2026-10-07. Outputs: research/rdf/out/.
Nesta página
- Em resumo
- Referências online (verificadas)
- Instantâneos offline (proteção contra links quebrados)
- 1. Etiquetagem RDF, enunciada com precisão
- 2. RDF 1.1 versus RDF 1.2
- 3. Mapeamento IEML → RDF
- 4. O exemplo da mãe
- 5. O conteúdo do SM no mesmo grafo
- 5.1 Mapa argumentativo
- 5.2 Grafo de conceitos (summary_concepts)
- 5.3 Gramática
- 5.4 Mapa de identidade das palavras
- 5.5 Briefs e fontes
- 6. Metadados das arestas: reificadores em primeiro lugar
- 7. Uma visão em lógica proposicional
- 8. SHACL e OWL 2 RL como camada de validação do output de LLM
- 9. Outputs reais das consultas
- 10. Bancos de grafos: Oxigraph, o laboratório Neo4j e um híbrido
- 11. Ressalvas de ferramentas (sondadas, out/tooling-matrix.json)
- 12. Limites honestos
- 13. Reproduzir
- Referências