6

このクエリがあります。名前に「South」が含まれているものと一致します。foaf:nameしかし、私はまさに「南」のものだけが欲しいのです。

SELECT Distinct ?TypeLabel 
WHERE
{
    ?a     foaf:name   "South" .
    ?a     rdf:type    ?Type .
    ?Type  rdfs:label  ?TypeLabel .
}
4

3 に答える 3

5

少し遅いですがとにかく...私はこれがあなたが探しているものだと思います:

SELECT Distinct ?TypeLabel Where { 
?a foaf:name ?name . 
?a rdf:type ?Type . 
?Type rdfs:label ?TypeLabel . 
FILTER (?name="South"^^xsd:string)
}

結果を制限するために、xsdタイプでFILTERを使用できます。これがお役に立てば幸いです...乾杯!

于 2010-07-21T16:50:13.250 に答える
4

(これに対するコメントからの脱却)

データの問題

問題はデータであり、クエリではありません。次のクエリを使用する場合:

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から派生しており、抽出プロセスは完全ではないことに注意してください。これは不安定なデータが存在する領域であるため、クエリが間違っていると思い込まないでください。

于 2010-04-07T13:37:16.843 に答える
3

そのクエリは、South単にSouth部分文字列として含まれているリテラルではなく、リテラルと正確に一致する必要があります。部分一致の場合はFILTER、たとえばREGEX()。あなたのクエリエンジンはこの意味で壊れています-あなたが使っているクエリエンジンはどれですか?

于 2010-04-07T11:14:56.060 に答える