- 16
- 0
- 约1.55万字
- 约 11页
- 2017-04-04 发布于重庆
- 举报
用SPARQL查询RDF数据
用 SPARQL RDF 数据资源描述框架(Resource Description Framework),或 RDF,能够将数据打散并分布开来。RDF 模型可以容易地合并在一起,而且序列化的 RDF 也可以简单地通过 HTTP 交换。应用程序可以通过 Web 松散地耦合到多个 RDF 数据源上。例如,在 PlanetRDF.com 上,我们把多个作者的 weblog 集中起来,作者们在 RSS 1.0 feed 中用 RDF 提供内容。作者 feed 的 URL 本身就放在 RDF 图中,叫作 bloggers.rdf。
但是怎样才能在 RDF 图中发现并操纵需要的数据呢?SPARQL 协议和 RDF 查询语言(SPARQL)目前是 W3C 的工作草案,还在讨论当中。SPARQL 构建在以前的 RDF 查询语言(例如 rdfDB、RDQL 和 SeRQL)之上,拥有一些有价值的新特性。在本文中,我们将用三种驱动 PlanetRDF 的 RDF 图 —— 描述作者的 FOAF 图、他们的 RSS 1.0 feed 以及 bloggers 图 —— 来演示 SPARQL 能对数据做的一些有意思的事情。SPARQL 拥有针对各种平台和语言的实现;本文将重点介绍面向 Java 平台的 Jena 语义 Web 工具包。
本文假设您有 RDF 的工作知识,熟悉 RDF 的词汇(例如 Dublin Core、FOAF 和 RSS 1.0)。此外,本文还假设您有一些使用 Jena 语义 Web 工具包的经验。要想跟上所有这些技术的发展速度,请参阅后面 参考资料 部分中的链接。
一个简单 SPARQL 查询的剖析
我们首先从查看 PlanetRDF 的 bloggers.rdf 模型开始。该模型非常简单,通过 FOAF 和 Dublin Core 词汇为每个 blog 投稿者提供名称、blog 标题和 URL。图 1 显示了一个投稿者的基本图结构。完整的模型只是为我们汇集的每一篇 blog 日志重复这个结构而已。
图 1. bloggers.rdf 中的一个投稿者的基本图结构
现在,我们来看一个针对博客模型的非常简单的 SPARQL 查询。比方说以下这个查询“根据名为 Jon Foobar 的人查找 blog 的 URL”,如清单 1 所示:
清单 1. 查找某一投稿者的 blog 的 URL 的 SPARQL 查询
PREFIX foaf: /foaf/0.1/
SELECT ?url
FROM bloggers.rdf
WHERE {
?contributor foaf:name Jon Foobar .
?contributor foaf:weblog ?url .
}
查询的第一行只是为 FOAF 定义 PREFIX,这样就不必每次都用完整名称引用它。SELECT 子句指定查询应当返回的内容,在这个例子中,返回的是名为 url 的变量。SPARQL 变量用 ? 或 $作为前缀,这两个前缀是可以互换的,但在本文中,我坚持使用 ? 作为前缀。FROM 是一个可选的子句,它提供了将要使用的数据集的 URI。在这里,它只是指向一个本地文件,但是它也可以指向 Web 其他地方的某一个图的 URL。最后,WHERE 子句由一组三元模式组成,用基于 Turtle 的语法表示。这些三元模式共同构成了所谓的图形模式。
这个查询试图把图形模式的三元模式和模型进行匹配。将每个图形模式变量的绑定与模型节点进行匹配就成为一种查询解决方案,而 SELECT 子句中指定的变量值则成为查询结果的一部分。
在这个示例中,WHERE 子句的图形模式中的第一个三元组与 foaf:name 属性为“Jon Foobar”的节点匹配,并把它绑定到名为 contributor 的变量。在 bloggers.rdf 模型中,contributor 会和 图 1 顶部的空节点 foaf:Agent 匹配。图形模式的第二个三元组与 contributor 的 foaf:weblog 属性对应的对象匹配。这被绑定到 url 变量,形成查询结果。
回页首
在 Jena 中使用 SPARQL
支持在 Jena 中使用 SPARQL 目前可以通过叫作 ARQ 的模块得以实现。除了实现 SPARQL 之外,ARQ 的查询引擎还可以解析使用 RDQL 或者它自己内部的查询语言表示的查询。ARQ 的开发很活跃,但它还不是标准 Jena 发行版本中的一部分。但是,
原创力文档

文档评论(0)