通过Fuseki进行三元组数据的新增、删除和查询

目录

新增三元组

删除实体

删除并新增


     

 TDB作为ApacheJena的存储不允许被多个实例同时访问,官方对此的解释如下:

Can I share a TDB dataset between multiple applications?

Multiple applications, running in multiple JVMs, using the same file databases is not supported and has a high risk of data corruption. Once corrupted, a database cannot be repaired and must be rebuilt from the original source data. Therefore there must be a single JVM controlling the database directory and files.

TDB includes automatic prevention of multi-JVM usage which prevents this under most circumstances and helps protect your data from corruption.

If you wish to share a TDB dataset between applications use our Fuseki component which provides a database server. Fuseki supports SPARQL QuerySPARQL Update and the SPARQL Graph Store protocol. Applications should be written in terms of these protocols using the relevant Jena APIs, this has the added benefit of making your applications portable to another SPARQL backend should you ever need to.

中文翻译来自百度翻译

我可以在多个应用程序之间共享TDB数据集吗?

       不支持在多个JVM中运行、使用相同文件数据库的多个应用程序,并且存在数据损坏的高风险。一旦损坏,数据库将无法修复,必须从原始源数据重建。因此,必须有一个单独的JVM来控制数据库目录和文件。

       TDB包括自动防止多JVM使用,这在大多数情况下可以防止这种情况,并帮助保护您的数据免受损坏。

       如果您希望在应用程序之间共享TDB数据集,请使用我们的Fuseki组件,它提供了一个数据库服务器。Fuseki支持SPARQL查询、SPARQL更新和SPARQL图形存储协议。应用程序应该使用相关的Jena API按照这些协议编写,这有一个额外的好处,即如果需要,可以将应用程序移植到另一个SPARQL后端。

       我在前面写过通过java代码操作TDB,对三元组数据进行增删改查的操作。 但是实际上,生产环境上我们是不建议那样做,因为TDB自身的限制,我们如果那样做了,节点就不能集群化。

       针对这个问题,官方也建议使用Fuseki作为操作TDB的服务器,这样上层应用我们可以继续保持集群化的架构。 

       官方文档对于如何进行Insert/delete/update的example写的还是比较清晰,参考这里。 
下面简单记录下我在开发过程中用到的几个SQL。

新增三元组

INSERT DATA
{ 
  <http://www.jingu.com#Matter/影> 
          <http://www.jingu.com#matterName>  "张艺谋影" ;
          <http://www.jingu.com#matterProcess>  "幸福生活" ;
		  <http://www.jingu.com#matterCharge>  "早九晚六" ;
		  <http://www.jingu.com#matterStandard>  "开心地笑" .
}

       关于这个SQL有几个细节:

(1)从数据可以抽象为一个实体Matter,名字是“影”,它有四个属性,分别是matterName、matterProcess、matterCharge、matterStandard。

(2)如果有更多属性,可以继续按照上面的方式写,后面跟;号

(3)语句最后结尾一定是点.

(4)这是一个个S 有多个P和O的写法

       在Fuseki中执行截图如下:

        注意红框标注的地方,默认进入这个页面,红框标注的地方是query查询,只能查询,如果我们要对数据进行修改,就需要改成update。

       执行完之后,下面会提示Sucess。然后我们再查询下所有的数据,如下:

        可以看到,第一步新增的四个三元组已经可以查询出来了。 

删除实体

        根据实体名称,删除和实体相关的所有三元组,SQL如下:

delete {<http://www.jingu.com#Matter/影> ?p ?o}
WHERE { <http://www.jingu.com#Matter/影> ?p ?o} 

删除并新增

delete {<http://www.jingu.com#Matter/影> ?p ?o}
insert {
    <http://www.jingu.com#Matter/影> 
          <http://www.jingu.com#matterName>  "张艺谋影" ;
          <http://www.jingu.com#matterProcess>  "什么鬼" ;
		  <http://www.jingu.com#matterCharge>  "早九晚六" ;
		  <http://www.jingu.com#matterStandard>  "笑个屁" .
}
WHERE { <http://www.jingu.com#Matter/影> ?p ?o} 

       这种写法实际上也是编辑的一种方式。 当然因为有WHERE条件,如果之前没有这个实体的三元组数据,这个SQL是无法新增进去三元组的,他是必须先删除成功,才能新增。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值