2017-08-03 7 views
-1

特定のカテゴリの異なるネストされたサブカテゴリ(例:履歴)にある記事(例:要約、サムネイル)に関する情報を抽出する必要があります。 SPARQLクエリを使用してこれを行うにはどうすればよいですか?または、いくつかのSPARQLサブクエリを使用してPythonでこれを行う最適な方法は何ですか?dbPediaを使用してサブカテゴリ内のすべての記事を再帰的に抽出するには?

+0

たとえば、私は履歴カテゴリに興味があります。このカテゴリにはサブカテゴリがあり、各サブカテゴリにはサブカテゴリなどがあります。そして私は、Historyのサブカテゴリの異なるレベルからすべての記事を検索したいと思います。 PREFIXのDCT: SELECT X?{X DCT:被験者 } – sermal

+0

あなたの質問を編集し、質問に記入してください(そこに書式設定されたMarkdown) - コメントではありません – AKSW

+1

サブカテゴリは 'skos:broader' respを使って取り出すことができます。 'skos:narrower'関係です。カテゴリ階層が大きすぎると高価すぎる可能性があるので、トラバーサルの深さを制限する必要があります。 – AKSW

答えて

4

?scは、「履歴」よりも再帰的(または推移的)に狭い3つのサブカテゴリをすべて取得します。これはVirtuosoが理解できる{minDepth,maxDepth}という表記で実装されています。他のtriplestoresはそれを理解していないかもしれません。また、IRIでトリプルを維持しながら、文字列リテラルに英語のフィルタリングを追加しました?o

SELECT ?sc ?lab ?p ?o 
WHERE { 
    ?sc skos:broader{1,3} <http://dbpedia.org/resource/Category:History> . 
    optional {?sc rdfs:label ?lab } . 
    ?sc ?p ?o 
    filter (lang(?lab) = "en") 
    filter ((lang(?o) = "en") || isURI(?o)) 
} 

さらに、このクエリは、?scのすべてのトリプルを対象として報告します。私は抄録(述語として<http://dbpedia.org/ontology/abstract>を使用していますか?)またはサムネイル関係を見ませんでした。あなただけdistinct ?p、あるいはカウントを投影していることを確認することができます

SELECT ?p (count(?p) as ?pcount) 
WHERE { 
    ?sc skos:broader{1,3} <http://dbpedia.org/resource/Category:History> . 
    optional {?sc rdfs:label ?lab } . 
    ?sc ?p ?o 
    filter (lang(?lab) = "en") 
    filter ((lang(?o) = "en") || isURI(?o)) 
} 
group by ?p 
order by desc(?pcount) 

あなたはより深い再帰を行う場合は、あなたには、いくつかの要約を見つけるでしょう。しかし、深い再帰は遅く、私は概念的に何かを欠いているように感じる。

SELECT * 
WHERE { 
    ?sc skos:broader{5,7} <http://dbpedia.org/resource/Category:History> . 
    ?sc <http://dbpedia.org/ontology/abstract> ?a 
} 
+1

本当に良い答えです。あるコメントでは、プロパティパスで 'property {n、m}'を使うのは非標準SPARQL構文であり、Virtuosoの拡張だけであることに言及してください。 [投稿フェーズ](https://www.w3.org/TR/sparql11-property-paths/)で議論されましたが、残念ながら正式な[W3C勧告](https://www.w3.org/TR/sparql11-query /#propertypaths)。乾杯! – AKSW

+0

ありがとう!最初のクエリは非常に目標に近いです。 "en"にフィルタを追加するにはどうすればよいですか?列 "p"には "@en"という値が含まれていますが、最後の列には現在異なる言語の行が含まれています。 – sermal

+0

フィードバックいただきありがとうございます。 「p」列に「en」の値が含まれているとはどういう意味ですか? pは述語であり、言語型のリテラルではありません。私は?labと?oのフィルタリングを表示する答えを更新しました。これはリテラルとは対照的に、oがIRIであるscとpの関係を隠すことに注意してください。たとえば、サムネイル画像のURLを非表示にすることがあります。 –

関連する問題