#java #sparql #jena #dbpedia
#java #sparql #jena #dbpedia
Вопрос:
Я пытаюсь получить значение свойства genre в следующей ссылке dbpedia, используя sparql в jenahttp://dbpedia.org/page/Black_Sabbath
Но я понятия не имею, как получить пространство имен свойства из dbpedia (dbpedia-owl.genre в моем примере) Я не хочу это жестко кодировать. Кто-нибудь может мне помочь, плз…
Большое спасибо
Комментарии:
1. Почему вы не хотите использовать жесткий код? У generere свойства есть фиксированный URI, который не изменится, так почему бы просто не ввести этот URI в ваши запросы?
2. bcz иногда мне может потребоваться принять некоторые другие значения, такие как долгота, широта, страница, у которой разные URI, такие как Geo и FOAF … Если я начну жестко кодировать это, мне придется сохранить весь URL… Вот почему я не хочу это жестко кодировать…
Ответ №1:
Ваш первоначальный вопрос заставляет меня думать, что вам нужно что-то вроде Jena schemagen, которая автоматически сгенерирует коллекцию констант Java из идентификатора URI, используемого в онтологии. Однако схема DBpedia OWL довольно большая, и я думаю, что schemagen может не выдать полезного результата (я не пробовал). Если это так, вы всегда можете выбрать подмножество ресурсов и свойств, которые вас интересуют, и запустить schemagen для этого подмножества.
Однако ваш поясняющий комментарий, в котором вы говорите об использовании других свойств, таких как latitude и т.д., Заставляет меня думать, что вы задаете другой вопрос: а именно, как избежать того, чтобы определенные свойства были жестко закодированы в запросах SPARQL. Является ли это проблемой для вас, полностью зависит от проблемы, которую вы пытаетесь решить, и архитектуры вашего кода. Для программы вполне возможно поддерживать множество строк запроса SPARQL и просто выбирать ту, которая ей нужна для конкретной работы. Это обычная схема использования.
Однако существуют допустимые варианты использования, когда вы хотите взять общую строку запроса — например select * where {?s ?p "foo"}
— и убедиться, что одна из переменных заранее привязана к определенному значению. Хотя это возможно сделать с помощью манипулирования строками, есть более элегантный способ. Например, чтобы выполнить приведенный выше запрос и предварительно привязать его ?p
к свойству dc:creator
, вы можете сделать:
String q = "select * where {?s ?p "foo"}";
QuerySolutionMap qsm = new QuerySolutionMap();
qsm.bind( "p", DC.creator );
Query query = QueryFactory.create( q );
QueryExecution exec = QueryExecutionFactory.create( query, model, qsm );
ResultSet rs = exec.execSelect();
Смотрите также это сообщение в блоге для получения дополнительной информации или JavaDoc.