- From: Booth, David (HP Software - Boston) <dbooth@hp.com>
- Date: Thu, 13 Sep 2007 15:43:12 -0400
- To: "Alan Ruttenberg" <alanruttenberg@gmail.com>
- Cc: "Chimezie Ogbuji" <chimezie@gmail.com>, "Xiaoshu Wang" <wangxiao@musc.edu>, "Williams, Stuart (HP Labs, Bristol)" <skw@hp.com>, "W3C-TAG Group WG" <www-tag@w3.org>, "jarcc Rees" <jar@creativecommons.org>
Alan, Great questions! Responses below. > From: Alan Ruttenberg [mailto:alanruttenberg@gmail.com] > > Hi David, > > > 1. URI declaration: http://dbooth.org/2007/uri-decl/ > > Some questions about declarations: > > - It looks like declarations are for individuals. Otherwise I am > confused about what the declaration for a class would be. "A URI > declaration is authoritative only in defining the association > between > the declared URI and a particular resource". Is the class an > information resource? If not, what is it, and how does one > create the association? AFAICT a class is not an information resource. The examples I have used (and most thought through) have been for individuals, but my assumption was that URI declarations should work the same for classes. Is there a particular reason why you think they would not? > > - You write that "the other hand, statement M3 ("For more > information about http://dbooth.org/2007/moon/ , see also http:// > dbooth.org/2007/moon/about.html") is safe to include in the URI > declaration page, because it is merely a suggestion: it does not > affect the satisfiability of p(x).". How are we to determine which > statements are of this kind - namely that they do not affect the > satisfiability of p(x). I do not know of an automatable way to do that. It requires understanding what the statement means. (Maybe someone better versed in logic and computability theory can say whether it is even possible?) So I assume it is something that a human would just have to judge. From a consumers perspective, if the consumer of the URI declaration is not sure whether a contained statement would affect the declaration then the safest assumption would be to assume that it might. The statements made in the declarations are the ones that should be invariant. Anything that might need to change should not be in the declaration. > > - The following: "If the URI contains a fragment identifier, > then the > racine of the URI (i.e., the part before the #) should lead to a > suitable URI declaration page" would seem to imply that there should > not be more than one hash identifier with the same racine, unless > they denote the same resource. Do I have this correct? No, it is fine for multiple URIs to have the same racine, and all may be declared by the same document. An agent discovering http://example.org#foo may look for a URI declaration by dereferencing http://example.org to get a document that contains statements about both http://example.org#foo and http://example.org#bar . Until the agent realizes that http://example.org#bar and http://example.org#bar have the same racine it may initially take the returned document to be a URI declaration for http://example.org#foo only. But if it later wishes to find a URI declaration for http://example.org#bar it can avoid doing another network retrieval by realizing that it already obtained the document from http://example.org and recognizing those statements as also declaring http://example.org#bar . There is more of a potential efficiency issue when 303 URIs are used instead of hash URIs. Suppose http://example.org/foo and http://example.org/bar both 303-redirect to a common URI declaration page, http://example.org/decl.rdf . When an agent deferences http://example.org/foo to find its URI declaration, the declaration page from http://example.org/decl.rdf may also include statements about http://example.org/bar , but without some way to indicate that those statements are also supposed to represent a URI declaration for http://example.org/bar , the agent will have no way to know that they are. This is one reason why I think it may eventually be helpful to have an explicit syntax for indicating URI declarations. > > - In the statement: "Proposed rule R1: Given a URI u, if either of > the follow-your-nose mechanisms described above yields a > representation r, then, unless otherwise indicated, the conjunction > of assertions made in r represents an implicit URI declaration for > u", how are we to know whether the yield is a representation, > and how > would we indicate that the conjunction of assertions does not > represent an implicit URI declaration for u? I'm not certain that I've understood your question, but see if this helps. A "representation" is the payload returned with an HTTP 200 response code, and its interpretation is defined by its media type. If you do not want to serve the URI declaration from the racine/303-redirect target, but instead you wish to serve some other assertions, my suggestion would be: Don't do that. Serve those other assertions from a different location. OTOH if you want to serve *both* the URI declaration and other assertions from that same location, then it would be good to have a standard syntax for separating the two. I have not proposed one, in part because I do not think it is a good idea (because it makes the URI declaration much more susceptible to accidental change), but if there is enough demand for it, a convention could be defined. > > - Suppose I have a document, and wish to indicate that there is > another version of that document with a different URI. How can I do > this using the mechanism you propose? Do you mean another version of a URI declaration, i.e., a different declaration for the same URI? Such as one written in a different language but otherwise having the same meaning? Or do you mean one that associates the URI with a different resource, for example, if the declaration was changed? It may be useful the have ways to indicate alternate declarations for a URI. If there is an accepted explicit notation for writing URI declarations, such as the dbooth:declares predicate described in http://dbooth.org/2007/uri-decl/#declares then that can be used multiple times to indicate multiple declarations for the same URI. Note that this cannot be done without talking about the URI itself (as a URI declaration does) rather than just talking about the URI's resource. For example, suppose http://dbooth.org/2007/moon/old-decl contained a previous version of a URI declaration for http://dbooth.org/2007/moon/ that is different than the current declaration in http://dbooth.org/2007/moon/decl.html , such that http://dbooth.org/2007/moon/old-decl defines a different resource. The following statements would NOT indicate that http://dbooth.org/2007/moon/ has two different resource definitions or URI declarations: http://dbooth.org/2007/moon/ rdfs:isDefinedBy http://dbooth.org/2007/moon/decl.html . http://dbooth.org/2007/moon/ rdfs:isDefinedBy http://dbooth.org/2007/moon/old-decl . because in those statements, http://dbooth.org/2007/moon/ denotes a single resource -- the same resource in both statements. So those statements would be saying that the same resource is defined in two different documents, whereas what we want to say is that there are two different resources being defined by those two different documents. > Or, where *am* I able to say > that the moon is made of green cheese. Anywhere except in your moon URI declaration. For example, http://dbooth.org/2007/moon/ 303-redirects to http://dbooth.org/2007/moon/decl.html which contains a URI declaration for http://dbooth.org/2007/moon/ , but it also says for more information see also http://dbooth.org/2007/moon/about.html , which can contain any other assertions about the moon, including the assertion that the moon is made of green cheese. These assertions are not a part of the URI declaration for http://dbooth.org/2007/moon/ . > > - Is there any status given to statements that are contained in a > document served with a 200 response that is not accessed via the > follow-your-nose algorithm? If so, how do I know which ones? They may have socially defined status, but I do not think they have any architecturally defined status. For example, if you run across a document (not at the follow-your-nose location) containing an explicit URI declaration, and the document is digitally signed by the URI owner, then you might choose to believe that URI declaration. > > - The declaration would necessarily use URIs that are defined by > others. Suppose the declaration of one of those uris is changed, > either purposefully or inadvertently. Can that change the > authoritative association of URI to resource that use these > externally defined terms in its declaration? Yes. > If yes, then does that > not undermine the authority of the declarer? > If not, how is one able > to become aware of this unfortunate situation? I wouldn't quite characterize it as undermining the authority of the declarer. The URI declaration is the way the declarer chooses to write it. If the meaning of that declaration changes because a dependency changes, then that is because the declarer chose to give it that dependency. However, this does not mean that stable declarations are not possible. If the declarer just declares http://example.org#moon to be owl:sameAs http://dbooth.org/2007/moon/ then if the declaration for http://dbooth.org/2007/moon/ changes then effectively the declaration for http://example.org#moon also changes. In other words, it is very susceptible to changes in its dependencies. But if it is declared differently, in more closely grounded terms, then changes in the declarations of its dependencies may have less (or no) effect. Finally, if the declarer really wants to ensure that changes in a URI declaration's dependencies will not silently change the meaning of that URI declaration, then a one-way hash or message digest could be provided for each dependent URI -- potentially recursively, depending on one's level of paranoia. This can be stated either in terms of the dependency URIs themselves or in terms of the URIs of the declaration pages of the dependency URIs. For example, if http://example.org#moon is declared in http://example.org to be: http://example.org#moon owl:sameAs http://dbooth.org/2007/moon/ . then it is dependent on the declaration for http://dbooth.org/2007/moon/ (and also owl:sameAs, but we'll ignore that for the moment, as it can be treated the same way). To guard against the meaning of http://dbooth.org/2007/moon/ being silently changed, the declaration for http://example.org#moon could also include statements like the following: http://dbooth.org/2007/moon/ rdfs:isDefinedBy http://dbooth.org/2007/moon/decl.html . http://dbooth.org/2007/moon/decl.html foo:hasSHA1 "8739AB6F54E ... " . where foo:hasSHA1 indicates a SHA-1 hash of the given document. This approach explicitly indicates the URI declaration document used for http://dbooth.org/2007/moon/ . Alternatively, the declaration for http://example.org#moon could say something like: http://dbooth.org/2007/moon/ foo:hasDeclarationWithSHA1 "8739AB6F54E ... " . which does not say where to find the URI declaration for http://dbooth.org/2007/moon/ . It just says that the resource identified by http://dbooth.org/2007/moon/ has some URI declaration document (somewhere) with an SHA-1 hash of "8739AB6F54E ... ". I don't know if anyone has already defined widely used predicates equivalent to foo:hasSHA1 or foo:hasDeclarationWithSHA1 above, but if this declaration stability issue turns out to be a big enough issue in practice, then we could certainly define them. This seems like a relatively low cost approach: only one or two extra triples for each term. It also avoids getting into copyright issues that could arise if dependency declarations were copied. David Booth, Ph.D. HP Software +1 617 629 8881 office | dbooth@hp.com http://www.hp.com/go/software Opinions expressed herein are those of the author and do not represent the official views of HP unless explicitly stated otherwise.
Received on Thursday, 13 September 2007 19:43:46 UTC