RDF Basics
Triples, Turtle, URIs, datatype vs object property, TBox vs ABox β a fundaΓ§Γ£o do Semantic Web
RDF (Resource Description Framework) Γ© um modelo de dados em triplas: tudo no mundo Γ© descrito por
sujeito β predicado β objeto. NΓ£o hΓ‘ tabelas, nΓ£o hΓ‘ documentos β sΓ³ fatos. O grafo emerge naturalmente porque o objeto de uma tripla pode ser sujeito de outra. A unidade atΓ΄mica: a tripla
Uma tripla tem exatamente trΓͺs posiΓ§Γ΅es, sempre nessa ordem:
| PosiΓ§Γ£o | O que Γ© | Exemplo |
|---|---|---|
| Sujeito | O recurso sendo descrito (sempre URI ou blank node) | mtg:LightningBolt |
| Predicado | A relaΓ§Γ£o ou propriedade (sempre URI) | mtg:hasManaCost |
| Objeto | O valor: recurso (URI), literal (string/nΓΊmero/data) ou blank node | "R" |
Blank node na posiΓ§Γ£o de objeto nΓ£o Γ© detalhe acadΓͺmico. Restrictions OWL (
owl:Restriction) e listas RDF (rdf:first/rdf:rest, usadas por owl:unionOf) vivem inteiramente em blank nodes como objeto. Quem aprende que objeto Γ© "URI ou literal" nΓ£o entende nada ao abrir uma ontologia real. Detalhe de sintaxe: desde RDF 1.1, um literal simples "R"jΓ‘ Γ©xsd:string β escrever "R"^^xsd:string Γ© redundante. Datatype property vs Object property
A diferenΓ§a que separa "literal" de "outro recurso". Ressalva: essa tipagem vem do OWL (owl:DatatypeProperty / owl:ObjectProperty), nΓ£o do RDF puro β em RDF um predicado Γ© sΓ³ um URI, e o que distingue Γ© o tipo do objeto naquela tripla:
| Tipo | Objeto Γ© | Exemplo |
|---|---|---|
| Datatype property | Literal β string, int, decimal, dateTime (com tipo XSD) | mtg:LightningBolt mtg:hasName "Lightning Bolt"@en |
| Object property | Outro recurso (URI) β vocΓͺ pode navegar dele | mtg:LightningBolt mtg:hasColor mtg:Red |
Por que separar? Reasoner trata diferente: object property permite navegaΓ§Γ£o, heranΓ§a, inferΓͺncia (Lightning Bolt Γ© vermelho, vermelho Γ© tipo cor β Lightning Bolt tem cor). Literal Γ© folha β fim da linha.
Como uma tripla vira grafo
Cada tripla Γ© uma aresta direcionada. O grafo Γ© a uniΓ£o de todas as triplas:
Triplas:
mtg:LightningBolt mtg:hasName "Lightning Bolt"@en
mtg:LightningBolt mtg:hasColor mtg:Red
mtg:LightningBolt mtg:hasManaCost "R"
mtg:Red rdf:type mtg:Color
mtg:Red rdfs:label "Red"@en
Grafo equivalente:
"Lightning Bolt"@en "R"
β² β²
β hasName β hasManaCost
β β
ββββββ΄ββββββββββββββ΄βββββ
β mtg:LightningBolt β
ββββββββββ¬βββββββββββββββ
β hasColor
βΌ
ββββββββββββββββββββββ "Red"@en
β mtg:Red β ββ rdfs:label βββΆ
ββββββββββ¬ββββββββββββ
β rdf:type
βΌ
ββββββββββββββββββββββ
β mtg:Color β
ββββββββββββββββββββββ
O que Γ© uma tripla RDF?
Uma afirmaΓ§Γ£o em forma sujeito-predicado-objeto onde o sujeito Γ© URI ou blank node, o predicado Γ© sempre URI, e o objeto pode ser URI, literal ou blank node. Γ a unidade atΓ΄mica do RDF: cada fato Γ© uma tripla, e o grafo emerge da uniΓ£o de todas. Diferente de uma row de banco, nΓ£o hΓ‘ "campos opcionais" β vocΓͺ apenas adiciona/omite triplas. Isso permite que diferentes fontes contribuam para o mesmo recurso sem precisar combinar schemas previamente.