このクエリがあります。名前に「South」が含まれているものと一致します。foaf:name
しかし、私はまさに「南」のものだけが欲しいのです。
SELECT Distinct ?TypeLabel
WHERE
{
?a foaf:name "South" .
?a rdf:type ?Type .
?Type rdfs:label ?TypeLabel .
}
このクエリがあります。名前に「South」が含まれているものと一致します。foaf:name
しかし、私はまさに「南」のものだけが欲しいのです。
SELECT Distinct ?TypeLabel
WHERE
{
?a foaf:name "South" .
?a rdf:type ?Type .
?Type rdfs:label ?TypeLabel .
}
少し遅いですがとにかく...私はこれがあなたが探しているものだと思います:
SELECT Distinct ?TypeLabel Where {
?a foaf:name ?name .
?a rdf:type ?Type .
?Type rdfs:label ?TypeLabel .
FILTER (?name="South"^^xsd:string)
}
結果を制限するために、xsdタイプでFILTERを使用できます。これがお役に立てば幸いです...乾杯!
(これに対するコメントからの脱却)
問題はデータであり、クエリではありません。次のクエリを使用する場合:
SELECT DISTINCT ?a
WHERE {
?a foaf:name "Imran Khan" .
}
あなたは(あなたが言うように)「イムラン・カーン・ニアジー」を見つけます。しかし、 Imran Khanのdbpediaエントリを見ると、次の両方が表示されます。
foaf:name "Imran Khan Niazy"
foaf:name "Imran Khan"
これは、RDFがプロパティの繰り返し使用を許可しているためです。
「サウス」にも同じ問題がありました(アルバム、アーティスト、そして奇妙なことに「サウスルートン」)。これらは、正確性または曖昧さ回避の目的で、おなじみの名前( "Imran Khan"、 "South")とより正確な名前( "Imran Khan Niazy"、 "South(album)")の両方がある場合です。
より正確な一致が必要な場合は、タイプを追加してみてください(たとえば、アルバムの場合はhttp://dbpedia.org/ontology/MusicalWork )。
DBpediaはWikipediaから派生しており、抽出プロセスは完全ではないことに注意してください。これは不安定なデータが存在する領域であるため、クエリが間違っていると思い込まないでください。
そのクエリは、South
単にSouth
部分文字列として含まれているリテラルではなく、リテラルと正確に一致する必要があります。部分一致の場合はFILTER
、たとえばREGEX()
。あなたのクエリエンジンはこの意味で壊れています-あなたが使っているクエリエンジンはどれですか?