Как сделать запрос в Sesame openrdf с помощью SPARQL в Android?

Я пытаюсь запросить онтологию с помощью Sesame API. Обычный способ запроса невозможен, так как он дает UnsupportedQueryLanguageException. Фабрика недоступна для языка запросов SPARQL.

В конце концов я запрашиваю:

SPARQLParser parser=new SPARQLParser();
ParsedQuery query=parser.parseQuery(queryString,null);

StatementPatternCollector collector=new StatementPatternCollector();
query.getTupleExpr().visit(collector);

List<StatementPattern> patterns=collector.getStatementPatterns();

Когда я показываю результат, он не содержит никаких утверждений; как я могу отобразить операторы?


person user3556249    schedule 02.05.2014    source источник
comment
что ты уже испробовал? Без некоторого кода для контекста неясно, о чем вы спрашиваете. Обычный способ запроса: что это?   -  person Joshua Taylor    schedule 02.05.2014
comment
Из интереса: как вы придумали этот код? Причина, по которой я спрашиваю, заключается в том, что я помню, как другие люди делали что-то подобное, поэтому мне интересно, есть ли где-нибудь в Интернете учебник, который ошибочно рекомендует этот подход для запросов...   -  person Jeen Broekstra    schedule 02.05.2014
comment
Как сказал Джошуа в своем ответе: этот код не выполняет запрос, он просто анализирует строку запроса. Это совершенно неправильный подход. Проблема, с которой вы столкнулись, связана с конфигурацией пути к классам, а не с проблемой программирования, вместо этого вы должны сосредоточиться на ее решении.   -  person Jeen Broekstra    schedule 04.05.2014


Ответы (1)


Если вы получаете UnsupportedQueryLanguageException, возможно, ваш путь к классам настроен неправильно. Sesame загружает вещи через JDK ServiceLoader, поэтому вы, вероятно, пропустили файл jar, содержащий материал SPARQL.

Что касается вашего фрагмента кода, это не выполнение запроса SPARQL. Это обход алгебры проанализированного запроса и сбор всех BGP, содержащихся в запросе. Я не думаю, что это то, что вы имели в виду.

Дважды проверьте свой путь к классам, чтобы убедиться, что у вас есть соответствующие банки с кунжутом, и повторите попытку обычного способа запроса к репозиторию кунжута.

person Michael    schedule 02.05.2014
comment
Учитывая конкретное сообщение об ошибке в исключении, я бы сказал, что OP отсутствует либо sesame-queryparser-sparql-<version>.jar, либо sesame-queryparser-api-<version>.jar, по крайней мере. Несколько общих советов: используйте инструмент управления зависимостями для импорта ваших библиотек Sesame, например Maven или Ivy. - person Jeen Broekstra; 03.05.2014
comment
Да, я получил этот код онлайн. Обычный способ, который я сказал, - это простой способ сделать это как TupleQuery tuplequery=con.prepareTupleQuery(QueryLanguage.SPARQL, queryString); Результат TupleQueryResult=tuplequery.evaluate(). - person user3556249; 03.05.2014
comment
Я делаю это для приложения для Android. Если вы помните, я задаю аналогичный вопрос для загрузки файла. Эта проблема была решена путем написания TurtleParser parser=new TurtleParser() и последующего использования этого парсера в коде. После этого у меня возникла проблема с Query, и я подумал, что ее можно решить аналогичным образом. - person user3556249; 03.05.2014
comment
Теперь я использовал Maven в Eclipse для своего приложения для Android, но теперь не могу запустить ClassNotFoundException в основной активности. - person user3556249; 03.05.2014
comment
@user3556249 user3556249, если бы вы решили этот другой вопрос, не могли бы вы добавить свое решение на этот вопрос в качестве ответа? Таким образом, другим людям с похожей проблемой будет легче ее найти. Спасибо. - person Jeen Broekstra; 04.05.2014
comment
хорошо, но я все еще не уверен, правильно ли это, как я сделал. Это было причиной того, что это не было добавлено. Подскажите, пожалуйста, решение этой проблемы с запросом. Я нашел похожий вопрос и ваш ответ на stackoverflow.com/ вопросов/14500599/, но в моем случае SailTupleQuery() вызывает проблемы. - person user3556249; 04.05.2014