On 19/02/14 19:50, Brad Moran wrote:
Thanks for your prompt reply. I see what you are saying, so I tried:

tdbloader  —set http://jena.hpl.hp.com/TDB#unionDefaultGraph=true —loc=TDBLocation 
—graph=‘<graph/named#graphName1>’ rdfFile.ttl

"--graph=http://example/graph/named#graphName1";


then tried to query it:

“PREFIX GRAPH: <graph/named#> SELECT * FROM NAMED graph:graphName1 WHERE{ GRAPH 
graph:graphName1 {?s ?p ?o} }”

But still receive an empty result set. So two questions remain:

        1. Am I not creating the absolute URI correctly?

Absolute URIs start with a scheme,

        2. Is there a commonly used base URI for named graphs that I could be 
using or should I just make my own as I tried to do?

Are you going to be letting this data out to other apps?

If not, then anything that does not clash with the data.

        Andy



Thanks,
Brad

On Feb 18, 2014, at 4:29 AM, Andy Seaborne <[email protected]> wrote:

On 18/02/14 00:35, Brad Moran wrote:
Hi,

I am loading data into a TDB as named graphs via command line tdbloader utility 
with unionDefaultGraph flag specified true for example:

        tdbloader —set http://jena.hpl.hp.com/TDB#unionDefaultGraph=true 
—loc=TDBLocation —graph=‘graphName1’ rdfFile.ttl
        tdbloader —set http://jena.hpl.hp.com/TDB#unioncDefaultGraph=true 
—loc=TDBLocation —graph=‘graphName2’ rdfFile2.ttl

Then I can successfully query to get everything from the union graph with the 
following SPARQL:
        “SELECT ?s ?p ?o ?g WHERE{ GRAPH ?g{ ?s ?p ?o} }"

But now I want to query for data from just one of the named graphs. From the 
SPARQL tutorial in Jena documentation I tried:

        “SELECT ?s ?p ?o FROM NAMED <graphName1> WHERE{ GRAPH <graphName1> {?s 
?p ?o} }”

However, it returns 0 results.

I also tried:

        “SELECT ?s ?p ?o FROM NAMED <graphName1> WHERE{ ?s ?p ?o }”

and

        “SELECT ?s ?p ?o WHERE{ GRAPH <graphName1> {?s ?p ?o} }”

and

        “SELECT ?s ?p ?o ?g FROM NAMED <graphName1> WHERE{ GRAPH ?g {?s ?p ?o} 
}”

But none of the queries produce any results. I am wondering if maybe setting 
the flag unionDefaultGraph to true is incorrect for my purpose? I want to be 
able to query all graphs at once, but also be able to query individual named 
graphs.

Thanks,
Brad

This is not related to unionDefaultGraph.

When the SPARQL parser sees

SELECT * FROM NAMED <graphName1> WHERE{ GRAPH ?g {?s ?p ?o} }

then <graphName1> will be resolved against the base URI.  There is always a 
base URI but if you don't specify it it is something unhelpful like the file: URI of 
the current directory.

The loader, seeing —graph="graphName1", isn't going near a parser so that is the URI and it is 
not resolved.  The URI is just "graphName1" and does not match <graphName1>

Example:
Printing queries respects implicit the base URI so it get turned back into <g> 
but the algebra printing does not

qparse --print=op 'SELECT * { GRAPH <g> { ?s ?p ?o } }'

which gives, for me:

(graph <file:///home/afs/g>
  (bgp (triple ?s ?p ?o)))

<g> ==> <file:///home/afs/g>


Use an absolute URI for the graph name in tdbloader operation and a prefix in 
the query to make the GRAPH .. look nice.

        Andy



Reply via email to