XML 编程思想:N-Triples 简介(用于 RDF 的一种更简单的序列化)(转)

XML 编程思想:N-Triples 简介(用于 RDF 的一种更简单的序列化)(转)[@more@]

  RDF/XML 并不是 RDF 模型的唯一表示。W3C 开发了 N-Triples,这是一种特别适合于测试套件的 RDF 表示格式。在本文中,Uche Ogbuji 使用从 RDF/XML 转换而来的示例介绍了 N-Triples。

  在 以前的文章中,我使用了标题“Repeat after me: There is no syntax”(跟着我重复:没有语法)。RDF 的传统 XML 语法经常受诽谤,但幸好这不是 RDF 存在的原因,而且出现另一些序列化方式总是必然的。XML 作为序列化语法的一个问题是它如此灵活以致于在自动测试过程中要比较所希望的结果与实际结果会很困难。不论是在回归测试中还是在一致性测试中,试着将 XML 规范化成某种形式通常很有用,这样,简单的文本比较就会得出有意义的结果。为此,XML 社区开发了 XML 范式,而且当 W3C RDF 工作组在开发 RDF 一致性测试套件时需要同种形式的 RDF。

  一个选项是定义与任何图都匹配的 RDF/XML 范式,然后依照相关的 W3C 推荐来将结果 XML 规范化。但是,我认为 RDF 工作组在开发用于 RDF 图的简单且严格定义的文本格式时选择了正确的路线。这个格式被命名为 N-Triples,而且被编入了 RDF Test Cases 工作草案中(请参阅 参考资料)。在本文中,我将使用从 RDF/XML 转换而来的示例介绍 N-Triples。您应该熟悉 XML 和 RDF。

  三是幸运数字

  我将首先描述一个简单的 N-Triples 示例。清单 1 是 RDF/XML,摘自我以前有关 PRISM 的文章。

  清单 1. 用 RDF/XML(基本 PRISM 词汇表)描述的 Thinking XML 第 12 篇专栏文章

  <?xml version="1.0" encoding="UTF-8"?> A discussion of the broader context and relevance of XML/RDF techniques.  Basic XML and RDF techniques for knowledge management, Part 7  IBM developerWorks Uche Ogbuji XML RDF text/html

  清单 2显示了与清单 1 等价的 N-Triples。

  我愿意把 N-Triples 描述成“冗长但很清晰”。正如您看到的,没有任何缩写词 - 甚至没有名称空间。所有的 URI 都是完整拼写的。这对于测试及类似情况很理想,因为它不会引入有关“相应的 RDF 模型是什么”这样的任何混淆。

  N-Triples 是一种面向行的格式。每个三元组必须写成一个独立行,它由主语说明符、谓语说明符以及宾语说明符组成,后面还有一个句号。主语和谓语的分隔,以及谓语和宾语的分隔都使用一个或多个空格或制表符实现。指定资源的形式有两种。如果它们有 URI,那么它们必须表示为您在 清单 1 中看到的形式:用尖括号将绝对 URI 引用括起来。禁止诸如 这样的相对 URI 引用。

  当然,在 RDF 中,所有主语和谓语都是 URI,但是宾语可以是 URI 也可以是文字。尽管 N-Triples 确实支持语言说明符和数据类型(正如我稍后将在 文字细节中讨论的那样),但所有文字都表示为用引号括起来的字符串。

  匿名领域

  正如我提到的,用 N-Triples 表示资源有两种形式。我已经讨论了用 URI 表示资源的形式。N-Triples 还有一个表示 匿名节点(也称为 空节点)的约定。清单 3 是一个包含一对空节点的简单 RDF/XML 示例:

  清单 3. 带有空节点的简单 RDF/XML 示例

     Unwritten work     The League of Procrastinators     

  图 1以图形的形式显示了 清单 3。

  图 1. 清单 3 的模型图

