在sparql查询中使用MINUS关键字时出现词法错误

时间:2014-04-02 17:47:50

标签: sparql jena ontology triples

我在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"

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

1 个答案:

答案 0 :(得分:3)

您的第一和第二个查询(假设您已定义:前缀)是合法的。您可以查看sparql.org's query validator。例如,这些都是合法的:

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的变量)。但是,如果没有看到您的代码,这将难以诊断。您也可能以某种方式错误地解析查询。