- From: Simon Gibbs <simon.gibbs@cantorva.com>
- Date: Wed, 04 Mar 2009 16:31:48 +0000
- To: Toby Inkster <tai@g5n.co.uk>
- CC: public-rdf-dawg-comments@w3.org
- Message-ID: <49AEACF4.2070007@cantorva.com>
I was about to suggest that inference could handle that particular example, as far as I can tell the case is handled by sub properties (happy to be corrected, but with the variable in another position this feature would be desirable for batch operations involving a list of subjects or objects of interest. It is used very frequently in SQL. Possible use cases would be augmenting, say a few hundred thousand records about musicians with information about the genre of music they play (something I am likely to do in the near future). Another use case might involve retrieving additional columns of data in a tabular UI, with batch sizes equal to the number of records in the viewport and the content of the IN group taken from a column bound to an inverse functional property. This would allow extra columns to be requested and populated on the fly without performing a fresh query for the whole table. Having an explicit syntax would allow implementors to infer the possibility of a longer list than || might suggest and therefore they might be able to trigger appropriate optimizations. This might in turn yield a higher maximum batch size and better overall performance. FWIW I would prioritize aggregation functions (MIN, MAX, COUNT, AVERAGE, GROUP BY etc) above this feature as the distribution of graphs allows a work around for the missing IN (see e.g. Talis' augmentation functionality) as does the || operator. Toby Inkster wrote: > Analogous to the SQL operator of the same name. > > PREFIX foaf: <http://xmlns.com/foaf/0.1/> > PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> > SELECT ?thing ?name > WHERE { > ?thing ?p ?name . > FILTER (?p IN (foaf:name foaf:nick rdfs:label)) > } > > This query can already be written as > > PREFIX foaf: <http://xmlns.com/foaf/0.1/> > PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> > SELECT ?thing ?name > WHERE { > ?thing ?p ?name . > FILTER (?p = foaf:name || ?p = foaf:nick || ?p = rdfs:label) > } > > But I hope people agree that the former syntax is more legible. > > Formally, IN would be an infix operator taking a term as its first > argument and an rdf:List as its second argument. > >
Received on Wednesday, 4 March 2009 16:39:47 UTC