W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > January to March 2005

Re: nested SOURCE graph-patterns

From: Seaborne, Andy <andy.seaborne@hp.com>
Date: Wed, 26 Jan 2005 14:25:01 +0000
Message-ID: <41F7A83D.8040708@hp.com>
To: Alberto Reggiori <alberto@asemantics.com>
CC: RDF Data Access Working Group <public-rdf-dawg@w3.org>

Alberto Reggiori wrote:
> 
> hi all,
> 
> while doing a walk-through the grammar in the current editor draft [1] 
> I found that we allow nested SOURCE patterns - these are two 
> productions relative to it:
> 
> [6]   SourceGraphPattern   ::=   'source' '*' PatternElement | 'source' 
> VarOrURI PatternElement
> [10]   PatternElement   ::=   TriplePattern | GroupGraphPattern | 
> SourceGraphPattern | OptionalGraphPattern | 'and'? Expression
> 
> which legally allow to write queries like (note the nesting of SOURCE)

Yes - the language is compositional via the production PatternElement.

> 
> PREFIX data: <http://example.org/foaf/>
> PREFIX foaf: <http://xmlns.com/foaf/0.1/>
> 
> SELECT ?mbox ?age ?ppd
> GRAPH  data:aliceFoaf data:bobFoaf
> GRAPH  data:peterPanFoaf #this is being nested
> WHERE
>    SOURCE data:aliceFoaf
>    {
>      ( ?alice foaf:mbox <mailto:alice@work.example> )
>      ( ?alice foaf:knows ?whom )
>      ( ?whom foaf:mbox ?mbox )
>      ( ?whom PersonalProfileDocument  ?ppd )
> 
>      # nested SOURCE
>      SOURCE data:peterPanFoaf
>       {
>        ( ?peter foaf:mbox <mailto:peter_pan@not-working.example> )
>        ( ?peter foaf:knows ?peter_whom )
>        ( ?peter_whom foaf:mbox ?mbox )
>        ( ?peter_whom PersonalProfileDocument  ?ppd )
>       }
>    }

Nesting of SOURCE (now "GRAPH" - I'll try to stick to the new keywords but I 
might slip into old ways) here does not mean a further restriction.  Nesting is 
not subquery - its writing a pattern.

GRAPH data:peterPanFoaf accesses the graph with URI  ...peterPanFoaf.  It does 
not mean peterPanFoaf within aliceFoaf (maybe nested datasets).  There is no 
scoping anywhere in rq23.  (I don't see the value in nested datasets when we 
have only just agreed on the flat paradigm.)

So the simple case of (applying the new s/SOURCE/GRAPH/ renaming):

GRAPH <x>
{
    ... P1 ...
    GRAPH <y>
    { P2
    }
    ... P3 ...
}

has the same results as:

GRAPH <x>
{
    ... P1 ...
}
GRAPH <y>
{ P2
}
GRAPH <x>
{
    ... P3 ...
}

I wouldn't expect application writers to do this but people write things to be 
clear and different people have different ideas of "clear" - we should not 
mandate a way of doing it.  There are lots of ways to write queries cryptically!

I much prefer a query language without lots of special cases.  That makes the 
description harder, gets people confused, and can makes some implementations 
harder especially where the implementation is attempting to be strict (it has to 
special case things).  Rewritng to the best form for a given implementation is 
best left to the implementation.  It will differ from implementation to 
implementation.

>    SOURCE ?ppd
>    {
>       ( ?w foaf:mbox ?mbox )
>       ( ?w foaf:age ?age )
>    }
> 
> Even if syntactically correct, it could make hard to the reader being 
> convinced that such a query makes sense in the real world - by trying 
> to follow the current editor's draft design it seems we have two nested 
> "trusted graphs" (??).
> 
> Anyway, I find nesting of SOURCEs useful at some stage, but hard to fit 
> in our design - also the GRAPH/LOAD design discussing at the 
> face-to-face is less clearer when nesting is faced....
> 
> Does this make sense to you ?

Yes - thanks for pointing it out.

> 
> Is the design meant to cover this part?

Yes - by the compositional production that building large query patterns from 
smaller query patterns.

> 
> cheers
> 
> Alberto

	Andy

> 
> [1] http://www.w3.org/2001/sw/DataAccess/rq23/
> -
> Alberto Reggiori, Senior Partner, R&D @Semantics S.R.L.
> www.asemantics.com Milan Office
> 
Received on Wednesday, 26 January 2005 14:25:30 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:22 GMT