Re: B-scopes

On 14 Nov 2012, at 11:32, Andy Seaborne wrote:
> I have no idea what a "blank node scope" is.

Here's another attempt at phrasing. It still avoids a proper definition for “scope”, but perhaps does so in a less jarring way. It actually does away again with the b-scope term, and just uses “scope” or “scope for blank nodes”:

[[
A *blank node identifier* is a Unicode string that is not an IRI.

A *blank node* is a blank node identifier in a scope.

Every RDF document forms its own, self-contained *scope* for blank nodes. The handling of scopes outside of RDF documents (for example, in RDF stores) is implementation-dependent. Other specifications MAY impose additional scoping rules.
]]

> Any systems that has the default query graph as the union of named graphs is sharing bnodes across graphs.
> 
> Such systems are not 'rare'.

Fair enough.

> ... sharing ...
> [[
> but (for the time being) not between graph stores.
> ]]
> 
> The skolemization note makes this confusing.  While not strictly at odds with it, the appearance of skolemization suggests global bnodes.

Well, perhaps the skolemization text isn't as clear as it needs to be in this regard, but that's a separate problem.

Skolemization doesn't make blank nodes global. It creates IRIs where you previously had blank nodes. It's incorrect to think of them as “global identifiers for blank nodes” or something like that. They are substitutes for blank nodes, and they denote whatever the blank node “denoted” before it was replaced.

> Alternative for consideration:
> 
> 1/ Make clear that parsing produces a new blank nodes every time for the same label.
> 
> 2/ Talk about "fresh blank node" and not the universal not-quite-arbitrary set of blank nodes.
> 
> 3/ Bnodes are global.

I agree with Pat that you can't have 2) and 3) at the same time. If blank nodes are global, then how can you know that a blank node is fresh? Wouldn't you need some sort of namespacing mechanism?

In reality, blank nodes are not implemented as global, and nothing in the other specs requires them to be. I see no basis for claiming in RDF Concepts that they are.

It's true that the concept of a “fresh blank node” causes very little confusion in practice, but that's because it always occurs in contexts where the assumption of 3) isn't made or isn't needed.

> Then the "b-scope" and "bNode = (b-scope, label)" is an implementation approach.

See the definition at the top of this message for one that doesn't explain blank nodes as a pair, while still retaining the notion of scope.

The phrase added by Pat should also help to clarify what implementations have (and don't have) to do:

[[
An RDF graph is *copied into a scope* by systematically replacing the graph's blank nodes with fresh ones in the target scope. If none of the source's blank node identifiers are used in the target scope, this can be achieved by simply using the same blank node identifiers in the new scope.
]]

IOW, the relabelling is a no-op if the sets of blank node identifiers are disjoint. In systems that assign blank node identifiers randomly, the sets *will* be disjoint (with a sufficiently high probability).

Best,
Richard

Received on Thursday, 15 November 2012 18:51:49 UTC