- From: Phil Dawes <pdawes@users.sf.net>
- Date: Tue, 2 Mar 2004 14:44:00 +0000
- To: <Patrick.Stickler@nokia.com>
- Cc: <www-rdf-interest@w3.org>
Hi Patrick, Is there any way to use the new 'select' stuff to do optional variable binding? e.g. bind variable 'a' to the subject nodes of all triples matching a certain criteria, and bind variable 'b' to the rdfs:label of the subject node if it exists. Many thanks, Phil > From: <Patrick.Stickler@nokia.com>> > > Howdy folks, > > As fodder for the coming discussions in Cannes regarding DAWG and > related issues, I wanted to draw attention to the latest specification = > of RDFQ [1] > an RDF vocabulary and query model for expressing queries and query = > results > in RDF. > > RDFQ supports both query-by-example like templates, returning = > descriptions > of the matched resources, as well as SELECT like queries, returning = > variable > bindings using the Result Set Vocabulary [2]. > > E.g. Here is a query to identify all resources where their dct:modified = > timestamp=20 > occurs between the specified timestamps (match exclusive), which will = > return > the concise bounded description of each matched resource:=20 > > In minimal Turtle form (with RDFQ as default namespace and RDFS = > closures): > > [:target [dct:modified [:gt "2001-08-11T10:30:00Z"^^xsd:dateTime; :lt = > "2002-02-28T20:45:00Z"^^xsd:dateTime]]]. > > which in full Turtle equates to: > > [a rdfq:Query; > rdfq:target > [a rdfq:Target; > dct:modified > [a rdfq:Value; > rdfq:gt "2001-08-11T10:30:00Z"^^xsd:dateTime; > rdfq:lt "2002-02-28T20:45:00Z"^^xsd:dateTime > ] > ] > ]. > > which in RDF/XML equates to: > > <rdfq:Query> > <rdfq:target> > <rdfq:Target> > <dct:modified> > <rdfq:Value> > <rdfq:gt = > rdf:datatype=3D"http://www.w3.org/2001/XMLSchema#dateTime">2001-08-11T10:= > 30:00Z</rdfq:gt> > <rdfq:lt = > rdf:datatype=3D"http://www.w3.org/2001/XMLSchema#dateTime">2002-02-28T20:= > 45:00Z</rdfq:lt> > </rdfq:Value> > </dct:modified> > </rdfq:Target> > </rdfq:target> > </rdfq:Query> > > Here is a query to identify all resources having a dc:title defined, = > returning the variable=20 > bindings for 'target' and 'title' for each matched resource:=20 > > [:select ("target", "title"); :target [:id "target"; dc:title [:id = > "title"]]]. > > or > > [a rdfq:Query; rdfq:select ("target", "title"); > rdfq:target [a rdfq:Target; rdfq:id "target"; dc:title [a rdfq:Value; = > rdfq:id "title"]]]. > > or > > <rdfq:Query> > <rdfq:select> > <rdf:List> > <rdf:first>target</rdf:first> > <rdf:rest> > <rdf:List> > <rdf:first>title</rdf:first> > <rdf:rest = > rdf:resource=3D"http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/> > </rdf:List> > </rdf:rest> > </rdf:List> > </rdfq:select> > <rdfq:target> > <rdfq:Target> > <rdfq:id> > target > </rdfq:id> > <dc:title> > <rdfq:Value> > <rdfq:id> > title > </rdfq:id> > </rdfq:Value> > </dc:title> > </rdfq:Target> > </rdfq:target> > </rdfq:Query> > > Which correlates to > > SELECT ?target, ?title > WHERE {dc:title, ?target, ?title}; > > The generic selection query to obtain all statements in a knowledge base > > SELECT ?subject ?predicate ?object=20 > WHERE {?predicate, ?subject, ?object}; > > would be expressed in RDFQ as > > [:select ("subject", "predicate", "object"); > :target [:id "subject"; :property [:id "object"; :predicate [:id = > "predicate"]]]]. > > (note that encoding the query in RDF requires the predicate variable > to be defined in terms of the object for each property:value pair) > > The RDFQ spec includes numerous additional examples. > > One of the key benefits of RDFQ is that it is pure RDF. Both queries and = > results > are RDF, which means that only one parser is needed and one can employ = > RDF > tools and methods on the queries and results. Furthermore, auxiliary = > information > can be included in the request input, allowing e.g. the requesting agent = > to provide > vocabulary relations (e.g. rdfs:subPropertyOf, owl:sameAs) between = > common and > local terms so that execution of the query can be optimized for that = > agent without > affecting the server's own knowledge base. > > Using a keyboard-friendly serialization of RDF such as Turtle, where the = > RDFQ > namespace is default and RDFS closures for RDFQ terms are applied, = > queries are=20 > as concise and easy to express as most SQUISH like queries, as the = > examples > should illustrate. > > The open source release of the Nokia Semantic Web Server [3] has some = > initial > support for RDFQ, which should become complete in the very near future. > > Anyway, just wanted to give a heads up about RDFQ in case folks find it = > useful > input to next week's discussions. > > Regards, > > Patrick > > [1] http://sw.nokia.com/rdfq/RDFQ.html > [2] http://www.w3.org/2003/03/rdfqr-tests/recording-query-results.html > [3] http://sw.nokia.com/tools > > > -- > > Patrick Stickler > patrick.stickler@nokia.com > > > --
Received on Tuesday, 2 March 2004 09:45:16 UTC