- From: Garret Wilson <garret@globalmentor.com>
- Date: Thu, 26 Jul 2007 16:53:17 -0700
- To: Tim Berners-Lee <timbl@w3.org>
- CC: Semantic Web <semantic-web@w3.org>
Tim Berners-Lee wrote:
> On 2007-07 -26, at 17:11, Garret Wilson wrote:
>> (
>> rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>,
>> xsd:<http://www.w3.org/2001/XMLSchema-datatypes>,
>> vcard:<http://www.w3.org/2006/vcard/ns#>,
>> foaf:<http://xmlns.com/foaf/0.1/>,
>> eg:<http://www.example.com/>
>> )
>> foaf.Person(<urn:uuid:ca00db92-0f7f-434b-b254-8a6afcf57907>)
>> {
>> vcard.name:vcard.Name()
>> {
>> vcard.givenName:"Mary Jane",
>> vcard.familyName:["Smith", "Van Buren"]
>> },
>> vcard.bday:@1980-01-01,
>> eg.married:true,
>> eg.childCount:123,
>> eg.custom:eg.datatype("value")
>> }
>>
>> Isn't that beautiful?
>
> Well, I prefer:
>
> @prefix : <http://www.w3.org/2006/vcard/ns#> .
> @prefix eg: <http://www.example.com/#> .
> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>
> <urn:uuid:ca00db92-0f7f-434b-b254-8a6afcf57907> a
> <http://xmlns.com/foaf/0.1/Person>;
> eg:childCount 2;
> eg:custom "value"^^eg:datatype;
> eg:married true;
> :bday "1980-01-01"^^<http://www.w3.org/2001/XMLSchema#date>;
> :name [
> a :Name;
> :familyName ( "Smith" "Van Buren" );
> :givenName "Mary Jane"
> ] .
>
> The only thing I notice you put in RDFON which we didn't put in N3 was
> the literal date format.
> You can't execute N3 as javascript, but that can be an advantage,
> securitywise.
Although I've used RDF since the early days, I seem to have skipped a
lot of the advancements made in serialization as my focus was distracted
over the past few years. Sure, it appears that the difference between
RDFON and N3 are negligible from a technical point of view, so I don't
want to argue that one is better or worse than the other. I would like
to point out a few merits of RDFON to think about.
* RDF is built upon an assumption of propositional logic and
category theory that many programmers aren't used to. Sure, it's
the same philosophy underneath (going back to Wittgenstein,
Russel, Frege, and even Aristotle), but many programmers think in
different terms. N3 thinks, "I'm making an assertion regarding a
particular subject, predicate, and object, so I therefore list the
three parts of the proposition being asserted." 95% (I would
guess) of today's programmers would think, "I'm assigning a value
to the property of an object." So while N3 has "eg:childCount 2;",
a procedural programmer sees something wrong here---he or she will
breath a sigh of release when he/she sees that extra delimiter
character separating the property from its value:
"eg.childCount:2". This is a teeny, tiny issue, but I think the
difference in mindset between "setting object properties" versus
"asserting propositions" is a significant one, even though they
both mean the same thing.
* Along the same lines, when a common programmer looks at
"<urn:uuid:ca00db92-0f7f-434b-b254-8a6afcf57907> a
<http://xmlns.com/foaf/0.1/Person>" he/she won't know what the
heck is going on. When he/she looks at
"foaf.Person(<urn:uuid:ca00db92-0f7f-434b-b254-8a6afcf57907>)", on
the other hand, he/she will think, "Ah, an instance of the class
foaf.Person is being instantiated, and is being initialized with
the URI <urn:uuid:ca00db92-0f7f-434b-b254-8a6afcf57907>, which
must be its ID." Of course, that's not *exactly* what's going on,
but at its core it's saying the same thing---and we've made it
easier for the common programmer to grasp what's going on.
(Frankly, there are a lot more common programmers out there than
there are propositional logicians.)
* So let's talk about literals, now. No one take offense, but I
personally have always thought that "value"^^eg:datatype is just
plain ugly. And it shows that RDF never quite knew what to do with
literals, especially not typed literals. If everything is a
resource and everything can be described by a three-part
proposition, what is eg:datatype? Is it a property of the literal
"value"? But literals can't have values. And surely the literal
"value" cannot have multiple conflicting datatypes. And how is an
xsd:string different from a plain literal? In RDF 2.0, I would
like to move literals away from their strange quasi-resource
status so that *everything* is a resource, For Real. An integer
such as 123 is a resource, and it might be *defined" by the
sequence of characters "123", but that's different than saying
that "123" is a resource with a data type of xsd:integer (which is
not true). I'd like to see something like <xsd:integer
rdf:literalAbout="123"/>, where "123" plays an analogous role to
rdf:about. This is the same thing has saying <rdf:Description
rdf:type="xsd:integer" rdf:literalAbout="123"/>. Suddenly we get
typed literals (distinct from strings!) that can take properties
and appear in lists with no problem. 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. It makes sense to common programmers
using RDF 1.x, and it points to where I want to go with RDF 2.0,
in which everything is a resource, For Real, and a typed literal
is not just a kludge on top of a kludge.
* Common programmers expect a comma in a list such as ( "Smith"
"Van Buren" ). Perhaps propositional logicians do not.
Again, my arguments for RDFON syntax over N3 are based upon other than
technical merits. I can't say one is technically better than the
other---but I do have a personal preference, as I've outlined, and I
think common programmers will share my preference.
I'm sure my prelude to my new proposals for literals in RDF 2.0 will get
some comments---just please be sure not to mix up that issue too much
with the RDFON proposal---they are related but distinct.
Best,
Garret
Received on Thursday, 26 July 2007 23:53:27 UTC