Мне нужно синхронизировать пару Jena моделей (в частности, OntModels) через сокет, и я хотел бы сделать это одно изменение за раз (по разным причинам - одна из которых каждый оператор, добавленный или удаленный из моделей OntModels, также адаптирует базу правил JESS.) Я могу слушать события добавления / удаления в моделях OntModels и затем создавать простые экземпляры событий, которые обертывают добавленные / удаленные операторы вместе с ChangeType, который указывает, что оператор был добавлен или удален, но сериализация этого оператора оказалась проблема.
К сожалению, вся найденная мною документация по сериализации JENA относится к сериализации всей модели в xml / rdf / n3 / и т. Д. Поскольку операторы - это просто тройки строк (на одном уровне, во всяком случае), похоже быть тривиальным для сериализации данных на уровне выписки. Однако Jena , похоже, не предоставляет API для создания операторов с простыми строками, которые "делают правильные вещи". Проблемы возникают с типизированными литералами. например:
Я могу создать утверждение:
<http://someuri/myont#foo> <http://someuri/myont#weight> "50.7"^^www.w3.org/2001/XMLSchema#double
но строковая версия, которую я могу получить, выглядит следующим образом:
"http://someuri/myont#foo" "http://someuri/myont#weight" "50.7^^www.w3.org/2001/XMLSchema#double"
(обратите внимание на отсутствие "перед ^^)
Это не было бы такой большой проблемой, так как литерал все еще можно анализировать с помощью регулярного выражения, но я не смог создать Statement с правильным литералом. Очевидный подход (ModelCon.createStatement (Resource, Property, String)) генерирует нетипизированный строковый литерал с полным переданным значением String.
Кто-нибудь знает, как я могу надежно сериализовать (и, конечно, десериализовать) отдельные утверждения Йены?