2011-05-17 80 views
2

this site,例如,採取先SPARQL查詢,並作出非常類似的東西:無法執行對DBpedia中的特定SPARQL查詢:/

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX p: <http://dbpedia.org/property/> 
SELECT * 
WHERE { 
    ?name p:name <http://dbpedia.org/resource/Olivier_Theyskens> . 
} 

嘗試執行:here

而且我沒有得到任何結果。但是,請將查詢修改爲以下內容:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX p: <http://dbpedia.org/property/> 
SELECT * 
WHERE { 
    ?name p:name ?otherthing. 
} 

即使它們不是我想要的結果,我也會得到結果。

爲什麼沒有第一個查詢工作 - 我做錯了什麼? :/

回答

6

在這種情況下,我認爲這是因爲您要向後排列查詢語句。

的DBpedia中的資源(<http://dbpedia.org/resource/Olivier_Theyskens>)是實體主題?s),房地產(p:name)是屬性謂語?p),和該屬性的值(?name)是值或對象(?o)。

SPARQL希望所有的語句是{ ?s ?p ?o },但你似乎可以寫成{ ?o ?p ?s } ...

綜上所述,如果您嘗試此查詢 -

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX p: <http://dbpedia.org/property/> 
SELECT * 
WHERE 
    { 
    <http://dbpedia.org/resource/Olivier_Theyskens> p:name ?name . 
    } 

- - 你會得到the results I think you want

+0

Ahhhhh謝謝!隊友的歡呼聲! – Saew 2011-05-18 18:21:35

4

您的第一個查詢的問題是p:name鏈接到Literal,並嘗試匹配一個URI。

如果你希望你的第一個查詢工作,你必須使用一個鏈接到URI的財產http://dbpedia.org/ontology/artist,而不是字面:

SELECT * 
WHERE { 
    ?s <http://dbpedia.org/ontology/artist> <http://dbpedia.org/resource/The_Velvet_Underground> . 
} 

通知不同的命名空間的屬性<http://dbpedia.org/ontology/artist>這個命名空間包含ontology而不是property - ontology是用於對象屬性的一個。

+0

我看到...這很麻煩,因爲這個鏈接我從一個不同的數據庫中獲得,它只返回「http://dbpedia.org/resource/The_Velvet_Underground」。這是我從該數據庫獲得的唯一信息。所以基本上沒有解決我的問題? – Saew 2011-05-17 15:39:58

+1

對不起,我剛剛完成reedited這個問題,你必須使用一個不同的謂詞 2011-05-17 15:50:28

+0

[紅鯡魚!](http://www.urbandictionary.com/define.php?term =紅色+鯡魚) – TallTed 2011-05-18 19:00:26