1

次の SPARQL クエリを使用して、フランスのローヌ県を検索しようとしています。

SELECT * WHERE {
  ?x rdfs:label "Rhone"@en.
  ?x rdf:type dbpedia-owl:Place.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (LANGMATCHES(LANG(?abstract), 'en'))
}

DBPEDIA リソースは次のとおりです: http://dbpedia.org/page/Rh%C3%B4ne_ (部門)

問題は、部門 (または州) ではなく、ローヌ川を検索し続けることです。rdf:type を PopulatedPlace または Settlement に変更すると、検索で何も見つかりません。

「*」または「?」を使用することは可能ですか? 次のような文字を使用して、検索文字列を広げます。

「*ローヌ*」

次のように:

SELECT * WHERE {
  ?x rdfs:label "*Rhone*"@en.
  ?x rdf:type dbpedia-owl:Settlement.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (LANGMATCHES(LANG(?abstract), 'en'))
}

次に、次のように、1 つのクエリで複数のフィルターを使用しても問題ないと思います。

SELECT * WHERE {
  ?x rdfs:label "Rhone"@en.
  ?x rdf:type dbpedia-owl:Place.
  ?x rdf:type dbpedia-owl:PopulatedPlace.
  ?x rdf:type dbpedia-owl:Settlement.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (LANGMATCHES(LANG(?abstract), 'en'))
}
4

1 に答える 1

4

はい、ワイルドカードを使用して検索文字列を作成できます。コンテンツ内の任意の場所に文字列 "Rhone" を含むFILTER文字列に一致する正規表現に文字列を一致させることができます。FILTER (regex(?label, "Rhone"))これFILTERにより、クエリの実行が遅くなる可能性があります。

ただし、部門のラベルは「ローヌ」であるため、これは必要なリソースを返しません。

任意の文字のワイルドカード文字は.(ピリオド) です。したがって、「Rhône」のスペルがわからず、ラベルのどこかに表示したい場合は、次のように使用できます。

SELECT * WHERE {
  ?x rdf:type dbpedia-owl:Place.
  ?x dbpedia-owl:abstract ?abstract.
  ?x rdfs:label ?label.
  FILTER (regex(?label, "Rh.ne") && LANGMATCHES(LANG(?abstract), 'en'))
}

正規表現のため、このクエリを完了するには非常に長い時間がかかります。このクエリを試したところ、タイムアウトしました。

dbpedia-owl:Place3 番目のクエリは有効ですが、 s とdbpedia-owl:PopulatedPlaces とdbpedia-owl:Settlements (同時に) であるリソースにのみ一致します。ローヌは3つすべてです。またはまたは
が必要な場合は、次を使用します。dbpedia-owl:Placedbpedia-owl:PopulatedPlacedbpedia-owl:Settlement

SELECT DISTINCT * WHERE {
  {
  ?x rdf:type dbpedia-owl:Place.
  ?x rdfs:label ?label.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (regex(?label, "Rhône") && LANGMATCHES(LANG(?abstract), 'en'))
  } UNION {
  ?x rdf:type dbpedia-owl:Settlement.
  ?x rdfs:label ?label.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (regex(?label, "Rhône") && LANGMATCHES(LANG(?abstract), 'en'))
  } UNION {
  ?x rdf:type dbpedia-owl:PopulatedPlace.
  ?x rdfs:label ?label.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (regex(?label, "Rhône") && LANGMATCHES(LANG(?abstract), 'en'))
  }
}
于 2013-01-23T22:34:40.713 に答える