- From: Andrew Newman <andrewfnewman@gmail.com>
- Date: Sun, 4 Nov 2007 05:53:52 +1000
- To: "Eric Prud'hommeaux" <eric@w3.org>
- Cc: public-rdf-dawg-comments@w3.org
On Nov 3, 2007 12:11 AM, Eric Prud'hommeaux <eric@w3.org> wrote:
> On Fri, Nov 02, 2007 at 01:01:22PM +1000, Andrew Newman wrote:
> > I'd say, "Such a language would not only produce sets of variables but
> > also allow the production of RDF graphs".
> >
> > I also fully agree with the extraction of terms from an RDF graph in
> > Requirement 3.2. The stage at which the extraction from an RDF graph
> > should take place at projection not at the graph matching stage.
> >
> > I'd also suggest that the implementation of SPARQL in JRDF
> > (http://jrdf.sf.net/) is a conceivable alternative form of the
> > language that does meet these goals.
>
> I see how extracting nodes is doable from an API (such as JRDF), but I
> don't see how you propose to return nodes with a query language
> (i.e. a return from a single call to an interpreter) that meets your
> criteria of only using graphs in the algebra. You would need some way
> to isolate the graph pattern of interest and extract, for instance,
> some people's names and mboxs.
>
To ensure that you can return graphs, the idea is to retain the
context of the nodes from the original graph. So it has a little more
structure - it just retains triples - it doesn't have knowledge of
relationships/schemas.
Here's a small example with email addresses and names.
SELECT ?mbox ?name
{
?x foaf:mbox ?mbox .
OPTIONAL { ?x foaf:name ?name } .
}
a1 foaf:mbox a1@a1.com
a2 foaf:mbox a2@a1.com
a2 foaf:name "Fred"
a2 foaf:nick "Freddy"
Currently, you'd have a list of bindings like { ?x = a1, ?mbox =
a1@a1.com}, { ?x = a2, ?mobx = a2@a1.com } and as so on.
All I'm really suggesting is adding types to the bindings and a few
extra bindings/columns - sufficient information to retain a graph
structure. So it would be: { subject:?x = a1, predicate:p1 =
foaf:mbox, object:?mbox = a1@a1.com}, { subject:?x = a2, predicate:p1
= foaf:mbox, object:?mbox = a2@a1.com} and for the OPTIONAL match
{subject:?x = a2, predicate:p2 = foaf:name, object:?name = "Fred"}.
The result of the optional is:
{subject: ?x = a1, predicate:p1 = foaf:mbox, object:?mbox = a1@a1.com},
{ subject:?x = a2, predicate:p1 = foaf:mbox, object:?mbox = a2@a1.com,
predicate:p2 = foaf:name, object:?name = "Fred"}
Which in triple form is:
a1 foaf:mbox a1@a1.com
a2 foaf:mbox a2@a1.com
a2 foaf:name "Fred"
There is a small increase in overhead but it's quite minial. If you
use relations, the extra complexity is in a shared set of attributes.
Received on Saturday, 3 November 2007 19:54:02 UTC