基本上我有一個查詢(如下所示),它可以有效地工作。但是,我希望我的搜索更精確,其中標籤是實際字符串'yago'而不是包含字符串'yago'。如果可能的話,我想盡量不使用過濾器,因爲我認爲使用FILTER可以讓查詢DBpedia的時間更長。DBpedia SPARQL查詢特定的rdfs:標籤
SELECT ?uri ?label
WHERE {
?uri rdfs:label ?label.
?label bif:contains "'yago'" .
}
基本上我有一個查詢(如下所示),它可以有效地工作。但是,我希望我的搜索更精確,其中標籤是實際字符串'yago'而不是包含字符串'yago'。如果可能的話,我想盡量不使用過濾器,因爲我認爲使用FILTER可以讓查詢DBpedia的時間更長。DBpedia SPARQL查詢特定的rdfs:標籤
SELECT ?uri ?label
WHERE {
?uri rdfs:label ?label.
?label bif:contains "'yago'" .
}
你可以嘗試做以下,如果你想這樣做,不帶過濾器:
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)
}
對原始響應的重要更正。如果你有一個精確匹配,與語言的標籤,那麼下面的工作:
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)將更有效。)
我相信您的第一個查詢具有重複的三重模式。 –
謝謝第二個查詢更有效率不重複 – Sam