Re: Blank Nodes and SPARQL

On Mon, 2005-07-11 at 21:44 +0200, wrote:
> That '!' is a forward path in n3 and :s!:p can be used to identify
> a blank node
> e.g. in the triple :s :p _:x that _:x can be written as :s!:p
> When :p is an owl:FunctionalProperty :s!:p stands for one resource
> (I make quite some use of that to work with functional terms but
> then the :s is mostly a rdf List)

Yes, our work on diff/patch makes use of path expressions
like that.. the syntax at the time was v.p and v^q ...

It is straightforward to pinpoint the parts of the graph that have
changed when all nodes are named, but less so in the presence of
anonymous nodes.


To address robustness, we distinguish two types of RDF graph deltas: a
weak delta gives enough information to apply it to exactly the graph it
was computed from, but a strong delta specifies the changes in a
context-independent manner. The difference is not in the patch file
format, but in the information a particular patch gives.

Returning to the bank example, if bank account numbers are globally
unique, then the replacement pattern will bind ?x to a node identifying
a particular bank account. In OWL[OWL] terms, if bank:accountNumber is
an owl:InverseFunctionalProperty, then the node must be the owl:sameAs
any other node with the same account number. In that case, the patch
will be strong.

If, however, many accounts can have the same number, applying that patch
to another knowledge base may inadvertently alter the wrong account. The
patch would be weak.

In normal information processing, of course, numbers such as bank
account numbers are used to avoid this confusion. Consider those graphs
in which every blank node is in fact unambiguously identified by one
functional or inverse functional property. Further, that property is
invariant under any changes represented by the deltas.

The pattern for terms goes as follows:

Given a background ontology W and a graph G, if a blank node b in G is
the object of a triple whose subject v is functionally ground and whose
predicate p is an owl:FunctionalProperty according to W, then v.p is a
functional term label for b in G with respect to W. Likewise, v\uparrow
q is a functional term label for b if q is an
owl:InverseFunctionalProperty, b is the subject, and v is the object.
Recursively, v is functionally ground if it is a name (URI or literal)
or a bnode with a functional term label.


the tutorial section on these path expressions is

Dan Connolly, W3C
D3C2 887B 0F92 6005 C541  0875 0F91 96DE 6E52 C29E

Received on Monday, 11 July 2005 19:54:44 UTC