- From: Patrick Stickler <patrick.stickler@nokia.com>
- Date: Thu, 8 Apr 2004 11:19:09 +0300
- To: "ext Eric Prud'hommeaux" <eric@w3.org>
- Cc: "ext Eric Prud'hommeaux" <eric@w3.org>, RDF Data Access Working Group <public-rdf-dawg@w3.org>
Firstly, let me stress that I am proposing RDFQ, or something
like it, as a *starting* point, not an *ending* point, so if
it does not include some particular feature/function that the WG
feels is essential, that shouldn't exclude the WG exploring
such an avenue.
I.e. the comparison of QLs should not be basis for selecting one
"as-is" but simply as fodder for discussion about what ultimately
would be the most optimal approach to pursue.
That said...
On Apr 08, 2004, at 09:34, Patrick Stickler wrote:
>>
>> Can one express queries in RDFQ where an arbitrary subset of the terms
>> in the graph are logical disjuctions according to a popular definition
>> of "disjuction" [2] ? ...
> Perhaps not as presently defined. But being an RDF vocabulary, it would
> probably be straightforward to add.
>
E.g. something along the lines of
rdfq:oneOf a rdf:Property ;
rdfs:range rdfs:List ;
rdfs:comment "A list of alternatives." .
rdfq:TargetSubset a rdfs:Class ;
rdfs:comment "A target template subset." .
with the following closure rules
IF
?target ?property ?value .
?value rdfq:oneOf ?list .
?list rdfs:member ?alternate .
THEN
?alternate rdf:type rdfq:Value .
I.e., a list of alternatives associated with a value
is a list of alternative values.
IF
?query rdfq:target ?target .
?target rdfq:oneOf ?list .
?list rdfs:member ?subset .
THEN
?subset rdf:type rdfq:TargetSubset .
?subset rdfq:resource ?r .
?target rdfq:resource ?r .
I.e., a list of alternatives associated with a target
is a list of alternate target template subsets, and a target
template and a target template subset describe the
same thing.
Thus, taking your example FatAnnotationQuery (EP-4) [1]:
ask
(<http://example.com/annot1> rdf:type a:Annotation.
<http://example.com/annot1> a:annotates ?annotates.
<http://example.com/annot1> a:context ?context.
( <http://example.com/annot1> dc0:creator ?creator ||
<http://example.com/annot1> dc1:creator ?creator )
?creator a:E-mail ?email.
?creator a:name ?name.
<http://example.com/annot1> a:ceated ?created.
( <http://example.com/annot1> dc0:date ?date ||
<http://example.com/annot1> dc1:date ?date )
<http://example.com/annot1> a:body ?body.
?body http:Body ?bodyData.
?body http:ContentType ?contentType)
collect (?annotation ?body)
we get in RDFQ (serialized as Turtle, in minimal form):
[ :select ( "annotation" "body" ) ;
:target [ :resource <http://example.com/annot1> ;
:id "annotation" ;
rdf:type a:Annotation ;
a:annotates [ ] ;
a:context [ ] ;
:oneOf ( [ dc0:creator [ :id "creator" ] ; dc0:date [ ] ]
[ dc1:creator [ :id "creator" ] ; dc1:date [ ] ] )
;
a:created [ :id "creator" ] ;
a:body [ :id "body" ; http:Body [ ] ; http:ContentType [ ]
] ] ] .
or more explicitly (not trusting the RDFS closure rules to do their
thing):
[ a rdfq:Query ;
rdfq:select ( "annotation" "body" ) ;
rdfq:target [ a rdfq:Target ;
rdfq:resource <http://example.com/annot1> ;
rdfq:id "annotation" ;
rdf:type a:Annotation ;
a:annotates [ a rdfq:Value ] ;
a:context [ a rdfq:Value ] ;
rdfq:oneOf ( [ a rdfq:TargetSubset ;
dc0:creator [ a rdfq:Value ; rdfq:id
"creator" ] ;
dc0:date [ a rdfq:Value ] ]
[ a rdfq:TargetSubset ;
dc1:creator [ a rdfq:Value ; rdfq:id
"creator" ] ;
dc1:date [ a rdfq:Value ] ] ) ;
a:created [ rdfq:id "creator" ] ;
a:body [ rdfq:id "body" ;
http:Body [ a rdfq:Value ] ;
http:ContentType [ a rdfq:Value ] ] ] ] .
(note, I omitted rdfq:id qualifications where all that appeared
to be relevant was that some value was defined)
--
Of course, this is just off the top of my head, so is sure to have
at least one imperfection. But it illustrates my point, I think,
that "fuller" disjunction could be done with a QL such as RDFQ
in a relatively intuitive manner.
It is, perhaps fair though, to conclude that RDFQ as presently
defined does not support the "kind of" disjunction that you had
in mind for that classification.
Patrick
[1]
http://lists.w3.org/Archives/Public/public-rdf-dawg/2004JanMar/
0083.html
--
Patrick Stickler
Nokia, Finland
patrick.stickler@nokia.com
Received on Thursday, 8 April 2004 04:23:59 UTC