- From: Jeremy Carroll <jjc@hpl.hp.com>
- Date: Wed, 01 Aug 2007 10:25:43 +0100
- To: Garret Wilson <garret@globalmentor.com>
- CC: Tim Berners-Lee <timbl@w3.org>, Semantic Web <semantic-web@w3.org>
Your position is very curious. Yes, of course, literals are just another sort of resource. And yes the design decision to give them a privileged position (i.e. not requiring the use of the URI namespace), can be questioned. But the basic rationale for having the class rdfs:Literal and some of the key subclasses such as strings, lang-strings, xsd:integer etc. is based on engineering utility. Almost all SW applications need to use strings, and natural-language strings, and integers etc. Thus it is convenient to standardize on a representation for these. And as with any standards work integrating with previous standard work is non-trivial and the results are always a bit of a compromise, design by committee etc. etc. Nevertheless, having a standard for things that all such applications want to do is useful. Jeremy Garret Wilson wrote: > > Tim, > > Thanks for the reply on RDFON. I accept that the RDF proposal was > ignorant of the latest N3 syntax, and although I still prefer something > RDFON-like, your points were valid and there's no merit in my trying to > advance RDFON as "better" at this stage (or perhaps at any stage). And > just as I have only recently been made aware that RDF (despite RDF/XML) > allows literals in lists, your note that RDF allows literals to have > properties (also in spite of RDF/XML limitations) also came as a > surprise to me. RDF/XML is surely one of the worst things to happen to RDF. > > The other is literals. Before replying to your comments below, let me > just step back and make a few observations and ask a few questions > concerning literals in RDF. (By the way, when I say "you", please > understand that I'm speaking to a hypothetical responder or the general > RDF user, not necessarily you (Tim), or anyone else.) > > 1. How is a literal any different than a resource? The RDFS definition > at http://www.w3.org/TR/rdf-schema/#ch_literal is at first circular > ("the class of literal values") and then nonexistent for some literals > ("This specification does not define the class of plain literals."). The > RDF Primer explanation at > http://www.w3.org/TR/rdf-concepts/#section-Literals is more helpful: A > literal is a resource identified by a lexical representation, which > representation may be "more convenient or intuitive" to use instead of a > URI. > > So at the end of the day, a literal is simply a resource that is easy to > refer to using a string of characters. That's all well and good, but why > should that affect my model? Why is a resource an instance of another > class (rdfs:Literal) just because I like to identify it by a lexical > representation? > > Take for example the resource identified by the URI > <http://example.org/presidents/GeorgeWBush>. This resource may have an > rdf:type of foaf:Person. (I could assert all sorts of other RDF > statements about this resource, but will decline to do so at this time.) > Is this resource an instance of the class rdfs:Literal? No? Why not? > > But wait---if I decide that it's easier to represent this resource using > a string, I could create the resource "George W. Bush"^^foaf:Person. > Suddenly George W. Bush (the person, without the quotes, just as 123 is > the resource represented by "123"^^xsd:integer) is an instance of > rdfs:Literal. Why? Why did my model change? How did the world I was > modeling change just because I decided to represent George W. Bush using > a string? > > So let me go back to my original question: How is a literal different > from a resource? My answer is that there should be *no* difference. The > only difference is a syntactical matter of identification---but that > should *not* give rise to a new class of resources. There should be no > such thing as an rdfs:Literal. Everything should be a resource, however > we decide to identify them. (Think of how absurd it would be to have an > rdfs:Anonymous class, for all resources that are identified neither by a > URI nor a lexical representation!) > > 2. How is rdf:type different from rdf:datatype? This is where RDF's odd > treatment of literals starts to get stranger. If I describe the resource > identified by URI <http://example.org/presidents/GeorgeWBush>, I can > give this resource an rdf:type of foaf:Person. But if I describe this > same resource using a lexical representation, I give it an rdf:datatype > of foaf:Person (yielding "George W. Bush"^^foaf:Person). Why? It's the > same resource---I just found it "more convenient" to identify it with a > string. > > The same thing goes for the resource 123, identified by the string "123" > with data type xsd:integer. This resource should have rdf:type > xsd:Integer. Why does it have a separate xsd:datatype? One answer could > be that "rdf:datatype is to specify the transformation between the > lexical representation and the actual resource." Fine, but that has two > problems: the rdf:datatype sticks around in the actual model, when its > user is merely syntactic; and I still don't get an rdf:type, which the > number 123 surely has (just like George W. Bush surely has an rdf:type > of foaf:Person, even if I refer to him using a lexical representation). > > There should be no rdf:datatype. Its usage is partly syntactic; the > other part is made redundant by rdf:type. > > 3. If you want to refer to a resource using a lexical representation, > RDF should create a URI scheme for lexical representations---then we > could simply refer to all literals by URIs and be done with it. One > method would be to use the form <rdfliteral:literal;datatype>, such as > <rdfliteral:123;xsd:Integer>. I frankly don't care what the format of > this URI is, but the mapping is straightforward. A URI is a glorified > string---there's no reason to use *other* strings to identify resources. > > "But I want to simply use a string, not a URI, in my serialization of > choice," you say. Fine, but that's a serialization issue. If you want to > use "123"^^xsd:integer in N3 and have your parser automatically generate > a node with URI <rdfliteral:123;xsd:integer>, then so be it. But there's > no reason to have a different type of resource created just because you > like to use string shortcuts, and there's no need to query these beasts > differently just because you like writing "123"^^xsd:integer instead of > <rdfliteral:123;xsd:integer>. > > I'm all for syntactical shortcuts. In fact, I would make it even easier > for you: I think if you write "abc", the processor should automatically > change this to <rdfliteral:abc;xsd:string> for you. But that shouldn't > change the model or make some sort of odd literal class. They are all > resources goshdarnit! All! > > So let me add a few quick responses below to clear up a last few things: > > Tim Berners-Lee wrote: >> I agree that thinking of an integer as a Resource is fine, in that 123 >> is a Thing, like everyThing else. > > It's more than just "thinking of an integer as a Resource". An integer > is a resource, no? How is George W. Bush more of a resource than the > number 3? > >> >> That does not mean we should symbols and literal values in the language. > > I think you left out a "not" or something, but let me restate this: > "That does not mean we should not use symbols and literal values in your > serialization language of choice. But it shouldn't change the RDF model." > > >> I think it is fine to have 123 (note no quotes) as literal in n3, >> which it is. > > I think it is fine to have 123 as a resource. It shouldn't be a literal. > So I can represent it as "123" in English, or "١٢٣" in Urdu. Big deal. I > can represent George W. Bush as "George W. Bush" in English. Nothing > about these true statements changes the type of resources we're dealing > with. > > >> I think it fine to say that that sequence of character sin the >> labguage a identifies the number 123, which is a member of the class >> of Integers, much as a URI identifies another reseource. > > Right. That's a statement of syntactic transformation. Let's keep it > down in the serialization, not in the model. > > >> I think in fact also its fine to make URIs and say they also represent >> the number 123, e.g. > > I agree with that statement on its face. > >> I don't, however, think it works to have rdf:about as a single >> property (or even XML attribute) relating >> 123 to the string "123". > > Here's where I was misunderstood. I made all those eg:IntRepresentation > examples in another message to illustrate that the lexical > representation is distinct from the resource itself. I'm violently > agreeing here: I don't want to relate 123 with "123" at all, except for > using "123" in your serialization of choice to somehow get to the > resource 123 if you like. > > >> For example, suppose we want to model octal numbers and decimal numbers. >> I much prefer to concentrate on the number 123 as an Integer, and have >> separate properties decmal and octal >> relating it to different strings, than to imagine separate classes of >> Decimal Integer and Octal Integer. > > Completely, completely agreed. > >> >>> And (finally) going back to >>> RDFON, we see that eg:datatype("value") is really just >>> instantiating an eg:datatype class with a lexical identifier >>> instead of a URI identifier. >> >> If you look at that as an object initialization function, then that >> maps to a binary predicate which is my model above. I prefer very much >> to have a datatype-specific one such as dt:decimal. > > I don't quite understand what you're saying here. In RDFON, I would have > xsd:Integer("123") map to: > > <rdf:literal:123;xsd:Integer> rdf:type xsd:Integer > >> >> One more note on datatypes. In practice the term in the RDF abstract >> language which N3 writes as 123 and NTriples writes as >> 123^^xsd:integer I model as [ xsd:integer 2] or 2^xsd:decimal, in >> practice is stored in RDF stores typically as some object like >> >> {termType: 'literal', value: "123", dt_URI: "http://...integer", lang: >> null } >> >> This is a term in the language. It isn't the resource 123. > > But 123 was the resource I was trying to identify. Why doesn't it map to > the triple I show above ( <rdf:literal:123;xsd:Integer> rdf:type > xsd:Integer )? Isn't that simpler? Doesn't that reflect what I > indicated? Doesn't it identify a resource that I can give properties to > and put into lists---even in RDF/XML? > > Death to literals, rdfs:Literal, and rdf:datatype. Long live resources. > > Garret > -- Hewlett-Packard Limited registered Office: Cain Road, Bracknell, Berks RG12 1HN Registered No: 690597 England
Received on Wednesday, 1 August 2007 09:26:18 UTC