DBpedia SPARQL查询特定的rdfs:label



基本上我有一个高效的查询(如下所示)。但是,我希望我的搜索更精确,其中标签是实际字符串"yago",而不是包含字符串"yago"。如果可能的话,我想尝试不使用过滤器,因为我认为使用FILTER会使查询DBpedia花费更长的时间。

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 ?uri ?label
WHERE {
   ?uri rdfs:label "Yago"@en .
}

但是,如果使用的可能不是您想要的匹配项,SPARQL支持标准regex:

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

它将匹配字符串,而不考虑字符大小写,并且您可以玩通常的regex游戏来获得所需的字符串匹配。(当然,如果STRSTARTS和STRENDS满足所需的匹配条件,那么其他字符串函数(如STRRSTARTS)将更有效。)

相关内容

  • 没有找到相关文章

最新更新