1155102664_ddvip_8970.gif

  正如您看到的,有两个椭圆形框中没有任何标签。它们是空节点。它们确实有标识,但那个标识不是由 URI 给定的。当实际上没有任何适合的 URI 与资源相关联时,常常会使用空节点,就如 清单 3和 图 1中的示例那样,其中正被描述的工作还没有被写入。

  清单 4 显示了与 清单 3等价的 N-Triples,它也对应于 图 1中的图。

  清单 4. 与清单 3 等价的 N-Triples

  _:blank1  "Unwritten work" ._:blank2  "The League of Procrastinators" ._:blank1     _:blank2 ._:blank1   .

  空节点的形式是 _: name ,其中 name 是给定的 N-Triples 集内该空节点的标识。 _: name 标识维护节点标识,即使 RDF 模型中没有任何标识与它们对应。RDF/XML 最近为您添加了一个类似的工具,以在 rdf:Description 或类型节点开始标记中使用 rdf:nodeID 。清单 5 与 清单 3等价,但所用的本地节点标识与 清单 4中的相同。

  清单 5. 带有空节点的简单 RDF/XML 示例

     Unwritten work     The League of Procrastinators     

  同样, 非常重要的是注意这些空节点的本地标识纯粹是特定 RDF/XML 或 N-Triples 文件内的约定。虽然清单 4和清单 5刚好都使用节点标识“blank1”,但这并不意味着其对应的空节点都拥有同一标识。这使人可能有点混淆,但它是空节点的一个基本特性。

  文字细节

  RDF 始终允许用户指定用于表示特性值的语言。清单 6 显示了一个匿名资源的 RDF/XML 示例,其特性是用英语和西班牙语表示的。

  清单 6. 使用语言元特性的 RDF 描述

     A lo cubano  Cuban style  Orishas 

  这里,给定的 dc:title 特性使用两种不同的语言。语言说明符总的说来并不是该语句的特性(这就是为什么国际化没有将 RDF 转换成四元组而是三元组系统的原因)。相反,语言是文字本身的一个基本特性。N-Triples 在其语言表示法中指出了这一点,就如您在清单 7 中看到的,这是 清单 6到 N-Triples 的转换。

  清单 7. 与清单 6 等价的 N-Triples

  _:blank1     "A lo cubano"@es ._:blank1     "Cuban style"@en ._:blank1        "Orishas" .

  @ 被附加到了文字值的表示中。其后是 RFC 3066 中定义的语言码;这是主要的语言指派符号(“en”代表“English”(英语),“es”代表“Spanish”(西班牙语)等)。它也可以指派语言变体;例如,“en-US”代表美式英语、“en-GB”代表英式英语或“es-MX”代表墨西哥西班牙语。

  另一种文字可以包含的特性(有人最近将它引入到了 RDF 中)是 数据类型。可以为 RDF 文字给定数据类型,如“整数”、“字符串”、“日期”或甚至是“莫尔斯代码”。数据类型被指派为 URI,您可以通过使用基于 W3C XML Schema(WXS)名称空间(一般被映射成前缀 xsd )的 URL 来使用 WXS 语言中的常见数据类型。清单 8 中的一个 N-Triples 包含数据类型指定。

  清单 8. 宾语包含数据类型指定的三元组

  #This is a comment in N-Triples#It must appear by itself on a separate line#The object of the following triple is of type xsd:inthttp://example.com/employees/jdoe  http://example.com/employee-id     "23"^^http://www.w3.org/2001/XMLSchema#int

  ^^ 标记后面是指定数据类型的 URI,它可能基于某个标准(如本例),也可以是某个本地约定。重要的是记住:即使这里的宾语是用引号括起来表示的,任何支持数据类型的系统实际上仍将它解释为 WXS 整数。 清单 8还显示了如何在 N-Triples 中嵌入注释。小心:我曾看到过许多 N-Triples 示例中的注释位于三元组所在行的结束小数点之后。当前的 N-Triples 语法不支持这种用法。

  “三元”中的信息

  这就是 N-Triples 的全部结构。我未涉及几个细微差别;例如语法中允许非常严格的字符集,因此您必须小心转义这些范围以外的任何字符。有些字符(在 URI 引用中)必须使用 URI 约定来转义,而其它则使用前面带有反斜杠的 N-Triples 约定。如果您正编写读或写 N-Triples 的代码,那么请确保参阅了这些细节的规范。

  有几项工作以用于 RDF 的基于简单三元组的表示为目标,其中之一是 N3(请参阅 参考资料),它相当流行并且是 N-Triples 中某些思想的起源。但是 N-Triples 的优势在于被写入了正式规范,而且由于它在标准 RDF 测试用例中的使用,因此可能所有的 RDF 处理器都将实现它。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752019/viewspace-950177/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752019/viewspace-950177/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值