2012-01-21 18 views
4

指定したカテゴリと指定されたキーを持つすべてのページを取得したい。私のクエリ:DBPedia SPARQLクエリで結果は返されるが、空である

PREFIX dbpedia: <http://dbpedia.org/> 
PREFIX dbpedia2: <http://dbpedia.org/property/> 
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 
PREFIX dcterms: <http://dublincore.org/2010/10/11/dcterms.rdf#> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
PREFIX grs: <http://www.georss.org/georss/point> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?page ?cat ?key ?value (lang(?value) as ?language) WHERE { 

    ?page dcterms:subject ?cat . 
    ?page ?key ?value . 

    FILTER(
    regex(?cat, "category:Amusement_parks_in_the_Netherlands") && 
    ?key = foaf:depiction 
) 

} 

しかし、結果はゼロです。参照:SNORQL query

http://dbpedia.org/page/Duinrell(条件に一致するため)少なくともこのページを返す必要があります。

アイデア?

答えて

6

クエリにはいくつか問題があります。まず第一に、URIを比較するときには正規表現を使用しないでください。代わりに:

regex(?cat, "category:Amusement_parks_in_the_Netherlands") 

使用:

?cat = <http://dbpedia.org/resource/category:Amusement_parks_in_the_Netherlands> 

第二:ダブリンコアのためのあなたの名前空間接頭辞が間違っているようです。プロパティdcterms:subjectを照会しており、照会内でプレフィックスdctermsがネームスペースhttp://dublincore.org/2010/10/11/dcterms.rdf#にマップされています。ただし、DBPediaの実際のプロパティはhttp://purl.org/dc/terms/subjectなので、ネームスペースの接頭辞はhttp://purl.org/dc/terms/にマップする必要があります。

+0

ありがとうございます。 ?cat = ... expressionは、?catに複数の値がある場合にも機能しますか?各ページは複数のカテゴリを持つことができます。 – Alp

+1

@Alpの場合、クエリパターンは、カテゴリの少なくとも1つがその特定の値を持つページと一致します。 –

+0

それは魅力のように動作します! – Alp