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Γ§Γ£oO que Γ©Exemplo
SujeitoO recurso sendo descrito (sempre URI ou blank node)mtg:LightningBolt
PredicadoA relaΓ§Γ£o ou propriedade (sempre URI)mtg:hasManaCost
ObjetoO 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:

TipoObjeto Γ©Exemplo
Datatype propertyLiteral β€” string, int, decimal, dateTime (com tipo XSD)mtg:LightningBolt mtg:hasName "Lightning Bolt"@en
Object propertyOutro recurso (URI) β€” vocΓͺ pode navegar delemtg: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.