Re: Toss NTriples -- RDF Reification is all we need (was Re: N3 and N-Triples (was: RDF in HTML: Approaches)

On 2002-06-04 9:42, "ext Patrick Stickler" <patrick.stickler@nokia.com>
wrote:

> 
> On 2002-06-04 3:11, "ext Michael Kifer" <kifer@cs.sunysb.edu> wrote:
> 
>>>>>>> "SR" == "Seth Russell" <of Mon, 03 Jun 2002 10:35:26 PDT> writes:
>> 
>>   MK> NTriples can be naturally encoded in XML and exchanged.
>> 
>>   SR> Is that actually true?   How?
>> 
>> <triple><subject ...>subj</subject><property>...</property> <object> ...
>> </object> </triple>
> 
> Why of course. Why did we not see this before?!
> 
> We can just use a subset of RDF instead of NTriples:
> 
> <rdf:RDF ...>
>  <rdf:Statement>
>     <rdf:subject rdf:resource="http://foo.com/bar"/>
>     <rdf:predicate rdf:resource="voc://abc.org/blarrg"/>
>     <rdf:object rdf:resource="#node12345"/>
>  </rdf:Statement>
>  <rdf:Statement>
>     <rdf:subject rdf:resource="#node12345"/>
>     <rdf:predicate rdf:resource="voc://abc.org/booga"/>
>     <rdf:object>Gumby</rdf:object>
>  </rdf:Statement>
>  ...
> </rdf:RDF>
> 
> I hereby propose we toss NTriples altogether and just use RDF/XML
> as above for all test cases output.
> 
> RDF/XML provides all the mechanisms needed to explicitly express
> the precise triples existing in any RDF graph, as RDF/XML.

Taking this a bit further, we could also provide for "dark triples"
(should they be determined to be needed) simply using reified
statements, and in the context of NTriples, making the additional
distinction for asserted statements based on a subclass of
rdf:Statement. Thus:

Given

   <rdfs:Class rdf:about="&rdf;Assertion">
      <rdfs:subClassOf rdf:resource="&rdf;Statement"/>
   </rdfs:Class>

then the following is asserted in the graph

<rdf:RDF ...>
   <rdf:Assertion>
      <rdf:subject rdf:resource="http://foo.com/bar"/>
      <rdf:predicate rdf:resource="voc://abc.org/blarrg"/>
      <rdf:object rdf:resource="#node12345"/>
   </rdf:Assertion>
   <rdf:Assertion>
      <rdf:subject rdf:resource="#node12345"/>
      <rdf:predicate rdf:resource="voc://abc.org/booga"/>
      <rdf:object>Gumby</rdf:object>
   </rdf:Assertion>
   ...
</rdf:RDF>

which is semantically equivalent to

<rdf:RDF ... xmlns:abc="voc://abc.org/">
   <rdf:Description rdf:about="http://foo.com/bar">
      <abc:blarrg>
         <rdf:Description>
            <abc:booga>Gumby</abc:booga>
         </rdf:Description>
      </agc:blarrg>
   </rdf:Description>
</rdf:RDF>

whereas the following is not asserted in the graph (i.e. is "dark")

<rdf:RDF ...>
   <rdf:Statement>
      <rdf:subject rdf:resource="http://foo.com/bar"/>
      <rdf:predicate rdf:resource="voc://abc.org/blarrg"/>
      <rdf:object rdf:resource="#node12345"/>
   </rdf:Statement>
   <rdf:Statement>
      <rdf:subject rdf:resource="#node12345"/>
      <rdf:predicate rdf:resource="voc://abc.org/booga"/>
      <rdf:object>Gumby</rdf:object>
   </rdf:Statement>
   ...
</rdf:RDF>

Thus (using, ahem, N3 ;-)

{
   ?s ?p ?o .
}
log:implies
{
   ?a a rdf:Assertion ;
   rdf:subject ?s ;
   rdf:prediate ?p ;
   rdf:object ?o .
} .

and

{
   ?a a rdf:Assertion ;
   rdf:subject ?s ;
   rdf:prediate ?p ;
   rdf:object ?o .
}
log:implies
{
   ?s ?p ?o .
} .


As for issues such as xml:lang and parseType of literals, just
use the existing RDF/XML mechanisms:

      <rdf:object xml:lang="en">Gumby</rdf:object>
      <rdf:object parseType="Literal"><b>Gumby</b></rdf:object>

etc...

;-)

Patrick

--
               
Patrick Stickler              Phone: +358 50 483 9453
Senior Research Scientist     Fax:   +358 7180 35409
Nokia Research Center         Email: patrick.stickler@nokia.com

Received on Tuesday, 4 June 2002 03:18:47 UTC