Sparql 交易
Sparql Transaction
我想将多个对象插入到像 Jena fuseki 或 virtuoso 这样的三元组中。
在我的例子中,主题等于主键。它类似于关系数据库。我怎样才能确保该主题只出现一次或已经在使用中? ASK 可以与 Sparql 中的插入结合使用吗?还是可以生成密钥?
只要使用后端的实例就可以确保主题只存在一次,但对于更多的实例,查询和插入必须同时发生才能保存事务。
SPARQL 标准本身不提供任何事务支持。然而,Virtuoso 和许多其他 RDF 数据库支持 Eclipse RDF4J API,它们具有完整的事务支持(披露:我在 RDF4J 开发团队)。在 Java 中使用 RDF4J 事务的示例如下所示:
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 协议的扩展。
顺便说一句:以上内容只是为了真正回答您问题的 "how do I do transactions" 部分。对于您正在寻找的约束验证类型,可能还有其他比 ASK 查询更好的可用机制。 SHACL,形状约束语言,可能是您所需要的。各种工具和平台都(部分或全部)支持 SHACL 验证。您可以在此处阅读有关 RDF4J SHACL support 的更多信息。
更新可以是 INSERT .. WHERE
的形式,WHERE
部分可以包括是否更新的测试。
用于更新的 SPARQL 协议要求操作是原子的。
我想将多个对象插入到像 Jena fuseki 或 virtuoso 这样的三元组中。
在我的例子中,主题等于主键。它类似于关系数据库。我怎样才能确保该主题只出现一次或已经在使用中? ASK 可以与 Sparql 中的插入结合使用吗?还是可以生成密钥?
只要使用后端的实例就可以确保主题只存在一次,但对于更多的实例,查询和插入必须同时发生才能保存事务。
SPARQL 标准本身不提供任何事务支持。然而,Virtuoso 和许多其他 RDF 数据库支持 Eclipse RDF4J API,它们具有完整的事务支持(披露:我在 RDF4J 开发团队)。在 Java 中使用 RDF4J 事务的示例如下所示:
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 协议的扩展。
顺便说一句:以上内容只是为了真正回答您问题的 "how do I do transactions" 部分。对于您正在寻找的约束验证类型,可能还有其他比 ASK 查询更好的可用机制。 SHACL,形状约束语言,可能是您所需要的。各种工具和平台都(部分或全部)支持 SHACL 验证。您可以在此处阅读有关 RDF4J SHACL support 的更多信息。
更新可以是 INSERT .. WHERE
的形式,WHERE
部分可以包括是否更新的测试。
用于更新的 SPARQL 协议要求操作是原子的。