SparQL
SPARQL (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: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?email WHERE { ?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查询示例模拟了“非洲所有国家/地区的资本是什么?”的问题:
1 |
|
变量用“?”表示 或“$”前缀。 将返回?capital和?country的绑定。
SPARQL查询处理器将搜索与这四种三元模式匹配的三元组集,将查询中的变量绑定到每个三元组的相应部分。 这里要注意的重要一点是“属性方向”。为了使查询简洁,SPARQL允许以类似于Turtle的方式定义前缀和基URI。
上一篇: 公交车上霸气十足的躺椅
下一篇: 不容置疑