8

その点で、私はSPARQLとウィキデータに不慣れです。ユーザーが Wikidata で人物を検索できるようにしようとしていますが、人物のみを検索できるようにしています。バイクのブランドなどの結果が表示されることは望んでいません。

だから私は次のクエリでここで遊んでいました:

SELECT ?person ?personLabel WHERE {
  ?person wdt:P31 wd:Q5.
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en".
    ?person rdfs:label ?personLabel .
  }
  FILTER regex(?personLabel, "Albert", "i").
}
LIMIT 10

これは最終的に結果を返しますが、私が望むほど速くはありません。これよりも大きな名前で上記のクエリを実行すると、タイムアウトになることにも注意してください。

ここにあるすべてのサンプル クエリは、クエリ元のエンティティが既にあることを前提としています。私の場合、特定の名前の人を照会しようとしているので、何もする必要はありません。私が使用しているデータベースの内部動作について、おそらく間違った仮定をしているのでしょうが、それらが何であるかはわかりません。

何か案は?

4

3 に答える 3

7

フィルターの代わりにラベルを使用してみることができます:

SELECT ?item ?itemLabel WHERE {
  ?item wdt:P31 wd:Q5.
  ?item ?label "Einstein"@en .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

ウィキデータ クエリ サービスで参照してください

しかし、検索にワイルドカードを使用できるかどうかはわかりません。

于 2016-09-29T19:42:56.357 に答える