In RDF, a blank node (also called bnode) is a node in an RDF graph representing a resource for which a URI or literal is not given. The resource represented by a blank node is also called an anonymous resource. By RDF standard a blank node can only be used as subject or object in an RDF triple, although in some syntaxes like Notation 3 [1] it is acceptable to use a blank node as a predicate. If a blank node has a node ID (not all blank nodes are labeled in all RDF serializations), it is limited in scope to a serialization of a particular RDF graph, i.e. the node p1 in the subsequent example does not represent the same node as a node named p1 in any other graph.
In RDF, a blank node (also called bnode) is a node in an RDF graph representing a resource for which a URI or literal is not given. The resource represented by a blank node is also called an anonymous resource. By RDF standard a blank node can only be used as subject or object in an RDF triple, although in some syntaxes like Notation 3 [1] it is acceptable to use a blank node as a predicate. If a blank node has a node ID (not all blank nodes are labeled in all RDF serializations), it is limited in scope to a serialization of a particular RDF graph, i.e. the node p1 in the subsequent example does not represent the same node as a node named p1 in any other graph.
Contents |
"John has a friend born on 21st of April" can be written with two triples linked by a blank node representing the anonymous friend of John.
ex:John 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.
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 than 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>
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>
The ontology language OWL uses blank nodes to represent anonymous 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 birth 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>