- From: Alan Ruttenberg <alanruttenberg@gmail.com>
- Date: Mon, 1 Jun 2009 16:39:56 -0400
- To: Pat Hayes <phayes@ihmc.us>
- Cc: "Peter F.Patel-Schneider" <pfps@research.bell-labs.com>, andy.seaborne@hp.com, sandro@w3.org, public-rdf-text@w3.org
Pat asks:
> ?? I thought I had this understood, but now I am genuinely confused. Why
> would the datatype of a plain literal NOT be rdf:PlainLiteral? Surely,
> calling this a datatype, and saying that it applies to plain literal syntax,
> means exactly that. If it does not mean that, what on earth does it mean?
> (***)
>
> Maybe the idea is, plain literals in undecorated, undatatyped, vanilla RDF
> have no datatype, but they do when this new datatype is 'recognized' (or
> chose your favorite term here; when the appropriate form of D-entailment is
> in use, for whatever reason). But if something like this is true, how can
> SPARQL tell the difference between RDF which is plain RDF (where "abc" has
> no datatype) and RDF which recognizes the new datatype (in which "abc" has
> the new datatype)?
My understanding is that the *SPARQL* DATATYPE function is a function
on syntax (or abstract syntax (= graph, for RDF)). Here's what it's
signature is documented to be:
IRI DATATYPE (typed literal typedLit)
IRI DATATYPE (simple literal simpleLit)
Since the syntax of RDF does not contain typed rdf:PlainLiteral
literals the DATATYPE function, under standard SPARQL semantics would
never return rdf:PlainLiteral.
Moreover, the extension of SPARQL to entailment regimes says that it
"is defined for a subset of RDF graphs called well-formed for the
regime". By RDF graphs, I understand it is meant the abstract *syntax*
of RDF. Since the RDF abstract syntax (graph) has no typed
rdf:PlainLiteral literals, my understanding is that the SPARQL
DATATYPE function could therefore also not return rdf:PlainLiteral.
As a check I looked to see whether there is any specified interaction
between the DATATYPE function and extensions of SPARQL to entailment
regimes and I see none. Of course entailments might introduce new RDF
literal terms, but as we've seen, typed rdf:PlainLiteral literals
can't be among those. I'd also point out that all BGP extension
language refers to RDF graphs, so I don't see any chance that typed
rdf:PlainLiteral literals will ever be introduced via that route.
What about bindings/answer sets? SPARQL says: "Graph pattern matching
produces a solution sequence, where each solution has a set of
bindings of variables to RDF terms". Since RDF terms are things in RDF
graphs, and we can't have typed rdf:PlainLiteral literals in RDF
graphs, there can't be typed rdf:PlainLiteral literals in answers. The
extension language does not modify this condition.
Therefore, to Andy's points, I conclude that the spec already prevents
what he is worried about, however it couldn't hurt to include
informative text that makes this clear.
There is only one case that I can see that might be surprising:
If you do the query corresponding to an earlier question Pat had about
entailment
{ :s :p "foo"^^xs:string.
:s :p _:b.
_:b :p ?type }
One might get, in one entailment regime, only a binding for ?type that
is xs:string, and in another only a binding for ?type that is
rdf:PlainLiteral. Of course neither of these bindings will obtain in
standard SPARQL with simple entailment.
-Alan
Received on Monday, 1 June 2009 20:40:53 UTC