sparql使用简介-语法入门

官网翻译版:https://blog.csdn.net/minosisterry/article/details/102613785

基本模式

把查询语句理解成模式匹配,匹配模式即’实例-关系-实例‘的三元组模式匹配,这里的查询都是对实例的

最简单的查询

下面这个?x和“John Smith”都是实例,中间<>内容是关系,意思是查询x,其中x 的 FN(全名) 为 “John Smith”

SELECT ?x
WHERE { ?x  <http://www.w3.org/2001/vcard-rdf/3.0#FN>  "John Smith" }

注:?代表后面紧跟的是变量或者说未知量,即要查询的量

第二个查询,与第一个的区别就是,第一个查询结果只显示一列x,第二个显示两列x和fname。理解为查询存在FN关系的三元组

SELECT ?x ?fname
WHERE {?x  <http://www.w3.org/2001/vcard-rdf/3.0#FN>  ?fname}

基本模式的组合

如下,语句间用英文句号隔开,每句话仍是三元组模式。下面查询的是姓(Family)为“Smith”的人的名(Given)

SELECT ?givenName
WHERE
  { ?y  <http://www.w3.org/2001/vcard-rdf/3.0#Family>  "Smith" .
    ?y  <http://www.w3.org/2001/vcard-rdf/3.0#Given>  ?givenName .
  }

代码简化-前缀编写URI

如下,使用vcard代替其后一长串URI,<>中是关系的URI,可以理解为标识符或者地址

PREFIX vcard:      <http://www.w3.org/2001/vcard-rdf/3.0#>

SELECT ?givenName
WHERE
 { ?y vcard:Family "Smith" .
   ?y vcard:Given  ?givenName .
 }

过滤器

1.查找名称中带有“ r”或“ R”的名称                  ----regex内的为正则表达式

PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>

SELECT ?g
WHERE
{ ?y vcard:Given ?g .
  FILTER regex(?g, "r", "i") }

2.查找24岁以上的人的名字是:                        ----算术表达式必须在圆括号中

PREFIX info: <http://somewhere/peopleInfo#>

SELECT ?resource
WHERE
  {
    ?resource info:age ?age .
    FILTER (?age >= 24)
  }

可选信息-optional

获取一个人的名字以及他们的年龄(如果有该信息的话)

PREFIX info:    <http://somewhere/peopleInfo#>
PREFIX vcard:   <http://www.w3.org/2001/vcard-rdf/3.0#>

SELECT ?name ?age
WHERE
{
    ?person vcard:FN  ?name .
    OPTIONAL { ?person info:age ?age }
}

结果,有年龄存在的会显示年龄 

------------------------
| name          | age |
=======================
| "Becky Smith" | 23  |
| "Sarah Jones" |     |
| "John Smith"  | 25  |
| "Matt Jones"  |     |
-----------------------

取并集-union

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX vCard: <http://www.w3.org/2001/vcard-rdf/3.0#>

SELECT ?name1 ?name2
WHERE
{
   { [] foaf:name ?name1 } UNION { [] vCard:FN ?name2 }
}

---------------------------------
| name1         | name2         |
=================================
| "Matt Jones"  |               |
| "Sarah Jones" |               |
|               | "Becky Smith" |
|               | "John Smith"  |
---------------------------------

执行语句

data为rdf或owl文件,query是查询语句所在的文件

sparql --data=vc-db-1.rdf --query=q1.rq

sparql查询protege生成的owl文件

prefix 项目名: <http://www.semanticweb.org/minosisterry/ontologies/2019/9/项目名#>
#项目名为owl文件的项目名,<>中为owl文件前几行的‘xlmns:项目名=“...项目名#”’中双引号中的内容
select ?x

where 
{
	项目名:实例名 项目名:关系名 ?x. 
    #注释,未知实例可以在前也可以在后,根据关系的domin和range决定
}

 

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值