1. Jena
В поисках средств для работы с семантическими данными (semantic web) на java можно наткнуться на следующие решения:
В данной статье я хочу рассмотреть работу только с 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 . ?s ?d } " +
"ORDER BY ?d LIMIT 10 OFFSET 20";
LinkedList list = Sparql.exec(model, Article.class, query);