Как получить пространство имен свойства в dbpedia, указав имя свойства с помощью jena?

#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.