W3C home > Mailing lists > Public > w3c-rdfcore-wg@w3.org > October 2002

Re: Datatyping literals: question and test cases

From: Patrick Stickler <patrick.stickler@nokia.com>
Date: Thu, 31 Oct 2002 12:50:17 +0200
Message-ID: <000501c280cb$4c8f2080$6d9316ac@NOE.Nokia.com>
To: "Graham Klyne" <GK@NineByNine.org>, "ext pat hayes" <phayes@ai.uwf.edu>, "ext Brian McBride" <bwm@hplb.hpl.hp.com>
Cc: <w3c-rdfcore-wg@w3.org>

[Patrick Stickler, Nokia/Finland, (+358 40) 801 9690, patrick.stickler@nokia.com]

----- Original Message ----- 
From: "ext Brian McBride" <bwm@hplb.hpl.hp.com>
To: "Patrick Stickler" <patrick.stickler@nokia.com>; "Graham Klyne" <GK@NineByNine.org>; "ext pat hayes" <phayes@ai.uwf.edu>
Cc: <w3c-rdfcore-wg@w3.org>
Sent: 31 October, 2002 11:33
Subject: Re: Datatyping literals: question and test cases

> At 09:29 31/10/2002 +0200, Patrick Stickler wrote:
> >[Patrick Stickler, Nokia/Finland, (+358 40) 801 9690, 
> >patrick.stickler@nokia.com]
> >
> > > >But, what about this:
> > > >
> > > >   _:x ex:prop "http://example.org/" .
> > > >   ex:prop rdfs:range xsd:anyURI .
> > >
> > > That depends on how xsd:anyURI defines its value space. If its the
> > > set of strings conforming to the URI syntax, then OK.
> >
> >ARGH! Pat, no!
> >The WG has decided (with Nokia's dissent) that inlined literals
> >denote their string components (i.e. string-semantics)
> No it has not.  Their has been some recent discussion on whether they 
> denote (string,lang) pairs or the union of strings and (string, lang) 
> pairs.  To the best of my recollection, denoting just strings is not a 
> current option.
> >  and therefore
> >the above range assertion is a datatype clash! It is *never* OK.
> >Never ever ever. It is not possible for it to ever be OK.
> Why not?  Surely that depends on whether the value spaces of literals and 
> anyURI's are disjoint.  If literals can denote strings (as you claim they 
> can), and anyURI's are strings, then this is not necessarily a datatype clash.
> [...]

I would assert that anyURI values are not strings, but URIs. I don't
believe that anyone expects that the URI value space is ordered, i.e.
that it is meaningful to ask if URI X is "less than" URI Y, only whether
they are equal. Furthermore, equality between values of xsd:anyURI is
not the same as string equality. I.e.

   "http://EXAMPLE.COM/"^^xsd:anyURI == "http://example.com/"^^xsd:anyURI

This is no differen than the case of 

   "10"^^xsd:integer == "000000010.0000000"^^xsd:integer


   "http://EXAMPLE.COM/"^^xsd:string != "http://example.com/"^^xsd:string

> >Furthermore, not that xsd:anyURI is *not* a subtype even of xsd:string!
> >I.e., even XML Schema says that a member of the value space of xsd:anyURI
> >is *not* a member of the value space of xsd:string -- a URI is not a string!
> A reference would be helpful here.  


> Where does  XSD say that different 
> primitive types must have disjoint value spaces.

It doesn't. Derived types have a value space that is a proper subset
of the value space of all superordinate types. Some primitive types
have intersecting value spaces. Some have disjoint value spaces.

Not every datatype defined by XML Schema is a subtype of xsd:string.
Nor is every datatype used by RDF a subtype of rdfs:Literal or 

I.e. xsd:anyURI is not a subtype of xsd:string. Their value spaces are 
thus disjunct.

Clearly there was a semantic reason why xsd:anyURI is not a subtype
of xsd:string, as the above examples regarding ordinal and equality
comparison is concerned show, since it would be a trivial declaration 
to relate them hierarchically and thus relate their value spaces.

> It is true that anyURI is not derived from xsd:string, but is that because 
> the value spaces are different, or because there is no facet that would 
> allow exact expression of the value space of anyURI?  The only facet that 
> might be used is PATTERN which requires a regular expression.  If the 
> grammar for anyURI cannot be expressed as regular expression, then anyURI 
> cannot be derived from xsd:string.

It is possible to define a regular expression that will exclude strings
that are not valid URIs, specifically covering the two cases of 
non-hierarchical and hierarchical URIs, requiring and restricting the
form of the URI scheme prefix. And in fact, the lexical grammar for
URIs *is* defined, by RFC 2396.

Then, defining particular URI schemes as subtypes of anyURI (as I do)
one can then constrain further the allowed lexical forms for the
specific scheme.

The fact that XML Schema does not specify the regular expressions
explicitly does not mean that such regular expressions are not
indicated by the XML Schema spec, as it explicitly references RFC 2396
and RFC 2732 regarding both syntax of lexical forms and semantics
of xsd:anyURI.

But the reason why xsd:anyURI is not derived from xsd:string is
clearly semantic, since the lexical space of xsd:anyURI is certainly
a subset of the lexical space of xsd:string. Yet rdfs:subClassOf
with regards to RDF datatyping does
not relate lexical spaces, it relates value spaces, and just because
one datatype's lexical space might be a subset of another's lexical
space, and just because both datatypes's L2V mapping may map a lexical 
form to a value that is string-equal to the lexical form, does not mean
that the value spaces intersect. 

Thus, as XML Schema clearly specifies

   "urn:foo/bar"^^xsd:anyURI != "urn:foo/bar"^^xsd:string

And I agree that this is correct. It makes no sense to compare a URI
as a datatype value with a string as a datatype value as they have
different semantics. Comparing the lexical form of a URI and the lexical
form of a string is possible, though I wouldn't think necessarily useful.

And in the same way that xsd:anyURI and xsd:string are disjunct, and
for the same reasons, rdfs:StringLiteral and xsd:string should be
disjunct, since it is no more meaningful to test whether one inlined
literal (which is simply a global constant, remember) is "less then"
or "greater than" some other literal. The semantics of the value space
do not IMO define such ordered comparisons. And thus the following
must be true and valid

   "foo"^^rdfs:StringLiteral !=  "foo"^^xsd:string

Received on Thursday, 31 October 2002 05:50:20 EST

This archive was generated by hypermail pre-2.1.9 : Wednesday, 3 September 2003 09:52:35 EDT