- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Thu, 21 Aug 2008 18:12:50 -0400
- To: "Seaborne, Andy" <andy.seaborne@hp.com>
- CC: "al@jku.at" <al@jku.at>, Semantic Web <semantic-web@w3.org>, "public-rdf-dawg-comments@w3.org" <public-rdf-dawg-comments@w3.org>
Seaborne, Andy wrote:
>
>> -----Original Message-----
>> From: public-rdf-dawg-comments-request@w3.org [mailto:public-rdf-dawg-
>> comments-request@w3.org] On Behalf Of Lee Feigenbaum
>> Sent: 21 August 2008 18:26
>> To: al@jku.at
>> Cc: Semantic Web; public-rdf-dawg-comments@w3.org
>> Subject: Re: SPARQL question: get distinct list of datatypes used for
>> literals
>>
>>
>> Andreas Langegger wrote:
>>
>>> Hi there,
>>>
>>> maybe sb can tell me if this is still possible: I'd like to fetch all
>>> datatype URIs used for object literals in a dataset. There is the
>>> dataset predicate which can be used in filter expressions to filter
>>> literals to a known datatype like xsd:string: FILTER(datatype(?val) =
>>> xsd:string).
>>>
>>> But can I bind the value to a variable somehow? With a filter it can't
>>> work (consider FILTER(datatype(?val) = ?dt) where ?val is bound to
>>> literal values and ?dt should give me the type). I could use property
>>> functions, but I'd like to stay with SPARQL specs. Maybe there is a way
>>> to do it I just can't see...
>>>
>>> thanks,
>>> AndyL
>> AndyL,
>>
>> There's no way to do this (select functions of values from a
>> graph/dataset) in the SPARQL specification.
>>
>> As you said, various implementations provide extensions that will do
>> this. Please see:
>>
>> http://esw.w3.org/topic/SPARQL/Extensions/Selecting_Expressions
>>
>> Lee
>>
> Yes - in strict SPARQL (simple entailment), a query can only return RDF terms found in the graph itself.
>
>
> I'm sure someone can correct me, but D-entailment comes close: sec 5.1 of RDF sSemantics has the text:
>
> """
> Say that an RDF graph recognizes a datatype URI reference aaa when the graph rdfs-entails a datatyping triple of the form
>
> aaa rdf:type rdfs:Datatype .
> """
In which case, the query that AndyL wants would be:
SELECT ?dt {
:s :p ?val .
?dt a rdfs:Datatype .
FILTER (datatype(?val) = ?dt) .
}
Offhand, I don't know of any SPARQL implementations that do this: at the
same time, I don't know of any that don't, other than my own :-D
For my own edification, I'd be very interested in learning of engines
that support this application of D-entailment.
Lee
Received on Thursday, 21 August 2008 22:13:39 UTC