[英]Case insensitive URI matching in SPARQL
我希望有人可以幫助我編寫SPARQL查詢。 我可能會誤解某些術語,我不是SPARQL專家。
我正在嘗試從Nobel獎品SPARQL端點( data.nobelprize.org/sparql )獲得一些信息,以檢索謂詞的標簽,其中對象的標簽與某個字符串匹配。
因此,例如,如果我使用帶有字符串'Robert Burns Woodward'的objectLabel搜索對象,我應該收到許多結果,包括:
predicateLabel, objectLabel "Laureate","Robert Burns Woodward" "LaureateAward","Chemistry 1965, Robert Burns Woodward" "AwardFile","Nobel Lecture Robert Burns Woodward"
我已經在下面編寫了應該工作的SPARQL,但是它沒有檢索到任何結果:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?predicateLabel ?objectLabel
WHERE
{
?subject ?predicate ?object .
?object rdfs:label ?objectLabel .
?predicate rdfs:label ?predicateLabel .
FILTER contains(?objectLabel, 'Robert Burns Woodward')
}
原因是謂詞URI與鏈接到相應rdfs:label屬性的URI的情況不同。
例如,謂詞
http://data.nobelprize.org/terms/nobelPrize
用於將獲獎者與其獲得的獎品聯系起來。 例如:
子: http : //data.nobelprize.org/resource/laureate/231
pred: http : //data.nobelprize.org/terms/nobelPrize
obj: http : //data.nobelprize.org/resource/nobelprize/Chemistry/1965
但是,rdfs:label鏈接到
http://data.nobelprize.org/terms/NobelPrize
不
http://data.nobelprize.org/terms/nobelPrize
請注意,兩者之間大小寫不同-第二個URI在nobelprize中具有小寫字母“ n”,而第一個URI使用大寫字母N。
所以我的問題是,SPARQL中是否可以使URI大小寫不敏感,以使http://data.nobelprize.org/terms/NobelPrize與http://data.nobelprize.org/terms/nobelPrize匹配? 我知道可以使用FILTER regex或FILTER contains來搜索不區分大小寫的字符串,但是我不知道URI是否可行。
我認為您正在以錯誤的方式進行處理。 該數據源有兩個單獨的概念。 如本體中所見,拼寫為NobelPrize
的資源表示諾貝爾獎的類別 。 拼寫為nobelPrize
的資源是nobelPrize
一種資源,即獲獎者與特定的諾貝爾獎之間的關系 。
換句話說:它們是有區別的,故意如此,並且您不應該嘗試通過不區分大小寫的匹配將它們轉變為同一事物。
nobelPrize
屬性在SPARQL端點中沒有標簽nobelPrize
,因為根據本體文件,它應該有一個標簽。 但是,鑒於它沒有標簽,您只能回到謂詞URI本身,這有點困擾。 您可以選擇使用strafter
名稱空間部分來縮短它,如下所示:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT (strafter(str(?predicate), "http://data.nobelprize.org/terms/") as ?predicateLabel) ?objectLabel
WHERE
{
?subject ?predicate ?object .
?object rdfs:label ?objectLabel .
FILTER contains(?objectLabel, 'Robert Burns Woodward')
}
一種替代方案(在某種程度上更復雜但在概念上更加整潔)是,您無需返回謂詞的名稱,而是返回謂詞所指向的對象的類型的名稱:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?objectClassName ?objectLabel
WHERE
{
?subject ?predicate ?object .
?object a ?objectClass .
?objectClass rdfs:label ?objectClassName .
?object rdfs:label ?objectLabel .
FILTER contains(?objectLabel, 'Robert Burns Woodward')
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.