首页 > 解决方案 > dbpedia 中的自由文本搜索

问题描述

我想对 dbpedia 使用自由文本搜索,我正在尝试在 W3C 网站上找到的查询:https ://www.w3.org/2009/Talks/0615-qbe/

如果我通过将其注释掉来尝试不带 bif: 前缀的查询,则会收到查询下方显示的错误:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>        
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
# PREFIX bif: <http://www.openlinksw.com/schemas/bif#>
SELECT ?lbl ?est
WHERE {
  ?country rdfs:label ?lbl .
  FILTER(bif:contains(?lbl, "Republic")) .
  ?country a type:Country108544813 ;
      prop:establishedDate ?est .
  FILTER(?est < "1920-01-01"^^xsd:date) .
}

错误:第 9 行,解析错误:扩展 QName“bif:contains”时未定义“bif”的命名空间映射。[条件类型:sparql-lexer-error-namespace-mapping-not-defined]

好吧:这是有道理的,你确实需要定义你的命名空间。因此,让我再次使用我在 Virtuoso 网站(以及其他各种地方)上找到的 bif: 前缀进行相同的查询

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>        
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
PREFIX bif: <http://www.openlinksw.com/schemas/bif#>
SELECT ?lbl ?est
WHERE {
  ?country rdfs:label ?lbl .
  FILTER(bif:contains(?lbl, "Republic")) .
  ?country a type:Country108544813 ;
      prop:establishedDate ?est .
  FILTER(?est < "1920-01-01"^^xsd:date) .
}

现在我得到一个不同的错误:似乎 bif: 命名空间是 Virtuoso 的受保护名称

在此处输入图像描述

所以看来我不能忍受bif:或没有:bif。有没有人见过这个错误?谢谢。

顺便说一句:我真的不太关心 bif:我真正想要的是对 dbpedia 进行自由文本查询。因此,欢迎任何替代方案。是的:关于 SO 有较早的问题,但请注意,这些答案中的每一个都包含 bif: 以及。

稍后添加:所以只是为了确保我将 bif: 更改为 bof: 现在我收到一个新错误,表明 contains 不再是有效的运算符。见下文。所以无论如何:我想我从这里开始唯一关心的是:你如何对 dbpedia 进行自由文本查询:-)

在此处输入图像描述

标签: sparqldbpediavirtuoso

解决方案


bif:是 Virtuoso 内置的,用于“内置功能”。

您正在使用某种 SPARQL 预解析器,而不是直接针对 SPARQL 端点,因此您确实需要在查询中定义前缀。大多数这样的预解析器都会做正确的事情,如果你只是——

PREFIX  bif:  <bif:>

或者,您可以使用以下bif:contains功能更改您的查询 -

FILTER(bif:contains(?lbl, "Republic"))

-- 使用 SPARQL 正则表达式 --

FILTER regex(?lbl, "Republic")

推荐阅读