コンテンツDBに保存している個々のドキュメントの一部として管理されていないトリプルが保存されています。本質的に各文書は人物を表し、定義された三つ組は人のマネージャーの文書URIを指定する。私は、SPARQLを使用して、マネージャとそれらの下にあるすべての人との間のパスの長さを決定しようとしています。SPARQLクエリを最適化する方法はありますか?
彼らは私が階層内でその下aperson、マネージャを返すために使用することができ、次のSPARQLクエリを、発見した、とノードの数が遠い
<sem:triple xmlns:sem="http://marklogic.com/semantics">
<sem:subject>http://rdf.abbvienet.com/infrastructure/person/10740024</sem:subject>
<sem:predicate>http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager</sem:predicate>
<sem:object>http://rdf.abbvienet.com/infrastructure/person/10206242</sem:object>
</sem:triple>
のような文書の外観でトリプル。
select ?manager ?leaf (count(?mid) as ?distance) {
BIND(<http://rdf.abbvienet.com/infrastructure/person/10025613> as ?manager)
?leaf <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>* ?mid .
?mid <http://schemas.abbvienet.com/ontologies/infrastructure.owl#manager>+ ?manager .
}
group by ?manager ?leaf
order by ?manager ?leaf
これは15Sの周りに、でも私は見ています階層ツリーは、1つのまたは2つのレベルの深さの場合には、動作しますが、非常に遅いです。私は63,139このタイプのマネージャトリプルをデータベースに持っています。
'?manager'に対して1つのバインディングしかないので、' ORDER BY?leaf'でなければなりません。 – scotthenninger