I understand that a named node
in RDF is a node that has a name (i.e. can be identified by an IRI), and that a blank node
is a node that is not named (i.e. not described via an IRI).
Is it correct to say that a node represents a resource in RDF? In this case, both named and blank nodes would be considered resources.
Looking at an RDF schema I see a number of XML tags that seem to represent nodes (both blank and named). For example:
<rdf:Description rdf:about="http://.../SomeObject">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
<rdfs:subClassOf rdf:resource="http://.../OtherClass"/>
<rdfs:subClassOf rdf:nodeID="node1e2d5tndrx143"/>
</rdf:Description>
and
<rdf:Description rdf:nodeID="node1e2d5tndrx60">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Datatype"/>
<owl:oneOf rdf:nodeID="node1e2d5tndrx61"/>
</rdf:Description>
(and because this node references another blank node)
<rdf:Description rdf:nodeID="node1e2d5tndrx61">
<rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"/>
<rdf:first>1</rdf:first>
<rdf:rest rdf:nodeID="node1e2d5tndrx62"/>
</rdf:Description>
It would seem to me that the resources available at this particular API endpoint include these three nodes, one of which is named http://www.w3.org/2001/XMLSchema#float
and two of which are blank (node1e2d5tndrx60
, node1e2d5tndrx61
)
This link - https://lists.w3.org/Archives/Public/public-esw-thes/2004Nov/0061.html - seemingly an old w3.org on the subject of rdf:about
vs rdf:ID
vs rdf:nodeID
mentions that blank nodes are indicated via the rdf:nodeID
attribute.
If both these nodes are 'resources' at this particular API endpoint (I assume they are - please let me know if that is incorrect), so far as I know I could never query for a blank node directly, but that in this particular RDF document the blank nodes are being used to constrain what objects are allowed (via the rdf:range
property) for a triple that specifies the hasObjectClass
property/predicate:
<rdf:Description rdf:about="http://.../hasSomeObjectClass">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<rdfs:label>Some Object Class</rdfs:label>
<rdfs:domain rdf:resource="http://..../SomeObject"/>
<rdfs:range rdf:nodeID="node1e2d5tndrx60"/>
</rdf:Description>
My understanding is that triples using the :hasSomeObjectClass predicate (<subj> <pred> <obj>
) will:
- Include/can only include subjects that are of
rdf:type
"SomeObject" - Include/can only include objects that are 'subtyped' of the blank node
node1e2d5tndrx60
Lastly, in blank node node1e2d5tndrx60
I see that there is an owl
constraint - any allowable object can be considered as part of a list. Presumably a list of objects that share a particular class?
Question
Looking at the domain property of the hasSomeObjectClass
resource, I am able to find:
- A node that represents the
SomeObject
class - Many nodes that have the
rdfs:subClassOf
property and that referenceSomeObject
as the resource
So in terms of how a triple specification is resolved in which the predicate specifies a domain of this type, I understand conceptually how that can be enforced/resolved.
However I can't see a link between the blank node and how the range constraint could be enforced/resolved. Is it easy to explain on a conceptual level how blank nodes are used in terms of resolving specified triples?
I'm very, very new to the world of Linked Data. Please let me know how this question could be improved on!