Re: RDF testcase rdf-containers-syntax-vs-schema/test004.rdf

>>>Chet Murthy said:
> 
> In the subject testcase, there are two uses of rdf:ID.  The first is
> to reify an edge; the second is the ID of a node (thus, no
> reification).

We know that; in particular it used to be ambiguous which one did
what, this is something RDF Core has clarified, or at least tried
to.  The test cases should make this entirely explicit, since you can
see the triples that result from the different forms.

> 
> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>          xmlns:foo="http://foo/">
>   <foo:Bar>
>     <rdf:li rdf:ID="e1">1</rdf:li>

On a non-empty property element - reifies a triple.  See

  Node Elements and Property Elements
  http://www.w3.org/TR/rdf-syntax-grammar/#section-Syntax-node-property-elements
  Reifying Statements
  http://www.w3.org/TR/rdf-syntax-grammar/#section-Syntax-reifying

>     <rdf:li rdf:parseType="Literal">2</rdf:li>
>     <rdf:li rdf:parseType="Resource">
>       <rdf:type rdf:resource="http://foo/Bar"/>
>     </rdf:li>
>     <rdf:li rdf:ID="e4" foo:bar="foobar"/>

On an empty property element - reifies a one of the generated
triples, this one:
   _:foobarnode rdf:_4 _:id1 .

where _:foobarnode is the blank node id made by the <foo:Bar> node
element and the _:id1 blank node id made implicitly by the empty
property element in question.  _:id1 then gets the foo:bar property
with the "foobar" value.

[Aside: I think there are entirely too many foos & bars here, I'll
consider changing them to different terms ]

Empty property elements:
  http://www.w3.org/TR/rdf-syntax-grammar/#section-Syntax-empty-property-elements

>   </foo:Bar>
> </rdf:RDF>
> 
> 
> It seems that by using the rdf:ID for two different purposes, we end
> up making it impossible to both name a node, and to reify it, in this
> syntax.  Instead, one wonders if, just as with "bagID", it wouldn't
> make sense to use "edgeID" or some equivalent attribute-name, hence,

You can name a node - give it a URI-ref - and reify it.  Nodes are
named by attributes on a node element - rdf:about, rdf:ID or
rdf:nodeID (not what you are discussing here), or by an
attribute of a property element - rdf:resource.

You can't "reify a node", only a triple.  You do that with rdf:ID
on a property element

See
  Reifying Statements
  http://www.w3.org/TR/rdf-syntax-grammar/#section-Syntax-reifying


> 
> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>          xmlns:foo="http://foo/">
>   <foo:Bar>
>     <rdf:li rdf:edgeID="e1">1</rdf:li>

equivalent to rdf:ID

>     <rdf:li rdf:parseType="Literal">2</rdf:li>
>     <rdf:li rdf:parseType="Resource">
>       <rdf:type rdf:resource="http://foo/Bar"/>
>     </rdf:li>
>     <rdf:li rdf:ID="e4" foo:bar="foobar"/>

Same thing here.

>   </foo:Bar>
> </rdf:RDF>
> 
> so that the reified edge would be (manifestly) syntactically
> distinguished from a node with a specified name.


I think you are confusing (fair enough)
  <a:nodeElement rdf:ID="blah">
and
  <a:propertyElement rdf:ID="blah">

which do different things, and with hindsight, shouldn't have.

Dave

Received on Tuesday, 3 December 2002 04:58:26 UTC