2016-07-12 10 views
0

私はDBpediaのからすべての数学者を取得したいので、私はDBpedia's SPARQL serviceため、このクエリを書いた:パスからノードを除外する方法は?

SELECT DISTINCT ?person 
{ 
    ?person dct:subject ?category. 
    ?category skos:broader* dbc:Mathematicians. 
} 

これに伴う問題は、カテゴリMathematiciansが原因その後、ユークリッドのすべてが含まれdbc:Euclid、などのカテゴリーに、汚染されているということですジオメトリ。私はそれがクエリが失敗する原因となるこれらのカテゴリだと信じています:

Virtuoso 42000エラーTN ...:過渡的な一時メモリの1000000000バイトを超えました。検索を制限したり、プールを増やすには、t_distinct、t_maxまたはそれ以上のT_MAX_memoryオプションを使用してください。

多くの問題カテゴリはdbc:Wikipedia_categories_named_after_mathematiciansです。

skos:broader*パスにあるこれらのカテゴリを無視して、エラーをなくす方法はありますか?

+1

私はここでの問題は、ウィキペディアのカテゴリに基づいているDBpediaのカテゴリ階層がサイクルを含むことができることだと思い、エラーの原因であるかもしれないすなわち - これはいけないが、確かに起こる – AKSW

答えて

0

あなたはあなたがそれらをフィルタリングすることで含めるようにしたくないカテゴリを一覧表示することができます:

SELECT DISTINCT ?person 
{ 
    ?person dct:subject ?category. 
    ?category skos:broader* dbc:Mathematicians. 
    FILTER (?category NOT IN (dbc:Euclid)) 
} 

をしかしヴィルトゥオーゾは、まだ「推移を排出、skos:broader階層を横断する必要があるため、それがエラーを削除しません。ヒープメモリ。他のアプローチには、特定のカテゴリを選択すること、または階層の一部を移動することが含まれる。特定のカテゴリがUNIONステートメントを使用することができますが、VALUESショートカットが簡単な構文である

SELECT DISTINCT ?person 
{ 
    VALUES ?category {dbc:Mathematicians dbc:Mental_calculators dbc:Lists_of_mathematicians} 
    ?person dct:subject ?category. 
} 

階層の一部を照会するために、あなたはいくつかのプロパティパス式を使用することができます。この1は、両親や祖父母を取得します:

SELECT DISTINCT ?person 
{ 
    ?person dct:subject ?category. 
    ?category skos:broader | (skos:broader/skos:broader) dbc:Mathematicians. 
    # filter as desired - FILTER (?category NOT IN (dbc:Euclid)) 
} 
関連する問題