11

次のSPARQLクエリは、英語以外の言語であるため、filter lang 'en'(クエリのフィルターを参照)に関係なく、必要な結果を取得できません。

クエリの結果:

"Никола́й Ива́нович Буха́рин"@en    "Никола́й Буха́рин"@en  "Nikolai Bukharin"@en
"Gamal Abdel Nasser Hussein"@en     "جمال عبد الناصر"@en    "Gamal Abdel Nasser"@en

DBpediaのページを見ると、英語版の名前があることがわかりましたが、フィルターが機能しない理由がわかりません。

誰かがそれを手伝ってくれる?

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/property/>
SELECT DISTINCT ?person ?birthname ?nameExact ?label
where {

     ?person rdf:type dbpedia-owl:Person .
     ?person rdfs:label ?label .
     OPTIONAL { ?person dbpedia-owl:birthName ?birthname . }
     OPTIONAL { ?person dbpprop:name ?nameExact . }

     FILTER (lang(?birthname) = 'en')
     FILTER (lang(?label) = 'en')
     FILTER (lang(?nameExact) = 'en')

}
LIMIT 300
4

2 に答える 2

9

接頭辞を付けるには、宣言とクエリで同じものを使用する必要があることに注意してください(dbo-> dbo、 -> ではありませdbodbpedia-owl

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>

SELECT DISTINCT ?person ?birthname ?nameExact ?label
where {

     ?person rdf:type dbo:Person .
     ?person rdfs:label ?label .
     OPTIONAL { ?person dbo:birthName ?birthname . }
     OPTIONAL { ?person dbp:name ?nameExact . }

     FILTER (lang(?birthname) = 'en')
     FILTER (lang(?label) = 'en')
     FILTER (lang(?nameExact) = 'en')

}

LIMIT 300
于 2016-05-09T22:15:24.443 に答える
7

言語タグはデータベース内の注釈です。フィルタは正しく機能します。enデータベース内の一部の値は、異なるスクリプトに含まれていても、注釈が付けられています。最も適切なプロパティを選択する独自のロジックを作成する必要があります。おそらく、rdfs:labelプロパティを使用して、角かっこで囲まれたものをすべて切り取ります(のように"Black Hawk (Sauk leader)"@en)。それはまともな結果を提供するようです。

また、それぞれのブロックFILTERs?birthnameを配置する必要があることに注意してください。そうしないと、オプションのプロパティを持たない一致が削除されてしまいます。?nameExact OPTIONAL

于 2012-09-11T18:22:01.790 に答える