Sparql Transaction
Я хочу вставить несколько объектов в тройной магазин, как Джена Фусеки или Виртуоз.
В моем случае тема равна первичному ключу. Это похоже на реляционную базу данных. Как я могу убедиться, что объект присутствует только один раз или уже используется? Можно ли комбинировать ASK со вставкой в Sparql? Или ключ может быть сгенерирован?
Пока вы используете экземпляр бэкэнда, вы можете быть уверены, что субъект существует только один раз, но для большего количества экземпляров запрос и вставка должны выполняться одновременно для сохранения транзакции.
2 ответа
Обновление может иметь форму INSERT .. WHERE
и WHERE
часть может включать в себя тест на обновление или нет.
Протокол SPARQL для обновления требует, чтобы действия были атомарными.
Сами стандарты SPARQL не поддерживают транзакции. Однако Virtuoso и многие другие базы данных RDF поддерживают API-интерфейсы Eclipse RDF4J, которые имеют полную поддержку транзакций (раскрытие: я в команде разработчиков RDF4J). Пример использования транзакций RDF4J в Java будет выглядеть примерно так:
Repository rep = ... ; // the Repository object is your database
// open a connection to the database
try(RepositoryConnection conn = rep.getConnection) {
conn.begin(); // start a new transaction
...
// do a query
boolean success = conn.prepareBooleanQuery("ASK ...").evaluate();
if (!success) {
conn.rollback();
}
else {
// add some data
conn.add(...);
conn.commit();
}
}
Для получения дополнительной информации о том, как транзакции работают с RDF4J, см. Документацию.
Если вы не работаете в Java, вы также можете работать с транзакциями через RDF4J REST API, который является расширением протокола SPARQL.
В качестве отступления: вышесказанное просто для того, чтобы ответить на часть вашего вопроса "как мне совершать транзакции". Могут быть и другие, более эффективные механизмы, чем выполнение запроса ASK для типа проверки ограничений, который вы ищете. SHACL, язык ограничения форм, может быть тем, что вам нужно. Различные инструменты и платформы имеют (частичную или полную) поддержку проверки SHACL. Вы можете прочитать больше о поддержке RDF4J SHACL здесь.