W3C home > Mailing lists > Public > public-sparql-dev@w3.org > July to September 2006

Re: SPARQL, named graphs and default graph

From: Seaborne, Andy <andy.seaborne@hp.com>
Date: Thu, 14 Sep 2006 11:43:04 +0100
Message-ID: <45093238.30903@hp.com>
To: Nuutti Kotivuori <naked@iki.fi>
CC: public-sparql-dev@w3.org



Nuutti Kotivuori wrote:
> Nuutti Kotivuori wrote:
>> - There is no way to explicitly match statements that have an
>> unknown origin, since the origins are just distinct blank nodes.
> 
> Hey! I just thought of something.
> 
> This ofcourse assumes that SPARQL would allow blank nodes to be graph
> names.
> 
> SELECT ?s ?p ?o
> WHERE { GRAPH ?g { ?s ?p ?o }
>         FILTER isBlank(?g) }
> 
> Would this work?

Would this work to avoid relying on blank nodes for graphs because, strictly, 
does not allow blank nodes as GRAPH names.

Minting URIs is always possible so giving things explicit names is always 
possible.  (Analogy: This is a bit like Steve's one-extra slot for system 
management; sometimes using that extra indirection helps.  It is the system 
name for the graph.).

One way to use this is to make one graph the manifest of what's in the store. 
   That can be the default graph.

_:a :origin   <somePlace> .
_:a :assigned <myChoiceOfURI>

SELECT ?s ?p ?o
WHERE {
    GRAPH ?g { ?s ?p ?o }
    ?blank :assigned ?g .
    ?blank :origin ?origin . }

finds all the statements with a known origin (if "unknown" becomes no :origin 
triple, then the query can find them by an idiom of finding where triple isn't 
mentioned:

SELECT ?s ?p ?o
WHERE {
    GRAPH ?g { ?s ?p ?o }
    ?b :assigned ?g .
    OPTIONAL { ?b :origin ?origin }
    FILTER (!bound(?origin))
}
(All triples in graphs with no associated :origin recorded)

Statements of unknown origin can go into separate graphs or all into one 
graphs as the app chooses.  One decision to be made is around whether

:s :p :a .
:a :q :b .

is supposed to match the pattern { ?s :p ?o . ?o :q ?v }
where :s :p :a and :a :q :b are unknown or of different origins.

This is one way to differentiate context mechanisms for statements from named 
graphs.



Blank nodes are first class objects in RDF but as existential variables you 
have to know what they range over.  The thing I like about named graphs is 
that it makes the minimal assumption as to the semantics across graphs.  There 
is no implied relationship between the domains being described by the graphs. 
  That is, it has no fixed semantics.  It's the way the app uses the graphs 
that makes the connections.  In the absence of a standard approach these kinds 
of provenance issues, that's as far as it can go and be general.

[[
I find these two useful items by Pat Hayes about blank nodes:
  http://www.ihmc.us/users/phayes/RDFGraphSyntax.html
  http://lists.w3.org/Archives/Public/public-rdf-dawg/2006JulSep/0153.html
]]

	Andy
Received on Thursday, 14 September 2006 10:43:27 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 8 January 2008 14:17:05 GMT