- From: Garret Wilson <garret@globalmentor.com>
- Date: Thu, 02 Aug 2007 07:14:53 -0700
- To: Richard Cyganiak <richard@cyganiak.de>
- CC: Tim Berners-Lee <timbl@w3.org>, Sandro Hawke <sandro@w3.org>, Story Henry <henry.story@bblfish.net>, Semantic Web <semantic-web@w3.org>
Richard,
I'm still trying to put the larger RDF literal conversation on hold for
a day or two so I can be productive on other things, but one thing I
want to clear up, for my benefit as well:
Richard Cyganiak wrote:
>
>
> On 1 Aug 2007, at 18:32, Garret Wilson wrote:
>> 3. Even if we prefer to write 123 and "123", why do we need
>> rdfs:datatype when we can simply use rdf:type set to xsd:Integer?
>
> Why do you keep railing against rdf:datatype? It is merely an artifact
> of the RDF/XML syntax. It does not exist in the RDF abstract syntax
> (which you call the “RDF model”).
What? If that were true, there would be no such things as typed literals
in the model, because once you suck RDF/XML or N3 into the model and
then re-serialize it, you'd just have plain literals again. (Sort of
like "erasure" in Java generics.) And there would be no use for typed
literals in general, because you couldn't query or otherwise use the
type information. (You query the model, not the serialization, after all.)
Citing "RDF: Concepts and Abstract Syntax"
<http://www.w3.org/TR/rdf-concepts/#section-Graph-Literal> , I note
that, "Typed literals have a lexical form and a datatype URI being an
RDF URI reference."
So datatypes do make it to the model, although they might not appear as
normal resource properties (which I don't think I ever claimed, and if I
did it was without thinking and beside the point). They seem to just be
values related to the literal, sort of like a resource's URI.
So that means, in an API, if I want to see if an object is a US
president or an integer, I would have to do the following:
Resource resource=getResourceSomehow();
if(resource instanceof Literal) //we can't look at the datatype unless
this is a literal
{
if(XSD_INTEGER.equals(((Literal)resource).getDataType()))
{
//this is an integer
}
}
else //if this is not a literal, we can check rdf:type
{
if(US_PRESIDENT.equals(resource.getProperty(RDF_TYPE)))
{
//this is a US president
}
}
Do you see why I still claim that the RDF abstract syntax is
inconsistent, which you disputed in a separate email to this thread? Why
must I use two separate ways to check the types of literal resources and
non-literal resources?
>
> And we wouldn't want anyone to mix up surface serialization syntax and
> abstract model in this thread, wouldn't we? ;-)
We wouldn't indeed. ;)
>
> (Just kidding -- I think I understood the point you are trying to make.)
Thanks! It's nice to hear that once in a while. :)
Best,
Garret
P.S. Does this mean I can keep railing against rdf:datatype? ;)
Received on Thursday, 2 August 2007 14:15:03 UTC