2017-02-20 15 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.