- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Mon, 21 Nov 2005 13:13:42 -0500
- To: "Seaborne, Andy" <andy.seaborne@hp.com>
- Cc: RDF Data Access Working Group <public-rdf-dawg@w3.org>
- Message-ID: <20051121181341.GD17026@w3.org>
On Mon, Nov 21, 2005 at 12:24:17PM +0000, Seaborne, Andy wrote: > > There have been two recent comments on the lack of "CONSTRUCT *": > > http://lists.w3.org/Archives/Public/public-rdf-dawg-comments/2005Nov/0045.html > http://lists.w3.org/Archives/Public/public-rdf-dawg-comments/2005Nov/0046.html > > The case is made that it has utility based on the users' experiences. This > message outlines some possibilities and ask people to state any preferences > (+1/-1 etc). > > > 1/ One possibility is to restrict "CONSTRUCT *" to the case where the query > is > against a single graph: so it's limited to: > > CONSTRUCT * WHERE { ... P ... } > CONSTRUCT * WHERE { GRAPH <uri> { ... P ... } } > > where P is a graph pattern not involving GRAPH. It is the same as placing > all > the basic pattens that occur in P in the pattern in the CONSTRUCT template. > > This is accessing exactly one of the graphs in a dataset and returning that > some part of the graph that will reconstruct the same variable bindings at > the > client. It is not exactly a subgraph in the presence of UNION because it > may > include extra triples induced by one branch from matches only present in the > other branch in the presence of UNION: > > Data: > <a> :q <c> . > > CONSTRUCT * # Repeating the patterns gives => { ?a :p ?c . ?a :q ?c } > WHERE { { ?a :p ?c . } UNION { ?a :q ?c } } > > Result: > <a> :q <c> . > <a> :p <c> . > > CONSTRUCT * as repeating all the basic patterns will yield a graph that > matches with the bindings: it just may not be minimal or even a subgraph. > > 2/ A second possibilty is to create a single graph created from the parts > of all > the graphs, named and default, used to match the query. For example, a > query > to pick information from a number of different graphs and create a new > conveniently graph based on graph patterns used. Reissuing the query > pattern > does not lead to the same variable bindings. Such queries can be written > out > explicitly. > > > 3/ A third possibility would require a multiple graph serialization syntax, > where a dataset is synthesised based on the query with no limitations on use > of GRAPH. I like this from a closure perspective. Let's let RIF deal with this. > 0/ The zeroth possibility is leave as-is - no "CONSTRUCT *". > > > There is another principle for CONSTRUCT * instead of "it's a shorthand for > the repeat of the basic patterns", which is "CONSTRUCT *" is the triples > touched for all the solutions needed. That can make interactions with > optimization hard: > > CONSTRUCT * # Repeating the patterns gives => { ?a :p ?c . ?a :q ?c } > WHERE { { ?a :p ?c . FILTER(false) } UNION { ?a :q ?c } } > > an optimizer could notice that FILTER(false) rejects everything and never > use > the left branch. Woudl a subgraph need to include any :p triples? > > > With the shorthand repeat template versions: > 0/ +0.5 > 1/ +1 > 2/ +0.5 > 3/ -1 0/ +1 1/ -0.5 2/ 0 3/ +0.5 I believe that as soon as we include a graph, we're talking about rules. I'm very hesitant to go into this area now. > Of the these, the argument of utility justifies 1 to me. 2 is OK too. 3 > can > be done in multiple queries. 2 and 3 seem to me to make too many decisions > about future use at this stage. > > > Andy > > PS SeRQL has CONSTRUCT * - Jeen informs me it's in the style of version 2. > > > > > -- -eric office: +81.466.49.1170 W3C, Keio Research Institute at SFC, Shonan Fujisawa Campus, Keio University, 5322 Endo, Fujisawa, Kanagawa 252-8520 JAPAN +1.617.258.5741 NE43-344, MIT, Cambridge, MA 02144 USA cell: +81.90.6533.3882 (eric@w3.org) Feel free to forward this message to any list for any purpose other than email address distribution.
Received on Monday, 21 November 2005 18:13:49 UTC