Ressource anonyme
Une ressource anonyme ou nœud anonyme (en anglais blank node ou bnode) est dans le langage RDF, une ressource, ou nœud d'un graphe RDF, qui n'est pas identifiée par une URI. Une ressource anonyme peut être sujet ou objet d'un triplet RDF.
Exemple
"Jean a un ami né un " peut se traduire par les deux triplets suivants, qui utilisent des propriétés définies par le vocabulaire FOAF.
ex:Jean foaf:knows _:p1 _:p1 foaf:birthDate 04-21
Le premier triplet se lit "Jean connait p1". Le deuxième se lit "p1 est né un "
ex:Jean est une ressource nommée, c'est-à -dire identifiée de façon absolue par l'URI obtenue en remplaçant le préfixe ex: par l'espace de noms XML qu'il représente, par exemple http://example.org/Personne#Jean.
_:p1 représente l'ami de Jean, une personne anonyme, non identifiée par une URI. On peut néanmoins déduire que _:p1 est de type foaf:Person d'après le premier triplet, et la sémantique déclarée dans FOAF:
foaf:knows rdfs:range foaf:Person
Notation en RDF-XML
En RDF-XML un nœud anonyme peut être représenté en utilisant des éléments emboîtés.
<foaf:Person rdf:about="http://example.org/Personne#Jean">
<foaf:knows>
<foaf:Person foaf:birthDate="04-21"/>
</foaf:knows>
</foaf:Person>
Si le même nœud anonyme est utilisé plusieurs fois dans le même graphe RDF, il peut être identifié par un attribut rdf:nodeID, qui l'identifie à l'intérieur de ce graphe. Par exemple pour exprimer que Jean et Marie ont un ami commun, mais dont on ne sait rien par ailleurs, on écrira:
<foaf:Person rdf:about="#Jean"> <foaf:knows> <foaf:Person rdf:nodeID="b1"/> </foaf:knows> </foaf:Person> <foaf:Person rdf:about="#Marie"> <foaf:knows> <foaf:Person rdf:nodeID="b1"/> </foaf:knows> </foaf:Person>
Exemples d'utilisation classiques
Représentation de données complexes
Un nœud anonyme sera utilisé pour attacher de façon indirecte à une ressource un ensemble cohérent de propriétés qui constituent une donnée complexe. Les différents champs de la donnée complexe sont représentés comme des propriétés attachées au nœud anonyme.
Par exemple, une adresse postale est considérée comme une donnée complexe, et les différents éléments de l'adresse (numéro, rue, ville, pays, etc.) sont des propriétés du nœud anonyme représentant l'adresse.
Ce qui suit est un exemple complet d'une VCard RDF[1] :
<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:v="http://www.w3.org/2006/vcard/ns#"> <v:VCard rdf:about = "http://example.com/me/corky" > <v:fn>Corky Crystal</v:fn> <v:nickname>Corks</v:nickname> <v:tel> <rdf:Description> <rdf:value>+61 7 5555 5555</rdf:value> <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/> <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Voice"/> </rdf:Description> </v:tel> <v:email rdf:resource="mailto:corky@example.com"/> <v:adr> <rdf:Description> <v:street-address>111 Lake Drive</v:street-address> <v:locality>WonderCity</v:locality> <v:postal-code>5555</v:postal-code> <v:country-name>Australia</v:country-name> <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home"/> </rdf:Description> </v:adr> </v:VCard> </rdf:RDF>
Représentation de classes anonymes en OWL
Le langage d'ontologie OWL utilise des ressources anonymes pour définir par exemple des réunions ou intersections de classes, ou des classes appelées restrictions, définies par une contrainte sur une propriété.
Par exemple pour exprimer qu'une personne possède au maximum une date d'anniversaire, on écrira que la classe "Personne" est sous-classe d'une classe anonyme de type "owl:Restriction". Cette classe anonyme est définie par deux attributs indiquant la propriété concernée d'une part, et la contrainte imposée d'autre part (cardinalité ≤ 1)
<owl:Class rdf:about="http://example.org/ontology/Personne"> <rdfs:subClassOf> <owl:Restriction> <owl:maxCardinality>1</owl:maxCardinality> <owl:onProperty rdf:resource="http://xmlns.com/foaf/0.1/birthDate"/> </owl:Restriction> </rdfs:subClassOf> </owl:Class>