0

我在 Jena 框架的 SPARQL 中针对本体运行了以下查询(本体中存在 wasBornIn 谓词)

select ?p where 
  {
   ?s ?p ?o FILTER NOT EXISTS { ?s :wasBornIn ?o }
  }

select ?p where 
  { 
   { ?s ?p ?o } MINUS { ?s :wasBornIn ?o } 
  }

对于第一个查询,我收到以下错误:

null
Error: Lexical error at line 7, column 21.  Encountered: " " (32), after : "NOT"

null
Error: Encountered "<EOF>" at line 5, column 16.
Was expecting:
"{" ...

对于第二个查询,我收到类似的错误:

null
Error: Lexical error at line 5, column 38.  Encountered: " " (32), after : "MINUS"

这两个查询似乎都是正确的,我不知道为什么会出现这些错误。

4

1 回答 1

3

您的第一个和第二个查询(假设您已经:定义了前缀)是合法的。您可以使用sparql.org 的查询验证器进行检查。例如,这些都是合法的:

prefix : <>

select ?p where 
  {
   ?s ?p ?o FILTER NOT EXISTS { ?s :wasBornIn ?o }
  }
prefix : <>

select ?p where 
  { 
   { ?s ?p ?o } MINUS { ?s :wasBornIn ?o } 
  }

但是,有些东西您没有向我们展示;您提到第 7 行(第一行)有错误,但您显示的查询没有 7 行。不仅如此,我不确定您如何在第 5 行遇到 EOF,然后仍然有第 7 行出现另一个错误。实际构建查询的代码可能有所不同。也许你有这样的事情:

"?s ?p ?o" + 
"FILTER NOT EXISTS { ?s :wasBornIn ?o }"

在这种情况下,你最终会得到

?s ?p ?oFILTER NOT EXISTS { … }

(即,使用名为 的变量?oFILTER)。但是,如果没有看到您的代码,这将很难诊断。您也可能以某种方式错误地解析查询。

于 2014-04-02T18:48:48.063 回答