为什么此SPARQL查询会生成错误

时间:2017-02-20 23:56:26

标签: sparql owl

我的本​​体IRI是“http://mycompany.com/ontologies/quality”。我想找到“查找具有给定对象属性的所有主题(hasSolution)”

SELECT ?subject
    WHERE { ?subject hasSolution <http://mycompany.com/ontologies/quality#Issue> } LIMIT 10

导致此错误消息:

Caused by: org.openrdf.query.parser.sparql.ast.TokenMgrError: Lexical error at line 8, column 30.  Encountered: " " (32), after : "hasSolution"
    at org.openrdf.query.parser.sparql.ast.SyntaxTreeBuilderTokenManager.getNextToken(SyntaxTreeBuilderTokenManager.java:3499)
    at org.openrdf.query.parser.sparql.ast.SyntaxTreeBuilder.jj_ntk(SyntaxTreeBuilder.java:8861)

1 个答案:

答案 0 :(得分:2)

我怀疑这里的问题是你如何表达你的谓词 - 它应该是IRI形式,要么使用这样的尖括号:

SELECT ?subject
    WHERE { 
    ?subject <http://mycompany.com/ontologies/hasSolution> <http://mycompany.com/ontologies/quality#Issue> 
    } 
    LIMIT 10

或者,使用PREFIX语句给你这样的东西:

PREFIX  mycoont:  <http://mycompany.com/ontologies/>
SELECT  ?subject
WHERE   
{ 
?subject mycoont:hasSolution <http://mycompany.com/ontologies/quality#Issue>
}
LIMIT 10

或者,更一般地说,如果您不知道谓词IRI究竟是什么,您可以将其作为查询的一部分:

    SELECT ?subject ?predicate
    WHERE { 
    ?subject ?predicate <http://mycompany.com/ontologies/quality#Issue> 
    } 
    LIMIT 10

并探索结果 - 返回的?谓词值应表示为完整的IRI,或者,根据您的查询引擎,表示为某种形式的前缀:后缀排列。

在探索结果时,您应该能够将适当的值复制粘贴到WHERE子句的?谓词三元组中,并从SELECT子句中删除?谓词三元组。