Blank node

From Wikipedia, the free encyclopedia

In RDF, a blank node or anonymous resource or bnode) is a resource, or node in an RDF graph, which is not identified by a URI. A bank node can be used as subject or object in an RDF triple.

Contents

[edit] Example

"John has a friend born the 21st of April" can be written with two triples linked by a blank node représenting the anonymous friend of John.

ex:Jean   foaf:knows   _:p1
_:p1   foaf:birthDate   04-21

The first triple reads "John knows p1". The second triple reads "p1 is born on April 21st"

ex:John is a named resource, which means this resource is absolutely identified by the URI obtained by replacing the ex: prefix by the XML namespace it stands for, such as http://example.org/Person#John.

_:p1 represents John,'s anonymous friend, not identified by a URI. One can know by the semantics declared in the FOAF vocabulary that the class of _:p1 is foaf:Person.

[edit] RDF-XML Notation

In RDF-XML syntax a blank node can be represented by nested elements, such as the following.

<foaf:Person rdf:about="http://example.org/Person#John">
 <foaf:knows>
  <foaf:Person foaf:birthDate="04-21"/>
 </foaf:knows>
</foaf:Person>

If the same blank node is used more that once in the same RDF graph, it can be identified by a rdf:nodeID attribute. This identification is limited to the local graph. For example to express that John and Mary have a common friend, one can write.

<foaf:Person rdf:about="http://example.org/Person#John">
 <foaf:knows>
  <foaf:Person rdf:nodeID="b1"/>
 </foaf:knows>
</foaf:Person>
<foaf:Person rdf:about="http://example.org/Person#Mary">
 <foaf:knows>
  <foaf:Person rdf:nodeID="b1"/>
 </foaf:knows>
</foaf:Person>

[edit] Classical use cases

[edit] Representation of complex data

A blank node can be used to indirectly attach to a resource a consistent set of properties which together represent a complex data, such as a postal address. The different fields of the complex data are represented as properties attached to the blank node. For example in the RDF VCard vocabulary one will write.

   <rdf:Description rdf:about = "http://qqqfoo.com/staff/corky" >
    ...
     <vCard:ADR rdf:parseType="Resource">
       <vCard:Street>111 Lake Drive </vCard:Street>
       <vCard:Locality>WonderCity </vCard:Locality>
       <vCard:Pcode>5555</vCard:Pcode>
       <vCard:Country>Australia</vCard:Country>
     </vCard:ADR>
    ...
   </rdf:Description>

[edit] Anonymous classes in OWL

The ontology language OWL uses blank nodes to represent annymous classes such as unions or intersections of classes, or classes called restrictions, defined by a constraint on a property.

For example to express that a person has at most one bith date, one will define the class "Person" as a subclass of an anonymous class of type "owl:Restriction". This anonymous class is defined by two attributes specifying the constrained property and the constraint itself (cardinality > 1)

<owl:Class rdf:about="http://example.org/ontology/Person">
   <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>
In other languages