Вот что я нашел, так проводку вопроса:
Там нет существующего инструмента для 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.
Когда вы говорите «запрос к местному хранилищу данных», вы имеете в виду, что Hibernate будет выполнять запрос, или вы хотите, чтобы Jena выполнила запрос против необработанных данных (и присоединила эти данные к RDF, полученному с помощью связанных данных) ? Есть ли предложение WHERE в SQL или SPARQL? –
Я надеюсь, что предложение WHERE написано на SPARQL, так что Йена будет отвечать за это. –
Я опубликовал свой текущий план в качестве ответа. Любой, кто уменьшает или устраняет этот план, получит награду. –