我想多个对象插入到像耶拿定式或演奏家一个triplestore。
在我的情况下,受等于主键。这是一个类似关系数据库。我怎样才能确保拍摄只出现一次或已在使用?可以在ASK与SPARQL中插入结合起来呢?或者,可以一键生成?
只要你使用的后端的实例可以确保对象只存在一次,但更多的情况下查询和插入必须同时进行以节省交易。
该SPARQL标准本身并不提供交易的任何支持。然而,炫技和许多其他RDF数据库支持Eclipse RDF4J API,它们有充分的事务支持(披露:我对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工作的详细信息,请参阅documentation。
如果你没有在Java中工作,你也可以用交易通过RDF4J REST API,这是SPARQL协议的扩展工作。
顺便说一句:以上就是真正回答你的问题的“我怎么做交易”的一部分。有可能比做着你正在寻找的那种约束验证的ASK查询其他可用的,更好的机制。 SHACL,形状约束语言,可能是你所需要的。各种工具和平台,有SHACL验证(部分或全部)的支持。你可以阅读更多关于RDF4J SHACL support这里。
的更新的形式可以是INSERT .. WHERE
和WHERE
部分可以包括是否要更新或不是测试。
的SPARQL协议更新需要的动作是原子的。