DBpedia SPARQL查询特定的rdfs:标签

Sam*_*Sam 10 sparql jena dbpedia arq

基本上我有一个有效工作的查询(如下所示).但是,我希望我的搜索更准确,标签是实际字符串'yago',而不是包含字符串'yago'.如果可能的话,我想尝试不使用过滤器,因为我认为使用FILTER会使查询DBpedia需要更长的时间.

SELECT ?uri ?label 
WHERE {
?uri rdfs:label ?label.
?label bif:contains "'yago'" .
}
Run Code Online (Sandbox Code Playgroud)

ip.*_*ip. 16

如果您想在没有过滤器的情况下执行此操作,可以尝试执行以下操作

SELECT ?uri ?label
WHERE {
?uri rdfs:label "Yago"@en .
?uri rdfs:label ?label
}
Run Code Online (Sandbox Code Playgroud)

我不确定它是否比使用过滤器的相应查询快得多:

SELECT ?uri ?label
WHERE {
?uri rdfs:label ?label .
filter(?label="Yago"@en)
}
Run Code Online (Sandbox Code Playgroud)

  • 我相信你的第一个查询有三重模式重复. (2认同)

sco*_*ger 6

对原始响应的关键修正.如果您与语言标签完全匹配,则以下内容将起作用:

SELECT ?uit ?label
WHERE {
   ?uri rdfs:label "Yago"@en .
}
Run Code Online (Sandbox Code Playgroud)

但是,如果完全匹配可能没有使用您想要的,SPARQL支持标准正则表达式:

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

...无论字符大小写都匹配字符串,你可以玩通常的正则表达式游戏来获得所需的字符串匹配.(当然,其他字符串函数,如STRSTARTS和STRENDS,如果满足所需的匹配条件,效率会更高.)