Re: Dynamically Merging Multiple Named Graphs?

Hi Jamey,

I don't think there's any way to do what you're looking for in SPARQL.

In your particular example, you could query with the full contents of 
the store merged as the query's default graph, but I realize that 
doesn't work in the general case.

Sorry I don't have a more helpful answer here!

Lee

Wood, Jamey wrote:
> I’m trying to find a good way to contextualize RDF statements (so that
> statements could be bound to a certain time period, licensing terms, etc).
> Named graphs seem to handle this pretty well.  But I can’t find a good way
> to query across all named graphs which match some criteria.
> 
> I’ll try to illustrate the issue I’m facing via an example.  Suppose we have
> the following graphs:
> 
>   @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>   @prefix xsd: <http://www.w3.org/2001/XMLSchema#>
>   @prefix ex: <http://example.org/vocabulary#> .
>   @prefix : <http://example.org/exampleDocument#>
> 
>   # default graph
>   {
>     <urn:g1> ex:startDate "1809-02-12T00:00:00Z"^^xsd:dateTime .
>     <urn:g1> ex:endDate "1865-04-15T00:00:00Z"^^xsd:dateTime .
>     <urn:g2> ex:startDate "1839-02-12T00:00:00Z"^^xsd:dateTime .
>     <urn:g2> ex:endDate "1840-02-12T00:00:00Z"^^xsd:dateTime .
>     <urn:g3> ex:startDate "1840-02-12T00:00:00Z"^^xsd:dateTime .
>     <urn:g3> ex:endDate "1841-02-12T00:00:00Z"^^xsd:dateTime .
>   }
> 
>   <urn:g1> {
>     :Abraham_Lincoln rdf:type ex:LivingPerson .
>   }
> 
>   <urn:g2> {
>     :Abraham_Lincoln ex:age "30"^^http://www.w3.org/2001/XMLSchema#integer ..
>   }
> 
>   <urn:g3> {
>     :Abraham_Lincoln ex:age "31"^^http://www.w3.org/2001/XMLSchema#integer ..
>   }
> 
> (So the default graph just contains “context information” and the “real” data is in the named graphs.)
> 
> Now suppose that I want to write a query to get the age of all living persons on a particular day.
> In other words, I'd like to do something kind of like this:
> 
>   PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>   PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
>   PREFIX ex: <http://example.org/vocabulary#>
>   PREFIX : <http://example.org/exampleDocument#>
> 
>   SELECT ?person $age
>   WHERE {
>     GRAPH ?g {
>       ?person rdf:type ex:LivingPerson .
>       ?person ex:age ?age .
>     }
>     ?g ex:startDate ?ctx_startDate .
>     ?g ex:endDate ?ctx_endDate .
>     FILTER (("1840-04-01T00:00:00Z"^^xsd:dateTime >= xsd:dateTime(?ctx_startDate)) &&
>             ("1840-04-01T00:00:00Z"^^xsd:dateTime <= xsd:dateTime(?ctx_endDate)))
>   }
> 
> ....except that won't work, since the "rdf:type ex:LivingPerson" and "ex:age 31" assertions
> live in two different graphs (even though each of those graphs represents a context which
> does contain April 1, 1840).
> 
> Is there some way to make this work?  Essentially, I think I'm looking for a way to
> have a query construct a dynamic merge of named graphs (without having to know the names
> of those graphs up-front).
> 
> I’ve looked at the proposal for Composite Datasets
> (http://www.w3.org/2009/sparql/wiki/Feature:CompositeDatasets), and it sounds somewhat
> like what I’m seeking.  But even with it, it sounds like I’d need to explicitly specify
> the graphs which I wanted to merge (instead of being able to just specify criteria about
> them, and letting the system find them).  Correct?
> 
> Also, I should note that I’m fairly new to semantic web technologies.  So my apologies
> In advance if I’ve botched any of the above syntax or am just approaching this in a screwy
> way.
> 
> Thanks,
> Jamey
> 
> 

Received on Tuesday, 25 August 2009 13:13:14 UTC