ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:42.84KB ,
资源ID:20561723      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20561723.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(用 SPARQL 搜索 RDF 数据Word下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

用 SPARQL 搜索 RDF 数据Word下载.docx

1、图 1. bloggers.rdf 中的一个投稿者的基本图结构现在,我们来看一个针对博客模型的非常简单的 SPARQL 查询。比方说以下这个查询“根据名为 Jon Foobar 的人查找 blog 的 URL”,如清单 1 所示:清单 1. 查找某一投稿者的 blog 的 URL 的 SPARQL 查询 PREFIX foaf: SELECT ?urlFROM WHERE ?contributor foaf:name Jon Foobar .weblog ?url .查询的第一行只是为 FOAF 定义PREFIX,这样就不必每次都用完整名称引用它。SELECT子句指定查询应当返回的内容,在这个

2、例子中,返回的是名为url的变量。SPARQL 变量用?或$作为前缀,这两个前缀是可以互换的,但在本文中,我坚持使用作为前缀。FROM是一个可选的子句,它提供了将要使用的数据集的 URI。在这里,它只是指向一个本地文件,但是它也可以指向 Web 其他地方的某一个图的 URL。最后,WHERE子句由一组三元模式组成,用基于 Turtle 的语法表示。这些三元模式共同构成了所谓的图形模式。这个查询试图把图形模式的三元模式和模型进行匹配。将每个图形模式变量的绑定与模型节点进行匹配就成为一种查询解决方案,而SELECT子句中指定的变量值则成为查询结果的一部分。在这个示例中,WHERE子句的图形模式中的

3、第一个三元组与foaf:name属性为“Jon Foobar”的节点匹配,并把它绑定到名为contributor在 bloggers.rdf 模型中,contributor会和图 1顶部的空节点Agent匹配。图形模式的第二个三元组与contributor的weblog属性对应的对象匹配。这被绑定到变量,形成查询结果。回页首在 Jena 中使用 SPARQL支持在 Jena 中使用 SPARQL 目前可以通过叫作ARQ的模块得以实现。除了实现 SPARQL 之外,ARQ 的查询引擎还可以解析使用 RDQL 或者它自己内部的查询语言表示的查询。ARQ 的开发很活跃,但它还不是标准 Jena 发行

4、版本中的一部分。但是,可以从 Jena 的 CVS 仓库或者自包含的下载文件中获得它。让 ARQ 运行起来很简单。只需要得到最新的 ARQ 发行包(要获得有关链接,请参阅后面部分),然后对其进行解压,把环境变量ARQROOT设置成指向 ARQ 目录即可。可能还需要恢复 ARQ bin 目录的读取和执行权限。如果把 bin 目录添加到执行路径中非常方便,那是因为它包含从命令行调用 ARQ 的包装器脚本。为了确定所有设置都已到位,请从命令行调用sparql,确定看到了它的用法信息。清单 2 演示了所有步骤,清单 2 假设正在 UNIX 类的平台上工作,或者是在 Windows 下用 Cygwin

5、工作。(ARQ 还附带了在 Windows 下使用的.bat脚本,但是它们用法和下面示例中的用法稍有差别。)清单 2. 设置使用 Jena ARQ 的环境$ export ARQROOT=/ARQ-0.9.5$ chmod +rx $ARQROOT/bin/*$ export PATH=$PATH:$ARQROOT/bin$ sparql Usage: -data URL exprString | -query file从命令行执行 SPARQL 查询现在就可以运行 SPARQL 查询了(参见清单 3)。我们将使用来自清单 1的数据集和查询。因为查询使用关键字指定要使用的图,所以只需把查询文件

6、的位置提供给sparql命令行即可。但是,查询需要在包含图的目录中运行,因为该图是在查询的子句中用相对 URL 指定的。清单 3. 用 sparql 命令执行简单查询$ sparql -query jon-url.rq-| url |=| |有时,从查询中忽略子句很有意义。这样就可以允许在执行查询的时候才把图传递给它。当从应用程序代码中使用 SPARQL 时,避免把数据集绑定到查询是一个好习惯 例如,它允许把同一查询重用在不同的图上。可以在命令行用sparql -data URL选项在运行时指定图,其中URL是图的位置。这个 URL 既可以是本地文件的位置,也可以是远程图的 Web 地址。用

7、Jena API 执行 SPARQL 查询命令行工具对于运行独立查询有用,同时 Java 应用程序也可以直接调用 Jena 的 SPARQL 功能。通过com.hp.hpl.jena.query包中的类,使用 Jena 来创建和执行 SPARQL 查询。使用QueryFactory是最简单的方法。有各种create()方法,用来从文件或者String读取文本查询。这些方法返回Query对象,这个对象封装了解析后的查询。下一步是创建QueryExecution的实例,这个类表示查询的一个执行。要获得QueryExecution,请调用QueryExecutionFactory.create(qu

8、ery, model),并传入要执行的以及查询要处理的Model。因为查询的数据是编程方式提供的,所以查询不需要子句。上有几种不同的执行方法,每个方法执行一种不同类型的查询(请参阅标题为“其他类型的 SPARQL 查询”的侧栏,以获得更多信息)。对于简单的查询,可以调用execSelect(),该方法将返回ResultSet。ResultSet支持在查询返回的每个QuerySolution上进行迭代,这提供了对每个绑定变量值的访问。另外,还可以使用ResultSetFormatter,以不同的格式输出查询结果。清单 4 显示了一个把这些步骤放在一起的简单方法。它执行一个针对 bloggers.

9、rdf 的查询,并把结果输出到控制台。清间 4.用 Jena API 执行一个简单查询/ Open the bloggers RDF graph from the filesystemInputStream in = new FileInputStream(new File(bloggers.rdf);/ Create an empty in-memory model and populate it from the graphModel model = ModelFactory.createMemModelMaker().createModel();model.read(in,null);

10、/ null base URI, since model URIs are absolutein.close();/ Create a new queryString queryString = +url WHERE name Jon Foobar . url . ;Query query = QueryFactory.create(queryString);/ Execute the query and obtain resultsQueryExecution qe = QueryExecutionFactory.create(query, model);ResultSet results

11、= qe.execSelect();/ Output query results ResultSetFormatter.out(System.out, results, query);/ Important - free up resources used running the queryqe.close();编写更复杂的查询迄今为止,您已经看到了两种运行简单 SPARQL 查询的方法:用命令行工具,用 Java 代码调用 Jena API。在这一节中,我将介绍更多 SPARQL 的特性,以及它们支持的更复杂的查询。RDF 经常被用来表示半结构化的数据。这意味着在一个模型中,两个相同类型的节

12、点可能有两个不同的属性集。例如,在 FOAF 模型中,对人的描述可能只包含电子邮件地址;而作为另一个选择,它也可以包含真实名称、IRC 昵称、描绘个人照片的 URL,等等。提炼查询结果为了进一步提炼查询的结果,SPARQL 拥有DISTINCT、LIMIT、OFFSET和ORDER BY关键字,它们操作或多或少与它们在 SQL 中的对应物有些类似。DISTINCT可能只用在查询上,格式为SELECT DISTINCT。它会从结果集中清除重复的查询结果,让留下的每个结果都是惟一的。其他关键字都放在查询的WHERE子句之后。LIMITn把查询返回的结果数量限制在n 个,而OFFSET则忽略前面个结

13、果。ORDER BY ?var会根据的自然顺序对结果进行排序,例如,如果是字符串值,则按字母顺序排序。可以用ASC?varDESC?指定排序的方向。当然,可以把DISTINCT、LIMIT、OFFSET组合在查询中。例如,可以用ORDER BY DESC?date LIMIT 10找到 RSS feed 中最新的十个条目。清单 5 显示了一个非常小的 FOAF 图,用 Turtle 语法表示。它包含对 4 个虚构人物的描述,但是每个描述都有不同的属性集。清单 5. 一个描述 4 个虚构人物的小 FOAF 图prefix foaf:_:a foaf: ; foaf:mbox depiction

14、b foaf:A. N. OThera.n.otherc foaf:Liz Somebodymbox_sha1sum 3f01fa9929df769aff173f57dec2fe0c2290aeead foaf:M Benn/mbe.nn/pics/me.jpeg可选匹配假设您想编写一个查询,返回清单 5 的图中所描述的每个人的名字,以及每个人的照片的链接(如果有照片的话)。在foaf:depiction中包含的图形模式的查询可能只会发现三个结果。Liz Somebody 不会形成结果,因为虽然它有name属性,但它没有属性,而如果要与查询匹配的话,那么这两个属性都需要。帮助就在眼前,就是 S

15、PARQL 的OPTIONAL关键字。可选块定义了附加图形模式,即使模式不匹配,不会造成结果被拒绝,但在匹配的时候,图形模式会被绑定到图形上。清单 6 演示了一个查询,在清单 5 的 FOAF 数据中查找每个人的name,而且可以选择性地查找伴随的depiction。清单 6. 用可选块查询 FOAF 数据name ?depictionWHERE person foaf:name . OPTIONAL depiction ?depiction . . 清单 7 显示了运行清单 6 的查询的结果。所有查询结果都包含人名,可选的图形模式则只在属性存在的时候才绑定;如果没有,就从结果中忽略。从这种意

16、义上说,查询与 SQL 中的左外连接相似。清单 7. 清单 6 的查询结果-| name | depiction |=| | mbox ?mbox ?mbox UNION ?mbox_sha1sum ?mbox -| name | mbox |= | 值约束条件SPARQL 中的FILTER关键字对绑定变量的值进行约束,从而限制查询的结果。这些值约束条件是对布尔值进行计算的逻辑表达式,并且可以与逻辑操作符&|组合使用。例如,可以用过滤器把返回名称列表的查询修改成只返回和指定正则表达式匹配的名称。或者,如清单 9 所示,过滤器在项目的出版日期上设置限制,从而找到 RSS feed 中在两个特定日

17、期之间发布的项目。清单 9 还显示了如何使用 SPARQL 的 XPath 样式的类型转换特性(在这里,是将date变量转换成 XML Schema 的dateTime值),以及如何用xsd:在文字日期字符串上指定相同的数据类型。这可以确保在查询中使用日期比较,而不是标准的字符串比较。清单 9. 用过滤器检索在 2005 年 4 月发布的 RSS feed 项目PREFIX rss:/purl.org/rss/1.0/PREFIX xsd:/www.w3.org/2001/XMLSchema#PREFIX dc:/purl.org/dc/elements/1.1/item_title ?pub

18、_dateitem rss:title ?item_title .item dc:date ?pub_date . FILTER xsd:dateTime(?pub_date) = 2005-04-01T00:00:00Zxsd:dateTime & xsd:pub_date) 2005-05-01T00:dateTime处理多个图形迄今为止,我所演示的所有查询只包含一个 RDF 图的数据集。在 SPARQL 的术语中,这些查询针对的是后台图(background graph)。后台图是指:在使用 Jena 的 API 时,通过某个查询的子句、sparql命令的-data开关或者通过向Quer

19、yExecutionFactory.create()传递一个模型来指定的图。其他类型的 SPARQL 查询除了本文使用的查询之外,SPARQL 还支持另外三种查询。如果查询的图形模式在数据集中有匹配物,那么ASK将返回 “yes”,如果没有匹配物,则返回 “no”。DESCRIBE返回一个图形,其中包含和图形模式匹配的节点的相关信息。例如,DESCRIBE ?person WHERE ? 会返回一个图,其中包括来自 Jon Foobar 的模型的三元模式。最后,CONSTRUCT用来为每个查询结果输出一个图形模式。这样就可以直接从查询结果创建新的 RDF 图。可以把 RDF 图上的CONSTRUCT查询想像成与 XML 数据的

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1