SparQL

科技工作者之家 2020-11-17

SPARQL1(SPARQL Protocol and RDF Query Language),是为RDF开发的一种查询语言和数据获取协议,它是为W3C所开发的RDF数据模型所定义,但是可以用于任何可以用RDF来表示的信息资源。SPARQL 协议和 RDF 查询语言(SPARQL)于2008年1月15日正式成为一项W3C推荐标准。SPARQL构建在以前的 RDF 查询语言(例如 rdfDB、RDQL 和 SeRQL)之上,拥有一些有价值的新特性。

优点SPARQL允许用户针对可以被称为“键值”数据的内容,或者更具体地说,遵循W3C的RDF规范的数据来编写查询。因此,整个数据库是一组“主语 - 谓语 - 对象”三元组。这类似于一些NoSQL数据库对术语“文档键值”的使用,例如MongoDB。

在SQL关系数据库术语中,RDF数据也可以被视为具有三列的表 - 主题列,谓词列和对象列。 RDF中的主题类似于SQL数据库中的实体,其中给定业务对象的数据元素(或字段)放置在多个列中,有时分布在多个表中,并由唯一键标识。在RDF中,这些字段表示为共享相同主题的单独谓词/对象行,通常是相同的唯一键,谓词类似于列名称,对象是实际数据。与关系数据库不同,对象列是异构的:每单元数据类型通常由谓词值暗示(或在本体中指定)。与SQL不同,RDF每个谓词可以有多个条目;例如,可以为单个“人”提供多个“子”条目,并且可以返回这些对象的集合,例如“儿童”。

因此,SPARQL为数据提供了一整套分析查询操作,例如JOIN,SORT,AGGREGATE,这些数据的模式本质上是数据的一部分,而不需要单独的模式定义。但是,架构信息(本体)通常在外部提供,以允许明确地连接不同的数据集。此外,SPARQL为可以将其视为图形的数据提供特定的图形遍历语法。

下面的示例演示了一个利用本体定义foaf(“朋友的朋友”)的简单查询。具体来说,以下查询返回数据集中每个人的姓名和电子邮件:

PREFIX foaf: SELECT ?name ?emailWHERE { ?person a foaf:Person . ?person foaf:name ?name . ?person foaf:mbox ?email . }此查询将所有三元组与一个匹配的主题连接在一起,其中类型谓词“a”是一个人(foaf:Person),并且该人具有一个或多个名称(foaf:name)和邮箱(foaf:mbox) )。

此查询的作者选择使用变量名称“?person”来引用主题,以便于阅读。由于三元组的第一个元素始终是主语,因此作者可以轻松使用任何变量名称,例如“?subj”或“?x”。无论选择何种名称,在查询的每一行上都必须相同,以表示查询引擎要加入具有相同主题的三元组。

连接的结果是一组行 - ?person,?name,?email。此查询返回?name和?email,因为?person通常是复杂的URI而不是人性化的字符串。请注意,任何?人可能有多个邮箱,因此在返回的集中,?name行可能会多次出现,每个邮箱一次。

此查询可以分发到多个SPARQL端点(接受SPARQL查询和返回结果的服务),计算和收集的结果,这个过程称为联合查询。

无论是以联合方式还是本地方式,查询中的其他三重定义可以允许连接到不同的主题类型(例如汽车),以允许简单查询,例如,为驱动高速汽车的人返回名称和电子邮件列表燃油效率。

查询表格对于从数据库读取数据的查询,SPARQL语言为不同目的指定了四种不同的查询变体。

SELECT查询:用于从SPARQL端点提取原始值,结果以表格格式返回。

CONSTRUCT查询:用于从SPARQL端点提取信息并将结果转换为有效的RDF。

ASK查询:用于为SPARQL端点上的查询提供简单的True / False结果。

DESCRIBE查询:用于从SPARQL端点提取RDF图,其内容留给端点根据维护者认为有用的信息来决定。

这些查询表单中的每一个都使用WHERE块来限制查询,但是,在DESCRIBE查询的情况下,WHERE是可选的。

例子另一个SPARQL查询示例模拟了“非洲所有国家/地区的资本是什么?”的问题:

PREFIX ex: SELECT ?capital ?countryWHERE { ?x ex:cityname ?capital ; ex:isCapitalOf ?y . ?y ex:countryname ?country ; ex:isInContinent ex:Africa . }变量用“?”表示 或“$”前缀。 将返回?capital和?country的绑定。

SPARQL查询处理器将搜索与这四种三元模式匹配的三元组集,将查询中的变量绑定到每个三元组的相应部分。 这里要注意的重要一点是“属性方向”。为了使查询简洁,SPARQL允许以类似于Turtle的方式定义前缀和基URI。

本词条内容贡献者为:

王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。