1つのSPARQLクエリを使用して、特定の述語で識別されるサブジェクトに関連付けられたすべての「プロパティ」を取得する必要があります。 CONSTRUCT
(必ずCONSTRUCT
またはSELCET
のいずれか)が必要なわけではないので、「エクスポートトリプル」という用語の使用を特に避けています。SPARQLを使用してサブノードを持つRDFリソースを取得
一部の「プロパティ」はノード自体(空白ノードなど)であり、「再帰的に」取得する必要があります。述語の集合は知られています(私はそれらの包括的なリストを持っています、それらはすべて同じ接頭辞にあり、接頭辞を持つものすべてです)。 「再帰」する述語は、それらのサブセットです。
上記の例で@prefix ex: <http://example.org/ex/> .
@prefix : <http://example.org/> .
ex:toExport
a ex:SomeClass ; # to retrieve, as in rdf: namespace
:pred-1 "Some value" ; # to retrieve "as is"
:pred-2 42 ; # to retrieve "as is"
:pred-3 [ # blank-node to be retrieved as a whole
:pred-1 "..." ;
:pred-2 1024
] ;
:pred-4 [
:pred-3 [ # "sub" blank-node to be retrieved as a whole
:pred-1 "..." ;
:pred-2 1024
]
] ;
:pred-5 [ # same for a "sub-list"
:pred-6 (ex:something ex:else)
] ;
:pred-7 ex:subOne . # "sub-property" can be a non-blank node...
ex:subOne # ...defined as a resource of its own
:pred-1 "Value" ;
:pred-2 0 .
、Iは述語:pred-1
と:pred-2
(単純な値)、:pred-3
(これらの例では2つのトリプルブランクノードとなっている値)とのトリプルを取得する必要があり、:pred-4
(A空白ノード自体、余分な空白ノードなど)などがあります。:pred-7
は、すべての「サブノード」が必ずしも空白ノードではないことを示すので興味深いです。
次のクエリは、私は私の要件に一致する最も近いですが、それは私が大規模なデータセットに対するクエリのために避けたい虹彩の文字列値、上の正規表現を使用しています。
CONSTRUCT {
?s ?p ?o .
?o ?pp ?oo .
?oo ?ppp ?ooo .
}
WHERE {
{
?s ?p ?o .
FILTER (regex(str(?p), "^(http://www.w3.org/ns/shacl#|http://www.w3.org/1999/02/22-rdf-syntax-ns#)"))
OPTIONAL
{
?o ?pp ?oo .
FILTER (regex(str(?pp), "^(http://www.w3.org/ns/shacl#|http://www.w3.org/1999/02/22-rdf-syntax-ns#)"))
OPTIONAL
{
?oo ?ppp ?ooo .
FILTER (regex(str(?ppp), "^(http://www.w3.org/ns/shacl#|http://www.w3.org/1999/02/22-rdf-syntax-ns#)"))
}
}
}
述語の集合は20種類の述語のようなものなので、何らかの形でリストするのは容易ですが、それがコンビナトリアルな方法であればそうではありません。正規表現のための具体的
私はそれを最適化する可能性はあまりありませんが、少なくとも1回だけ実行されるように、別個のサブSELECTクエリの中で少なくとも異なるプロパティをクエリできます。残りのクエリは期待通りであり、深さ3のサブグラフの生成 – AKSW