2012-01-20 94 views
8

基本上我有一個查詢(如下所示),它可以有效地工作。但是,我希望我的搜索更精確,其中標籤是實際字符串'yago'而不是包含字符串'yago'。如果可能的話,我想盡量不使用過濾器,因爲我認爲使用FILTER可以讓查詢DBpedia的時間更長。DBpedia SPARQL查詢特定的rdfs:標籤

SELECT ?uri ?label 
WHERE { 
?uri rdfs:label ?label. 
?label bif:contains "'yago'" . 
} 

回答

13

你可以嘗試做以下,如果你想這樣做,不帶過濾器:

SELECT ?uri ?label 
WHERE { 
?uri rdfs:label "Yago"@en . 
?uri rdfs:label ?label 
} 

我不知道,雖然它,如果它是不是與過濾器相應的查詢快得多:

SELECT ?uri ?label 
WHERE { 
?uri rdfs:label ?label . 
filter(?label="Yago"@en) 
} 
+2

我相信您的第一個查詢具有重複的三重模式。 –

+1

謝謝第二個查詢更有效率不重複 – Sam

3

對原始響應的重要更正。如果你有一個精確匹配,與語言的標籤,那麼下面的工作:

SELECT ?uit ?label 
WHERE { 
    ?uri rdfs:label "Yago"@en . 
} 

但是,如果精確匹配可能不會使用你想要的,SPARQL支持標準的正則表達式:

SELECT ?uit ?label 
WHERE { 
    ?uri rdfs:label ?label . 
    FILTER regex(str(?label), "yago", "i") 
} 

......無論字符大小寫如何匹配字符串,並且您可以播放通常的正則表達式遊戲以獲得所需的字符串匹配。 (當然,如果符合所需的匹配標準,其他字符串函數(如STRSTARTS和STRENDS)將更有效。)