2017-02-20 21 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子句中刪除?謂詞三元組。