上一讲我们介绍了如何在Virtuoso中进行GRAPH的相关操作,最后留的一道作业题也比较容易:如何在nobelprize中删除nobel_2的2条数据。可以直接用我们之前介绍的DELETE方法,这里的Graph IRI为http://www.example.com/graph/nobelprize。
删除时,会碰到权限错误:
Virtuoso 42000 Error SR186:SECURITY: No permission to execute procedure DB.DBA.SPARQL_DELETE_DICT_CONTENT with user ID 107, group ID 107
我们去增加用户SPARQL的权限:
增加UPDATE权限:
保存后,1、再次执行之前的删除语句,即可删除成功。2、删除后,可以再用上一讲的查询语句去检索,看数据是否已经被删除。这两步大家可以自己去尝试。
今天,我们来介绍如何在Virtuoso中进行SPARQL的UPDATE操作。对UPDATE不熟悉的朋友,可以去看“SPARQL的UPDATE用法”。
一、namespace定义
我们知道namespace为命名空间,用来为类和属性做区间定义。Virtuoso中已经定义了一些常用的命名空间,我们也可以添加新的namespace。
点“Add”按钮,输入需要新增的bibframe(http://id.loc.gov/ontologies/bibframe/)。
注:书目框架(Bibliographic Framework, BIBFRAME)是美国国会图书馆为积极应对网络环境而开发的下一代书目格式。目前广泛应用于数字人文和图情领域。
这样增加后,在使用到该namespace定义的类和属性后,就不需要在SPARQL前面定义PREFIX。如:
在Virtuoso中就可以直接写成:
二、UPDATE操作
现在我们有了自己的数据库,接下来的所有操作都可以在自己的数据库中执行。首先,我们来查找出生在中国的诺奖得主。SPARQL大家还会写吗?
现在我们在Virtuoso里执行:
我们看到李政道的资源URI为http://data.nobelprize.org/resource/laureate/69,下面查看该URI的所有信息。
接下来,我们看看如何增加三元组,这里李政道的label标签为Tsung-Dao (T.D.) Lee,我们把该标签置为英文语种,并增加中文标签“李政道”。该如何操作,直接上SPARQL(运行时,删除前面的行号;为了讲解方便,这里加上了行号):
下面详细分析下该SPARQL。
- 行10-13为检索部分(WHERE)。检索出资源对应的rdfs:label值,并加上语言标示(这里用strlang函数)。
- 行3-5为删除部分(DELETE)。删除检索的资源rdfs:label三元组。
- 行6-9为插入部分(INSERT)。插入新的资源三元组,这里的rdfs:label对应的值为多语言。
可以通过SPARQL来查看插入后的标签值,这里有中英文双语。
今天,我们学习了如何在Virtuoso中进行数据的更新操作,大家是否可以将今天修改的这两条三元组,再修改回之前的数据?
下一讲,我们将介绍SPARQL中的PATH用法。
领取专属 10元无门槛券
私享最新 技术干货