我在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"
这两个查询似乎都是正确的,我不知道为什么我会收到这些错误。
答案 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
的变量)。但是,如果没有看到您的代码,这将难以诊断。您也可能以某种方式错误地解析查询。