N3 contexts vs RDF reification

I know that there has been significant debate over RDF triples vs
quadruples, and the uses and merits of reification.

I don't want to start another religious battle over triples vs quadruples.
However, I would like to bring to people's attention the stuff being done by
TimBL with N3 w.r.t. reification.

It seems to me that the goal of reification is to make further statements
about statements - i.e. make statements the subject or object of other
statements.  As such, it is very important for the Logic aspects of RDF.  

Now, N3 has a very neat way of doing this via 'contexts':  A context is a
resource that contains statements.  You can make other statements about the
context, and these simply apply to the statements the context contains.
It's almost like a "composite" in OO Design terms.

Furthermore, statements are always translated into quadruples: the current
(p,s,o) triple plus the uri of the containing context - i.e. (c,p,s,o);
contexts can be nested and there is an implicit "top level" context
representing the document (I would change this to represent the "RDFGraph"
(or "RDFModel") resource - i.e. 'graph' is a more abstract concept and
orthogonal to physical files, though a single RDFGraph will often be
represented by a single network accessible document).  Hence a statement
that is not part of an explicitly specified context is automatically part of
the implicit context of the RDFGraph it belongs to.

The beauty of this approach is that:
1) It provides a simple recursive way of dividing graphs into sub graphs.

2) making higher-level statements about (sub) graphs (i.e. Reification)
becomes really straightforward.

3) You reify groups of statements at a time, not individual statements -
hence it is far more expressive with far less tuples.

4) Direct representation of "RDFGraph" (or "RDFModel") resource in the RDF
Model - another on the issues list - RDFGraph becomes just another kind of
context.  E.g. for RDF Schema (in N3):

   ...

   :Context a :Class; :subClassOf :Resource.
   :Graph a :Class; :subClassOf :Context.  

   ...

5) Reification is a thorny issue in RDF currently.  Contexts help because:
   * statements no longer explode 4 fold into 4 triples per statement
   * the problem of incomplete reification (i.e. where only 3 or less of the
necessary triples are present) goes away
   * features such as rdf:bagID on rdf:Description are redundant - the
problems of whether to reify statements within a rdf:Description or not and
creation of the complex "bag of reified statements" sub-graph both go away.

(Reification seems far too unwieldy to me the way it is currently in RDF for
these reasons).

6) Most importantly: the difference between whether a statement is
considered fact or merely a reification shifts from being specified in the
RDF syntax, as determined by the statement producer agent (i.e. person or
software), to the consumer agent (person or software).  The consumer agent
can make their own determinations of whether to treat them as facts based
upon context validity 'rules' (as in N3) e.g. other statements about the
context that are evaluated to either true or false - these can be Logic
statements, or just ordinary statements that can be checked, e.g. a date
range, etc.

Hence a change to RDF along these lines, although fairly radical, would
address at least 5 RDF issues in one fell swoop, and IMHO make for a far
better RDF.

I would like the RDFCore Working Group to consider these issues and
suggestions for RDF 2.0.  Perhaps this mail could be another reference under
the the appropriate issues, especially the "rdfms-contexts: Suggestion that
the concept of context is missing from RDF" issue.

regards

Lee

Received on Tuesday, 24 April 2001 09:02:37 UTC