Я знаю два API на основе jena для работы с SPIN.
Вы можете использовать либо org.topbraid:shacl:1.0.1
, основанное на jena-arq:3.0.4
, либо упомянутое в комментарии org.spinrdf:spinrdf:3.0.0-SNAPSHOT
, которое является форкомпервый, но с измененными пространствами имен и обновленными зависимостями.
Обратите внимание, что первый (оригинальный) API также может работать с современной jena (3.13.x), по крайней мере, ваша задача может быть решена в таких обстоятельствах. Второй API еще не имеет релиза maven, но может быть включен в ваш проект через jitpack.
Чтобы решить эту проблему, вам нужно найти корень org.apache.jena.rdf.model.Resource
и привести его к org.topbraid.spin.model.Select
(или org.spinrdf.model.Select
). ) с использованием дженского полиморфизма (т.е. операция org.apache.jena.rdf.model.RDFNode#as(Class)
). Тогда #toString()
вернет желаемый запрос с префиксами модели. Обратите внимание, что все личности уже включены в модель посредством статической инициализации.
Демонстрация этого подхода SpinTransformer из области тестирования ONT-API, которая преобразует запросы на основе SPARQL в эквивалентную формус sp:text
.