さて、私は SPARQL を使用して dbpedia.org からデータをクエリする方法を学んでおり、dbpedia のhttp://dbpedia.org/snorql/を使用してクエリを実行しています。に基づいて MusicalArtists のリストを取得しようとしています。次のように、3 つのフィールドで同じ文字列を検索します。
SELECT ?subject
?artistRdfsLabel
?artistFoafName
?artistDbpedia2Name
WHERE {
?subject rdf:type <http://dbpedia.org/ontology/MusicalArtist> .
OPTIONAL { ?subject rdfs:label ?artistRdfsLabel . }
OPTIONAL { ?subject foaf:name ?artistFoafName . }
OPTIONAL { ?subject dbpedia2:name ?artistDbpedia2Name . }
FILTER ( str(?artistRdfsLabel) = "Stevie Nicks" ||
str(?artistFoafName) = "Stevie Nicks" ||
str(?artistDbpedia2Name) = "Stevie Nicks" )
}
LIMIT 10
これが機能するのは、「Stevie Nicks」には 3 つのフィールド (rdfs:label、foaf:name、dbpedia2:name) がすべて含まれているためです。しかし、3 つすべてを持たない別の MusicalArtist (「Depeche Mode」など) でクエリを実行しようとすると、結果が得られません。
BIND(COALESCE(?field,...,...) AS ?artistName) のようなさまざまなことを試して ?artistName でフィルタリングし、UNION も試しましたが、何も機能しないようです。誰かが私の SPARQL のやり方の誤りを指摘できますか? :)
ありがとう!ジェイソン