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 здесь.

Другие вопросы по тегам