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: Ora Lassila 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 Lassila lassila@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