- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Thu, 14 Sep 2006 11:43:04 +0100
- 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 UTC