1

ほとんど理解していない dbpedia と sparql と呼ばれるものを使用して、 rdf:type person のすべての dpbedia エントリを抽出したいと思います。

私は次の方法でほとんど成功しました(オフセットを変更します)。より良い方法はありますか?基本的に、英語のウィキペディアから人々のすべての例を取得したいと思います。

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?name ?birth ?description ?person WHERE {
     ?person dbo:birthDate ?birth .
     ?person foaf:name ?name .
     ?person rdfs:comment ?description .
     FILTER (LANG(?description) = 'en') .
}
ORDER BY ?name
OFFSET 100
4

1 に答える 1

2

おおよそ正しい方法で行っていますが、結果をページ付けできるように OFFSET と LIMIT を使用する必要があります (もちろん、OFFSET と LIMIT を有効にするには、ORDER BY を使用し続ける必要があります) ただし、必要以上のプレフィックスを使用しています。使用するのは 3 つだけなので、宣言する必要があるのはその 3 つだけです。最後に、タイプPersonのものを特別に要求できます。それらの 1649645 があります。

select (count(*) as ?n) where {
 ?person a dbo:Person 
}

1649645

最後に、文字列の言語を=ではなくlangMatchesでチェックする必要があります。インタラクティブに操作できる Web サービスでは、いくつかのプレフィックスが定義されているので、通常はそれらに従います。また、英語の名前のみを選択し、おそらく URI で並べ替えることもできます。名前は常に完全であるとは限らないためです。

select ?person ?name ?birth ?description where {
  ?person a dbo:Person ;
          foaf:name ?name ;
          dbo:birthDate ?birth ;
          dbo:abstract ?description
  filter langMatches(lang(?name),'en')
  filter langMatches(lang(?description),'en')
}
order by ?person
offset 100
limit 50

SPARQL の結果

もちろん、大量のデータが必要な場合は、ダウンロードしてローカルに保存することもできます。DBpedia 2014 ダウンロードを参照してください。

于 2015-02-23T13:59:56.017 に答える