W3C home > Mailing lists > Public > www-rdf-logic@w3.org > April 2001

definition of reification, was Re: A plea for peace.

From: Sandro Hawke <sandro@w3.org>
Date: Fri, 06 Apr 2001 09:17:22 -0400
Message-Id: <200104061317.JAA00983@hawke.org>
To: www-rdf-logic@w3.org
> Peter F. Patel-Schneider <pfps@research.bell-labs.com> wrote:
> > Aaron Swartz <aswartz@swartzfam.com> wrote:
> > 
> > I don't believe anyone ever said syntax should be coded as reification.
> > Merely that reification had a precise meaning ("I'm not saying this -- I'm
> > talking about it") and that it could be used to encode logical constructs
> > without necessarily bringing them into RDF Core.
> I, for one, would be very interested in hearing the precise meaning of
> reification, particularly reification in RDF.

Let me offer an answer.  I don't think it's in RDF M&S 1.0, but I
think it's consistent with the framers' intent and with general

In the RDF model, the act of "reification" is the act of
identification by sufficient description.

You reify an object as some term by creating a logical formula (also
called the reification) which, being true, constrains the term to
denote something which is indistinguishable from the thing denoted by
any other term which identifies the same object.  The reification
formula, I believe, must contain only prearranged vocabulary terms,
the term for the object, and variables.

(In RDF, IMHO, a logical formula is a set of RDF sentences.  The
formula is true if and only if every sentence is true.  A sentence is
true if and only if the relationship named by the predicate does in
fact exist between the subject term and the object term.  Note that
most current RDF predicate definitions implicitely dereference their
terms and describe a relationship between the things denoted by the
terms, but that's a different topic.)

For example, you can reify a list L by creating a set of RDF sentences
(given here in Subject (has) Predicate (which is) Object order) like
   L list:head ListItem1
   L list:tail Tail1
   Tail1 list:head ListItem2
   Tail1 list:tail Tail2
   Tailn list:tail list:TheEmptyList
because (using the conventional meaning of these terms) there can be
only one list L for which all these sentences are true.

You can reify an integer N using a vocabulary of int:zero and
int:succ as (for I=3):
   int:zero int:succ tmp1
   tmp1 int:succ tmp2
   tmp2 int:succ N
You can reify an RDF Sentence using rdf:subject, rdf:predicate,
and rdf:object.  If the sentence is "A B C" in the syntax I'm using
in this message, the reification is these three triples:
   S rdf:subject A
   S rdf:predicate B
   S rdf:object C

You could use other vocabularies for reifying RDF Sentences.  One
alternative is
   S rdfalt:list_of_terms_in_pred_subj_obj_order LS
   LS list:head B
   LS list:tail LS2
   LS2 list:head A
   LS2 list:tail LS3
   LS3 list:head C
   LS3 list:tail list:TheEmptyList

I find it interesting to apply reification beyond these kinds of
objects with relatively formal definitions.  I once wrote code to
reify arbitrary Java objects.  (I called it "describing" or
"deconstructing" at the time.)  Talking with Dave Becket about this,
he just calls it "parsing" or "parsing to triples," which I like.  The
inverse operation (which I used to call "recognition" or
"reconstruction") is then logically called "generation".

Now I'm wondering if it makes perfect sense to say we reify a person,
or other non-data object when we give a sufficent description to
uniquely identify it.  It's hard to know exactly what vocabulary is
sufficient for people, though.   Maybe some of the foaf stuff.

     -- sandro

Received on Friday, 6 April 2001 09:17:32 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 2 March 2016 11:10:34 UTC