Issue http://www.w3.org/2000/03/rdf-tracking/#rdfms-not-id-and-resource-attr

Revising
  http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2001May/0050.html
in light of an error pointed out privately by Stefan Kokkelink - thanks!

Here goes

The confusion is the different interpretation of rdf:ID in
propertyElt when the element is empty / non-empty.

1. if the propertyElt is an *empty* XML-element, an rdf:ID is 
   the identifier of the target resource:

   Jan Grant has been working on empty elements but not
   considered rdf:ID so far:
   http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2001May/0081.html

   The current relevant words are 
      [[3. r2 is the resource named by the resource attribute if
      present or a new resource.   If the ID attribute is given it is
      the identifier of this new resource.]]

   section 6 paragraph beginning [[Properties and values expressed in
   XML attribute form within an empty XML element E..., second
   sentence of item #3]

   so the answer to the test case Brian McBride gave in
   http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2001May/0082.html

    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
       xmlns:random="http://random.ioctl.org/#">
      <rdf:Description rdf:about="http://random.ioctl.org/#bar">
      <random:someProperty rdf:ID="foo" />
      </rdf:Description>
    </rdf:RDF>

   is that the statement:
     (http://random.ioctl.org/#bar, http://random.ioctl.org/#someProperty, document-URI#foo)
   should be generated; no reification occurs since rdf:ID identifies
   a resource, not a statement here.


2. if the propertyElt is an *non-empty* XML-element, an rdf:ID is 
   the identifier of the reified statement:

   [[The value of the ID attribute, if specified, is the identifier
   for the resource that represents the reification of the
   statement.]]

   section 6 paragraph beginning [[Within propertyElt (production [6.12]),]]


So stating the issue again:
  [[The propertyElt production 6.12 of the grammar does not allow
  both an ID attribute and a resource attribute to be specified.]]

and goes on to give an example with an empty element.


In case #1 (empty element) since rdf:ID points to the target
resource, adding rdf:resource as well would have two statement
objects which does not make sense.

  Aside: I don't know why rdf:resource alone wasn't used uniquely to
  point to a target resource rather than both rdf:ID and rdf:resource
  being allowed.  I suspect you often want to point to local IDs and
  making rdf:ID be the identifier of a reified statement wouldn't
  make sence because there are potentially many statements generated
  from propName, propAttr - so which one would it be?

6.12 part 4 which applies in this case is currently:
   '<' propName idRefAttr? bagIdAttr? propAttr* '/>'
and remains valid (ID and resource are alternatives).


In case #2 (non empty element), the current 6.12 part 1 is
  '<' propName idAttr? '>' value '</' propName '>'
where no rdf:resource attribute is allowed and rdf:ID identifies the 
reified statment.

It does not make sense to add rdf:resource here, since in that case
if the value of the property was a resource, case#1 could be used to
perform that.


In summary - no change need be made to the grammar although some
clarifications are obviously needed since this wasn't too clear.

Dave

Received on Thursday, 17 May 2001 13:08:51 UTC