tbloader vs SPARQL INSERT - Dlaczego różne zachowanie z nazwanymi wykresami?
Istnieje dziwne zachowanie w połączeniu narzędzi wiersza poleceń ARQ, TDB i nazwanych wykresów. Jeśli importujesz dane przez tdbloader na nazwanym wykresie, nie można go zapytać za pomocą klauzuli GRAPH w zapytaniu SELAR SPARQL. Jednak to zapytanie jest możliwe przy wstawianiu danych do tego samego wykresu za pomocą SPARQL INSERT.
Mam następujący plik opisu asembleratdb.ttl:
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
[] rdf:type tdb:DatasetTDB ;
tdb:location "DB" ;
.
W pliku znajduje się zbiór danychdata.ttl:
<a> <b> <c>.
Teraz wstawiam te dane za pomocą tdbloader, a po drugie kolejne potrójne z SPARQL INSERT, oba w nazwanym wykresiedane:
tdbloader --desc tdb.ttl --graph data data.ttl
update --desc tdb.ttl "INSERT DATA {GRAPH <data> {<d> <e> <f>.}}"
Teraz dane można odpytywać za pomocą SPARQL poprzez:
$arq --desc tdb.ttl "SELECT * WHERE{ GRAPH ?g {?s ?p ?o.}}"
----------------------------
| s | p | o | g |
============================
| <a> | <b> | <c> | <data> |
| <d> | <e> | <f> | <data> |
----------------------------
Wszystko wydaje się idealne. Ale teraz chcę zapytać tylko o ten konkretny nazwany wykresdane:
$ arq --desc tdb.ttl "SELECT * WHERE{ GRAPH <data> {?s ?p ?o.}}"
-------------------
| s | p | o |
===================
| <d> | <e> | <f> |
-------------------
Dlaczego brakuje danych importowanych z programu tdbloader? Co jest nie tak z tym zapytaniem? Jak mogę uzyskać wyniki z obu importów?