2

この SPARQL クエリを使用して、DBpedia からすべてのタイプを取得しようとしています。

select ?type {
   ?type a owl:Class .
}

ここで、クエリによって返される各型の英語のラベルも含めたいと思います。クエリに何を追加する必要がありますか?

4

2 に答える 2

23

これは、DBpedia から任意の情報を取得する方法についてもう少し学ぶ良い機会です。最初のクエリ (制限を追加) は次のとおりです。

select ?type {
   ?type a owl:Class .
}
limit 10

SPARQL の結果

結果の 1 つはhttp://dbpedia.org/ontology/Animalで、実際に Web ブラウザーでアクセスすると、対応するページにそのリソースのプロパティがすべて表示されます。についてanimalは、それほど多くはありませんが、私たちが興味を持っているのは

rdfs:label  Tier
rdfs:label  animal
rdfs:label  animal
rdfs:label  žival
rdfs:label  동물

ここで関心のあるプロパティはrdfs:labelであるため、クエリを次のように拡張できます。

select ?type ?label {
   ?type a owl:Class .
   ?type rdfs:label ?label .
}
limit 10

セミコロンを使用して、実際には少し省略できます。

select ?type ?label {
   ?type a owl:Class ;
         rdfs:label ?label .
}
limit 10

SPARQL の結果

ただし、そのクエリは、それぞれに対して複数の結果を返します?type。実際、 ごと?labelに 1 つなので、次のような結果が得られます。

http://dbpedia.org/ontology/Animal  "Tier"@de
http://dbpedia.org/ontology/Animal  "animal"@en

ラベルは単なる文字列ではなく、言語タグを含む RDF リテラルであることに注意してください。SPARQL では、関数を使用して RDF リテラル (ある場合) の言語タグを取得できlangます。"en"言語タグを演算子と比較することは可能です=が、より堅牢な解決策は を使用することですlangMatches

filter langMatches( lang(?title), "FR" )

を使用して、次の両方の値を選択して検索できますが?titlefilter( lang(?title) = "fr" )最初の値のみを検索します。

"Cette Série des Années Soixante-dix"@fr
"Cette Série des Années Septante"@fr-BE

langMatches、lang、およびフィルターを使用して、クエリをもう一度更新して、

select ?type ?label {
   ?type a owl:Class ;
         rdfs:label ?label .
   filter(langMatches(lang(?label),"EN"))
}
limit 10

SPARQL の結果

DBpedia タイプとその英語ラベルを取得します。

于 2013-09-11T12:51:40.020 に答える