2017-02-20 126 views
0

我的本体论IRI是“http://mycompany.com/ontologies/quality”。我想找到“查找与给定对象的属性(hasSolution)所有科目”为什么此SPARQL查询生成错误

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) 

回答

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子句中删除?谓词三元组。