1. Jena

В поисках средств для работы с семантическими данными (semantic web) на java можно наткнуться на  следующие решения:

  1. Jena
  2. JRDF
  3. Sesame

В данной статье я хочу рассмотреть работу только с  Jena.  Этот фреймворк достаточно богат по набору  полезных фишек, например

  • он позволяет работать с RDF, RDFS, OWL,
  • осуществлять запросы через  SPARQL,
  • есть возможность читать и писать из N3 и RDF-XML форматов,
  • работать с базами данными Oracle, MySQL, PostgreSQL, HSQLDB, MS SQL Server и Derby.

Исторически, jena является разработкой выращенной в лаборатории Hewlett-Packard в рамках исследований по семантик вебу. Приблизительно с октября 2009 года HP-шники прекратили активные работы над этим проектом и стали его активно опенсорсить (под BSD-подобной лицензией).  Думаю сейчас  разработчики могут спокойно и бесплатно использовать  его без особых проблем.

Для Jena имеется неплохой набор учебных материалов как на самом сайте, так и на других различных ресурсах (например на ibm-ком developerWorks: Introduction to Jena). Структура базовых классов простая и интуитивно понятная. Для примера, привожу краткий набор некоторых основных сущностей в библиотеке:

  • RDFNode - базовый интерфейс для ресурсов или литералов
  • Resource - RDF-ный ресурс (например <http://somewhere/JohnSmith>)
  • Literal - RDF литерал ("John Smith")
  • Property - свойство или предикат (VCard.FN)
  • Statement - триплет "субъект" - "предикат" - "объект"
  • Model - множество триплетов

Неплохую вводную по работе с Jena, можно прочитать на сайте  www.semantictools.ru. Также этом на сайте находится множество полезной информации для людей увлеченных семантическими технологиями.

2. Jenabean

Для связки между JavaBean и RDF хранилищем можно использовать библиотеку jenabean . Способ привязки базируется на аннотациях и чем-то напоминает работу с JPA -- аннотациями даются указания каким образом связываются поля класса и данные в хранилище.

Примеры, документацию и саму библиотеку можно скачать на официальной странице  проекта - http://code.google.com/p/jenabean

Также там имеется замечательный скринкаст, в котором показано по шагам (с нуля) работа под NetBeans'e с этой библиотекой. Так что здесь какие-либо мои пояснения по установке и работе библиотеки уже не нужны, достаточно просмотреть видео на сайте.

Далее хотелось уделить особое внимание работе  Jenabean и SPARQL.

SPARQL - язык запроса для выгребания данных из RDF.  С его помощью можно осуществлять довольно хитрые выборки.

Для работы через SPARQL в jenabean можно использовать класс Sparql, который может получать данные из Jena-вской модели (Model - множество триплетов) .

Важно! В jenabean-овском  SPARQL-запросе обязательно должна быть переменная ?s, которая ссылается на требуемый вами объект. Зачем они решили сделать такую жесткую завязку  на ?s мне не понятно, может в следующих версиях придумают что-нибудь покрасивее.

В качестве примере, можно рассмотреть кусок кода -- получение списка из 10 (LIMIT 10) статей в порядке их публикации (ORDER BY ?d)  начиная с 20-ой (OFFSET 20) .

String query = "SELECT ?s ?d WHERE " +
"{ ?s a <http: //programador.ru/Article> . ?s </http:><http: //programador.ru/postDate> ?d } " +
"ORDER BY ?d LIMIT 10 OFFSET 20";
LinkedList<article> list = Sparql.exec(model, Article.class, query);
</article></http:>