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 <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:> |