Sergey Melnik wrote about
"On the uniqueness of noname nodes and reified statements" in [1]
I have another solution.
There are (or should be) foure types of implicit resources in RDF:
1. The resource representing the origin of a group of statements.
2. The anonymous resource
3. The resource representing a literal.
4. The resource representing a statement
---
1. The resource representing the origin of a group of statements, aka
The Model
We would like to track the origin of a group of statement. You could
for example use the aboutEachPrefix to state your trust in all
statements comming from a given domain, like http://www.news.com/.
In normal use, the URI for the Model would be the URL of the webb
resource, giving you the statements in RDF/XML format.
But models can be redistributed under anoter URL, or embedded as part
of another XML document. I haven't been able to find a standard way to
specify the origin of local copy of RDF/XML. Please help.
But the XML signature [2] could be used to mark a local copy of some
RDF statements. Simplified, it could look something like this:
But the main point is: In one way or another; the RDF application
should determine the Model resource by finding out the origin of the
document (or part of document) containing those statements.
Higher order statements about the Model would use that resource.
2. The anonymous resource
These resources [3] could be found by using XPointer [4]. But that
would give many diffrent URIs for the same anonymous resource.
Regardless of this, I think it would be useful to actualy be able to
use the URI to find the resource in the RDF/XML document.
If the document changes, the generated name of a anonymous resource
could also change. A recommended way to deal with updated documents is
to give them new names refelcting the version number or change date.
But that would still result in new names for existing resources.
One way to solve this problem is to let a new version of a RDF
document, explicitly state the URIs of previously anonymous resources,
using XPointer to point to them in the previous document version.
We need a standard way to use XPointer, so that all anonymous resources
allways will get the same name, as long as the document is unchanged.
I haven't studied XPointer in detail. I would like someone to demonstrate
what the URI for the following person could be, if this document is
http://www.foo.bar/says_me.rdf:
Ora Lassilalassila@w3.org
3. The resource representing a literal
I have tried arguing that even literals should have URIs [5]. By
using Xpointer as the literal URI, we could refere to it instead of
copying it.
There could be a service generating a list of phone numbers. Other
sites could refere to this phone number, even if it is just a literal
in a RDF/XML, by using a XPointer. If the phone number changes in the
service, so will it change on all other sites.
The same system could be used to refere to parts of a xHTML or other
XML document, as requested by Stefan Decker [6].
4. The resource representing a statement
The same statement could be made by diffrent models (diffrent
sites).
Let's say that a model A states the creator of a web page, and that
the same statement is made by B. Model A could be updated with a new
creator, but Model B remains unchanged.
Does the statement change if the resource pointed by the object of the
statement change? Does the statement change if the literal change?
Changing models complicates things. But the statement could be about
"what is true just now", and that changes.
The effect of point 3 above is that all statements can be expressed as
three URIs. If two statement have the same predicate, subject and
object, they would be identical. By changing the object, it would be a
diffrent statement. A second order statement about this statement
should point to both statements.
But if two models have a literal as the object, that would be two
diffrent URIs, since the literal URI comes from the model URI. That is
good, if you would like to allow the literal value to change without
making it a new statement. You could create a second order statement
decalring your trust in one models statement about the phone number of
a person, but not trusting another models statement about the phone
number of the same person. The numbers could be the same, but be
literals from diffrent sources. If one model changes the phone number,
they wouldn't be equal any more. But the reified statements would
still be valid.
I suggest the use of a common escape practice to generate the URI for
a statement. All literals will be substituted for their URI in the
generation of the statement URI.
The triple {pred, sub, obj} would get the uri "rdf:pred+sub+obj".
Lets say that the subj is a search result page:
http://www.google.com/search?q=rdf
Not changing pred and obj, that would give us the uri:
rdf:pred+http%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3Drdf+obj
The exact escaping procedure would have to be defined, in order to
get a unique URI.
References:
[1] http://lists.w3.org/Archives/Public/www-rdf-interest/1999Nov/0092.html
[2] http://www.w3.org/TR/1999/WD-xmldsig-core-19991022.html
[3] http://www.w3.org/TR/REC-rdf-syntax/#basic
[4] http://www.w3.org/TR/WD-xptr
[5] http://lists.w3.org/Archives/Public/www-rdf-interest/1999Nov/0107.html
[6] http://lists.w3.org/Archives/Public/www-rdf-interest/1999Nov/0073.html