- From: Peter F. Patel-Schneider <pfps@research.bell-labs.com>
- Date: Tue, 14 Jan 2003 10:41:21 -0500 (EST)
- To: dave.beckett@bristol.ac.uk
- Cc: www-rdf-comments@w3.org
From: Dave Beckett <dave.beckett@bristol.ac.uk>
Subject: Re: review of LCC documents as of 26 December 2002
Date: Tue, 07 Jan 2003 12:40:53 +0000
> >>>"Peter F. Patel-Schneider" said:
> >
> > Integrated Review of the RDF Core WG LCC Documents (as of 26 December 2002)
> >
> >
> > This review is the result of reading the RDF Core WG LCC Documents as they
> > existed on 26 December 2002.
[...]
> > The method for ensuring that there are no clashes between generated blank
> > node identifiers and blank node identifiers made from rdf:nodeID attribute
> > values requires a complete pass over the document before any blank node
> > identifier can be generated. This is the case because these two sets use
> > the same set of identifiers and any element of this set can be made from an
> > rdf:nodeID attribute value. This problem has been pointed out before but
> > has not yet been fixed. The only change has been to add a resolution
> > method to this section that is not actually allowable from the grammar
> > rules in Section 7.
>
> It has been noted and fixed.
I disagree. See below for an extensive comment.
> Generated blank node identifiers are done by the
> generated-blank-node-id() notation which says:
> "A string value for a new distinct generated Blank Node
> Identifiers as defined in section 5.2 Identifiers."
Aside from being grammatically incorrect, this statement is extremely
difficult to understand, and even incorrect. I don't read any requirement
here that different ``calls'' to this action must result in different
strings being returned. It would be much better to explicitly state that
generated-blank-node-id() returns a different string each time that it is
called.
> Blank node identifiers from rdf:nodeID are done by the bnodeid()
> notation which says:
> "bnodeid(identifier := value) Create a new Blank Node Identifier Event."
> which refers to section 5.2
>
> 5.2 tells you that you do not have to use the exact blank node
> identifier given but can use any method that retains the blank node
> identity.
Well part of the problem is that there are no blank nodes in XML/RDF, so
you can't rely on preserving blank node identity (really distinctness)
to get you want you want.
> The suggested method given here is to "add a constant prefix to all
> the rdf:nodeID attribute values and ensure no generated blank node
> identifiers ever used that prefix." but that is not required. For
> example, generate-blank-node-id() could make all names "genid"+number
> and bnodeid() could apply some different constant prefix.
This method is not allowed. See below for more details.
> The more expensive alternative you give would be to keep all blank
> node identifiers around and check for clashes. There are medium-cost
> alternatives too, such renaming any rdf:nodeID values that start
> with "genid" to a new identifier.
This last method is also not allowed.
Problems with Blank Nodes and rdf:nodeID
in the LCC XML/RDF Syntax Document
The handling of blank nodes is still problematic in the LCC version of the
XML/RDF document.
The intent is clear. Each nodeElement that does not otherwise get a
subject is given a blank node identifier as a subject. The string-value of
this blank node identifer is to be different from the string-value of every
other blank node identifier resulting from the parsing of the RDF/XML
document.
However, the document does not follow this intent.
First, in section 5.2, the document only says that ``generated blank node
identifiers must not clash with any blank node identifiers from rdf:nodeID
attribute values.'' This allows
<rdf:RDF xmlns:rdf="..."
xmlns:ex="...">
<rdf:Description>
<ex:foo>
<rdf:Description />
</ex:foo>
</rdf:Description>
</rdf:RDF>
to generate the following triple
_:x <ex:foo> _:x .
Second, a blank node identifier in the linear representation of an RDF
Graph is generated from the string-value of the subject of the event. For
events that come from nodeElements that have an rdf:nodeID attribute, this
value is determined in 7.2.11 as follows
If there is an atribute a with a.URI=rdf:nodeID,
then e.subject := bnodeid(identifier:=a.string-value)
From 6.1.7 the string value of this subject is the concatenation of "_:"
and the value its identifier accessor.
This means that
<rdf:RDF xmlns:rdf="..."
xmlns:ex="...">
<rdf:Description rdf:nodeID="HI">
<ex:foo>
<rdf:Description rdf:nodeID="BYE" />
</ex:foo>
</rdf:Description>
</rdf:RDF>
MUST generate the following triple
_:HI <ex:foo> _:BYE .
Therefore the wording in 5.2 ``One method would be to add a constant prefix
to all the rdf:nodeID attribute values'' is not a potential solution to the
blank node identifier clashing problem.
Peter F. Patel-Schneider
Bell Labs Research
Lucent Technologies
Received on Tuesday, 14 January 2003 10:41:34 UTC