2009-07-27 4 views
0

Мне нужно запросить мой локальный хранилище данных Hibernate для сохраняемых объектов на основе критериев, где соответствующие данные для предложения WHERE находятся в облаке Linked Open Data.Есть ли способ прочитать сеанс Hibernate как RDF троек?

Есть ли способ прочитать сеанс Hibernate как RDF? Если это так, я могу, по крайней мере, использовать объединенный набор данных, чтобы решить, какие объекты нужно извлечь из Hibernate.

Предпочтительно, чтобы решение предоставило сеанс Hibernate как внутри Jena, поскольку я знаком с ним. Кроме того, мне понадобится поддержка вывода RDFS и SPARQL для извлечения.

+0

Когда вы говорите «запрос к местному хранилищу данных», вы имеете в виду, что Hibernate будет выполнять запрос, или вы хотите, чтобы Jena выполнила запрос против необработанных данных (и присоединила эти данные к RDF, полученному с помощью связанных данных) ? Есть ли предложение WHERE в SQL или SPARQL? –

+0

Я надеюсь, что предложение WHERE написано на SPARQL, так что Йена будет отвечать за это. –

+0

Я опубликовал свой текущий план в качестве ответа. Любой, кто уменьшает или устраняет этот план, получит награду. –

ответ

0

Вот что я нашел, так проводку вопроса:

Там нет существующего инструмента для triplify на Hibernate Session специально. Чтобы реализовать это, мне нужно реализовать Graph, возможно, используя в качестве основы GraphBase или StageGenerator. Поэтому ответ на вопрос «нет», поэтому я продолжил рассмотрение вопроса о том, как его реализовать.

Мне нужно решить, нужно ли трижды объединять объекты уже в сеансе (т. Е. Уже обратился к некоторым более ранним запросам), полагаться на доступ к базе данных или сделать то и другое. Если вы собираетесь в базу данных, мне также нужно решить, загружать ли все объекты, которые затем будут прикрепляться к сеансу или использовать прогноз, чтобы сохранить дополнительные данные в кучу за счет дополнительных раундов.

Использование графика, по-видимому, необходимо для поддержки выводов, хотя оно медленнее, чем использование ARQ StageGenerator, поскольку это может запрашивать набор тройных шаблонов, однако это делает необходимым всегда использовать SPARQL, который кажется немного негибким.

До сих пор оптимальное решение, как представляется:

  • Реализовать (возможно только для чтения) Graph - сказать "HibernateGraph"
  • Have HibernateGraph проверить объект Hibernate PersistenceContext и вернуться троек во главе пользовательского итератора .
  • Когда итератор заканчивает загрузку страниц данных из базы данных с использованием интерфейсов критериев .
  • Для запросов с известным предикатом URI, на карту URI на колонку и использовать плотной проекции, в противном случае загрузите весь объект и итерацию по геттерам, отображающее имя геттера к URI.
  • В других случаях карта с использованием простой схемы, например. http://root/url/instances/EntityName/id для каждого предмета и т. Д.
  • Создайте вспомогательный объект, чтобы разрешить SPARQL, выполняемый с пользовательским StageGenerator.
  • StageGenerator должен обернуть , встроенный в StageGenerator.
  • В пользовательском кадре генераторный проход запросы на графиках, отличных от HibernateGraph вверх по цепи до , встроенный в StageGenerator.
  • Также пропустите любой набор тройных узоров , для которых нет оптимизированного решения , например, любого набора из одного шаблона.
  • Где оптимизированный запрос может быть достигнуто , запустить соответствующие функции Критерии и карта результатов ячейки за ячейкой до троек как ранее.

Существует еще один SPI под названием OpExecutor, который может помочь вставить разрешение FILTER в базу данных, что улучшит производительность.

В данный момент я принял это как побочный проект, который я могу опубликовать как программное обеспечение LGPL.

1

Поскольку вы используете Jena (и ARQ) для выполнения вашего запроса SPARQL, вы можете использовать пользовательский FileManager для разрешения объектов/графиков Hibernate (предполагая, что каждый объект должен быть представлен графиком).

Jena имеет short HOWTO на использовании FileManager для поиска моделей, и ARQ RDF dataset tutorial (см раздел «Описание наборов данных») может дать несколько советов о том, как сделать более настроенное отображение графа URIs (и содержимое тех, графики в виде наборов данных RDF) к вашим существующим данным Hibernate.

Другой вариант может заключаться в создании пользовательского SDB layout, который сопоставляется с существующей схемой Hibernate. Я не знаю, насколько гибким является SDB в этом отношении.

+0

Предполагая, что я не использую SDB, как бы фактические управляемые данные Hibernate попадают в графики? Предполагая один график на SessionFactory, я, очевидно, могу реализовать Graph сам, но мне бы этого не хотелось. –