You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Brad Moran <bm...@pinnacle21.net> on 2014/02/18 01:35:57 UTC
Named Graph SPARQL Issue for TDB
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
Re: Named Graph SPARQL Issue for TDB
Posted by Brad Moran <bm...@pinnacle21.net>.
That resolves the issue, thanks for your help!
—Brad
On Feb 19, 2014, at 3:45 PM, Andy Seaborne <an...@apache.org> wrote:
> 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 <an...@apache.org> 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
>>>
>>
>
Re: Named Graph SPARQL Issue for TDB
Posted by Andy Seaborne <an...@apache.org>.
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 <an...@apache.org> 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
>>
>
Re: Named Graph SPARQL Issue for TDB
Posted by Brad Moran <bm...@pinnacle21.net>.
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
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?
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?
Thanks,
Brad
On Feb 18, 2014, at 4:29 AM, Andy Seaborne <an...@apache.org> 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
>
Re: Named Graph SPARQL Issue for TDB
Posted by Andy Seaborne <an...@apache.org>.
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