• SPARQL基础入门练习


    1、前言

    知识图谱:Freebase,服务器:virtuoso

    SPARQL基本语法表

    KnowledgeGraph

    一个SPARQL样例

    1. PREFIX ns: <http://rdf.freebase.com/ns/>
    2. SELECT DISTINCT ?x
    3. WHERE {
    4. FILTER (?x != ns:m.0160w)
    5. FILTER (!isLiteral(?x) OR lang(?x) = '' OR langMatches(lang(?x), 'en'))
    6. ns:m.0160w ns:location.country.currency_used ?x .
    7. }

    大致意思是

    1. PREFIX ns: <http://rdf.freebase.com/ns/>——PREFIX声明缩写,后面的ns表示http://rdf.freebase.com/ns/。例如,ns:m.0160w在被解释器执行时,等价于http://rdf.freebase.com/ns/m.0160w。
    2. SELECT DISTINCT ?x——搜索变量x(?x),且搜索结果要求去重(DISTINCT)
    3. WHERE {}——这一子句接在SELECT之后,{}内容表示搜索SELECT的具体筛选条件。
    4. FILTER (?x != ns:m.0160w)——要求变量x不是ns:m.0160w
    5. FILTER (!isLiteral(?x) OR lang(?x) = '' OR langMatches(lang(?x), 'en'))——这一子句有点复杂,是三个子句的组合,分别表示要求:
      1. 或,变量x不是文本(!isLiteral)
      2. 或,x的语言是空字符串
      3. 或,x的语言是英文(en)
    6. ns:m.0160w ns:location.country.currency_used ?x .——这实际上是一个三元组。表示变量x上存在一条边,是由实体ns:m.0160w指出,通过关系ns:location.country.currency_used,指向变量x。值得注意的是,凡是这样的三元组子句,后面都要跟一个英文句号.(见红点),不然解释器会报错。

    在virtuoso服务器执行后,设置格式为html,结果如下。

    此外,值得注意的是,对于

    SELECT DISTINCT ?x

    而言,若写为

    SELECT DISTINCT ?x1 ?x2 ?x3

    则返回满足后续(where子句里的)约束条件的(x1, x2, x3)组合。

    2、基本操作(由简单到复杂)

    2.1 无条件查询

    最简单的形式

    1. PREFIX ns: <http://rdf.freebase.com/ns/>
    2. SELECT ?e1 ?r ?e2
    3. where {?e1 ?r ?e2}

    这表示,不加任何限制地,查询图谱内所有的三元组。返回结果自然就有很多:

    可以看到返回结果的顶上,还写上了查询语句里我们自己命名的e1,r,e2。

    2.2 已知单个三元组的条件查询

    加上一个三元组的约束

    1. PREFIX ns: <http://rdf.freebase.com/ns/>
    2. SELECT DISTINCT ?e1 ?r
    3. WHERE {
    4. ?e1 ?r ns:m.0160w .
    5. }

    即要求变量e1和r,满足三元组(?e1 ?r ns:m.0160w)。结果如下:

    2.3 嵌套查询

    当然,我们还可以再嵌套其他的三元组(嵌套查询),比如

    1. PREFIX ns: <http://rdf.freebase.com/ns/>
    2. SELECT DISTINCT ?e1 ?r
    3. WHERE {
    4. ?e1 ?r ns:m.0160w .
    5. ?e1 ns:freebase.user_profile.hometown ?e2 .
    6. }

    显然,这里我们就加了两个三元组约束。结果的条数自然就少得多了。

    2.4 过滤参数FILTER

    1. PREFIX ns: <http://rdf.freebase.com/ns/>
    2. SELECT DISTINCT ?e1 ?r
    3. WHERE {
    4. ?e1 ?r ns:m.0160w .
    5. FILTER(?r=ns:freebase.user_profile.hometown)
    6. }

    即过滤出(即,只要这部分)变量r是ns:freebase.user_profile.hometown的情况。结果如下:

    2.5 可选的约束OPTIONAL

    1. PREFIX ns: <http://rdf.freebase.com/ns/>
    2. SELECT DISTINCT ?e1 ?r ?e2
    3. WHERE {
    4. ?e1 ?r ns:m.0160w .
    5. OPTIONAL { ?e1 ns:freebase.user_profile.hometown ?e2 }
    6. }

    这样的话,第二个三元组约束就是可选满足的了,即若条件(?e1,ns:freebase.user_profile.hometown,?)成立,再查询?处的?e2;若不成立,就变量e2空着。部分结果显示如下:

    可见结果和2.2已知单个三元组的条件查询,的结果几乎是一致的——只是最后多了e2一列。

    2.6 任满足其一即可的UNION

    1. PREFIX ns: <http://rdf.freebase.com/ns/>
    2. SELECT DISTINCT ?e1 ?r ?e2
    3. WHERE {
    4. { ?e1 ?r ns:m.0160w } UNION { ?e1 ns:freebase.user_profile.hometown ?e2 }
    5. }

    可见,满足三元组条件1(?e1 ?r ns:m.0160w)或条件2(?e1 ns:freebase.user_profile.hometown ?e2)中任意一个,就返回。部分结果如下:

    条件1 UNION 条件2,和, 条件1 OPTIONAL 条件2 的区别就在于:

    1. UNION刻画“或”关系,要求条件1,2当中至少满足其中一个条件
    2. 条件1 OPTIONAL 条件2,仅要求必须满足条件1;至于条件2,若满足,也顺带执行查询。

    2.7 统计计数 COUNT

    1. PREFIX ns: <http://rdf.freebase.com/ns/>
    2. SELECT COUNT DISTINCT ?e1 ?r ?e2
    3. WHERE {
    4. { ?e1 ?r ns:m.0160w } UNION { ?e1 ns:freebase.user_profile.hometown ?e2 }
    5. }

    此处与DISTINCT配合使用,即统计满足条件的无重复的e1,r,e2组合数量,结果如下:

    2.8 语言限定

    1. PREFIX ns: <http://rdf.freebase.com/ns/>
    2. SELECT DISTINCT ?e1 ?r
    3. WHERE {
    4. ?e1 ?r ns:m.0160w .
    5. ?e1 ns:freebase.user_profile.hometown ?e2 .
    6. FILTER(lang(?e1)!='zh')
    7. }

    结合FILTER实现,即过滤出(只要这部分)语言不是中文(zh)的变量e1和r。

    可见结果跟2.3嵌套查询是一致的。 

    3、参考

    参考博客:

    1. sparql常用查询语句总结_TechOnly1988的博客-CSDN博客_sparql 交集
    2. sparql使用简介-语法入门_minosisterry的博客-CSDN博客_sparql语法
    3. sparql使用简介-语法入门_minosisterry的博客-CSDN博客_sparql语法
  • 相关阅读:
    基于springboot财务管理系统设计与实现-计算机毕业设计源码+LW文档
    自然语言处理基础——词表示
    NFTScan 正式上线 TON NFTScan 浏览器!
    VxWroks I2C Drivers 文档
    100道大厂面试题总结,可以测试自己能考多少分
    DRCNN:超越高斯去噪:深度CNN图像去噪的残差学习
    【13】加法器:如何像搭乐高一样搭电路(上)?
    RPA学起来快吗,相比Python学哪个更快?
    k8s单master集群部署完整流程及坑点总结(docker)
    2023北京市人工智能大模型场景融合与产业发展专场活动盛大召开
  • 原文地址:https://blog.csdn.net/Zjhao666/article/details/125443570