5

ARQ、TDB、Named Graphs のコマンドライン ツールの接続に奇妙な動作があります。名前付きグラフで tdbloader を介してデータをインポートする場合、SPARQL SELECT クエリの GRAPH 句を介してクエリすることはできません。ただし、このクエリは、SPARQL INSERT を使用して同じグラフにデータを挿入する場合に可能です。

次のアセンブラ記述ファイルtdb.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" ;
.

ファイルdata.ttlにデータセットがあります。

<a> <b> <c>.

ここで、tdbloader を使用してこのデータを挿入し、次に SPARQL INSERT を使用して別のトリプルを名前付きグラフデータに挿入しています。

tdbloader --desc tdb.ttl --graph data data.ttl
update --desc tdb.ttl "INSERT DATA {GRAPH <data> {<d> <e> <f>.}}"

これで、次の方法で SPARQL を使用してデータをクエリできます。

$arq --desc tdb.ttl "SELECT *  WHERE{ GRAPH ?g {?s ?p ?o.}}"
----------------------------
| s   | p   | o   | g      |
============================
| <a> | <b> | <c> | <data> |
| <d> | <e> | <f> | <data> |
----------------------------

すべてが完璧に見えます。しかし今、私はこの特定の名前付きグラフデータのみを照会したいと思います:

$ arq --desc tdb.ttl "SELECT *  WHERE{ GRAPH <data> {?s ?p ?o.}}"
-------------------
| s   | p   | o   |
===================
| <d> | <e> | <f> |
-------------------

tdbloader からインポートされたデータが見つからないのはなぜですか? このクエリの何が問題になっていますか? 両方のインポートから結果を取得するにはどうすればよいですか?

4

1 に答える 1