- From: Bob MacGregor <macgregor@ISI.EDU>
- Date: Mon, 06 Jan 2003 10:58:29 -0800
- To: Dave Reynolds <der@hplb.hpl.hp.com>
- Cc: www-rdf-interest@w3.org, jena-dev <jena-dev@yahoogroups.com>
- Message-Id: <5.1.1.6.0.20030106100816.00b56d20@tnt.isi.edu>
Dave,
You made several points (as did I). Below is a partial response:
>On Monday, January 6, 2003, at 04:24 AM, Dave Reynolds wrote:
>The first point to clarify is that what you are talking about here is the
>Jena-specific reification "shortcut". This attempts to give you some of the
>features of reification, without the overhead of asserting four triples for
>every reified statement. However, there is nothing to stop you using the
full
>official RDF reification approach with Jena - assert all four reification
>triples and manipulate them accordingly, ignore the shortcut stuff like
>"isReified".
Using full reification is not an option, unless we reified EVERY statement
in an application. That's because we cannot decide apriori which statements
will get annotated (with probabilities, trust, temporal modification,
etc.). Every
statement is fair game.
When you fully reify, then the entire form of a statement changes, and queries
that retrieve non-reified statements will not also retrieve reified
statements. So
converting from non-reified to fully-reified "on-the-fly" is not a viable
option.
What Jena calls a "shortcut" we consider to be the right way to reify
(except that
technically, its not reification at all, its just allowing statements to be
arguments).
Logic-based KR systems (MRS, Epikit, Epilog, Cyc, PowerLoom, SNePS, etc) have
been using the "shortcut" style of reification for a very long time. Its
not a curiosity;
its part of the fabric. For example, to represent a disjunction of two
triples, you create
a triple that nests two (or more) other triples:
<<a,b,c>, OR, <d,e,f>>
Note that with this kind of usage, its critical that the nested triples not
be considered
as asserted in the model.
>I believe that would allow you to implement a non-quadratic deleteResource.
No it wouldn't, because 'deleteResource' (and 'renameResource') are
intended to be
generic operations that work on all RDF graphs/models. Following your last
comment
would mean legislating away the use of (short-cut style) reification.
>>Secondly, there should be a 'bit' that API users can use to mark
>>statements as true or not. However, it really should be 'wider' than a
>>single 'bit'. Give us enough bits (e.g., make it a resource), and we
can
>>use such an attachment to build our own context mechanisms.
>Not sure about this. In RDF, statements are only asserted. The semantics
of an
>RDF graph is just the conjunction of the individual statements. There is no
>notion of a not-asserted statement.
Using Jena I can create a triple/statement <a,b,c> and embed it into
another triple, yielding
<<a,b,c>,d,e>. If I add the compound triple to a model (using
Statement.add), then that
triple is asserted but the nested one isn't (because I never added it).
That would seem
to contradict your last statement (unless you are saying that Jena can do
this, but RDF
can't).
>Personally, I've got no problems with an application choosing to use
reification
>as a way of separating statement from their truth status, but I'm not
sure this
>should be built in to APIs like Jena.
I agree. That's why I'm recommending providing a hook that makes it easy for
others to make that separation, using the Jena API as a substrate.
>Furthermore, there would be some nasty interactions between this statement
>"truth status field" and Jena models - the truth status should presumably
be a
>property of the pair [statement, model] rather than just a property of the
>statement. This then suggests a different design approach for you ...
The truth status is ALWAYS a property of a pair [statement, model]. A
statement
can be true in one model, but not in another.
>Why not just use Jena Models to provide your context? For example, use
one Model
>to contain all your statements of unknown truth status and a separate
Model to
>contain the current world view - i.e. the current set of "asserted"
statements.
>In the first model you could include all your trust and probability
information
>using reification and now you can use the reification shortcut without
any loss
>of searchability.
We can't do this for a number of reasons, but a compelling reason is that
'models'
are not first class objects of discourse, i.e., they are not resources.
(They ought
to be, but I don't want to wait around for the RDF committee to make that
decision).
When you assign a probability or a degree of trust, you also record who made
that assertion, and probably also record when the assertion occurred.
By providing a handle (the fourth argument) in the form of a resource, you
enable me
to make arbitrary assertions about the nature of the 'context'.
One final comment on quads vs. the 'getIt'/'setIt' that I am advocating. They
are not equivalent. With quads, we can assert a triple twice, with two
different
fourth arguments:
<a, b, c, d1>
<a, b, c, d2>
Here, there is no explicit means for detecting that 'd1' and 'd2' are
annotating
the same 'triple', since the notion of triple has now evaporated. I'm
advocating
that we keep 'triples' as the are, while adding a means for efficiently
attaching
meta-information to a triple (short-cut reification provides a less
efficient means
for attaching meta-information to a triple -- that is what we will use for
now, but
we take a performance hit doing so (as exemplified by the 'deleteResource'
example in my previous message)).
Cheers, Bob
Received on Monday, 6 January 2003 14:07:37 UTC