簡體   English   中英

SPARQL中不區分大小寫的URI匹配

[英]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/NobelPrizehttp://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM