SPARQL 是一种查询语言,作用于RDF型的数据库,与 SQL 比较相似。RDF的英语全称为Resource Description Framework,中文名称为资源描述框架。RDF是一种描述数据文件储存的数据模型,该数据模型通常描述由三个部分组成的事实,被称为三元组(triples)。三元组由主语(subject)、谓语(predicate)和宾语(object)组成。
之前我对SPARQL也是零零星星了解一点,今天特地将其常见的关键字和使用方法进行了整理,以后再有记得不太清的地方,直接点开这篇文章就好啦!!
放一下官网链接,有需要的伙伴自取哦~
官网教程:Apache Jena - SPARQL Tutorial - Data Formats
1. 关键字介绍
(1) PREFIX
有一种速记机制用于使用前缀编写长 URI。所以,长URI可以看做是由前缀机制 - URI 这两个部分组成的。
如上图所示:
前缀其实就是给<http://www.w3.org/2001/vcard-rdf/3.0#> 换个别名vcard,避免每次命名时都要写这个长长的字符。
(2) FILTER
filter 关键字主要是用来过滤掉不符合条件的数据。filter的使用主要有两种情况:
① 字符串匹配
FILTER regex(?x, "pattern" [, "flags"])
例:查询包含“r”或“R”的给定名称:
flags 参数是可选的。标志“i”表示不区分大小写的模式匹配已完成。
查询结果:
② 测试值
这一步主要是对变量的值进行筛选。
例:查找 24 岁以上人员的姓名 :
(3) OPTIONAL
optional可以将部分条件设置为可选的,其主要是用来扩展在查询解决方案中找到的信息。查询时,非可选的条件必须满足。
例: 获取一个人的姓名以及他们的年龄(如果该信息可用)。
查询结果:
(4) DISTINCT
SELECT 结果表单可以采用 DISTINCT 修饰符,该修饰符可确保返回的两个解不相同,相当于给答案进行去重。
(5) ORDER BY
SPARQL 解决方案按表达式(包括自定义函数)进行排序,默认是升序。其中,DESC 表示降序。
(6) LIMIT
限制一条查询能返回的答案的数量。 LIMIT 1 : 只返回一个符合约束条件的答案。
DINSTINCT,ORDER BY 和 LIMIT 关键字的使用如下所示:
PREFIX ns: <http://rdf.freebase.com/ns/>
SELECT DISTINCT ?x
WHERE {
FILTER (?x != ns:m.0n2bh)
FILTER (!isLiteral(?x) OR lang(?x) = '' OR langMatches(lang(?x), 'en'))
ns:m.0n2bh ns:tv.tv_program.regular_cast ?y .
?y ns:tv.regular_tv_appearance.seasons ?x .
?y ns:tv.regular_tv_appearance.actor ns:m.01gc7h .
?x ns:tv.tv_series_season.to ?sk0 .
}
ORDER BY DESC(xsd:datetime(?sk0))
LIMIT 1
注:
!isLiteral(?x) : 变量x不是文本
lang(?x):x的语言是空字符串
langMatches(lang(?x), 'en'):x的语言是英文(en)
(7) UNION
UNION表示“或”关系,要求条件1,2当中至少满足其中一个条件。
(8) OFFSET
OFFSET可以使结果在指定的数字后开始。例,OFFSET 5 表示 掠过前四条,从第五条开始。
PREFIX ns: <http://rdf.freebase.com/ns/>
SELECT DISTINCT ?x
WHERE {
FILTER (?x != ns:m.02__x)
FILTER (!isLiteral(?x) OR lang(?x) = '' OR langMatches(lang(?x), 'en'))
ns:m.02__x ns:sports.sports_team.championships ?x .
?x ns:time.event.start_date ?sk0 .
}
ORDER BY xsd:datetime(?sk0)
LIMIT 1
OFFSET 5
2. 生成结果集的四种方式
SELECT:返回结果表。
CONSTRUCT:基于查询中的模板返回 RDF 图。
DESCRIBE:根据查询处理器配置为返回的内容返回 RDF 图。
ASK :询问布尔查询。
注:SELECT 窗体直接返回解决方案表作为结果集,而 DESCRIBE 和 CONSTRUCT 使用匹配结果来构建 RDF 图。
3. Tips
查询中每个三元组都以 “.” 结尾(最后一个之后的点可以省略)。
通常我们可以用SPARQL在web端访问知识图谱,查询符合约束条件的三元组。其次,我们在学习知识图谱问答(KBQA)时,数据集中的每个问题一般都有对应的一个字段“Sparql”。此外,有些数据集,比如GrailQA,还会根据需要将SPARQL 转化为S-expression,所以看懂SPARQL 是很有必要的。最后,希望我们都能掌握SPARQL !!