分享
 
 
 

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

王朝other·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

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"?><rdf:RDF

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:dc="http://purl.org/dc/elements/1.1/"

xml:lang="en"><rdf:Descriptionrdf:about="http://www.ibm.com/developerworks/xml/library/x-think12.html">

<dc:description>A discussion of the broader context and relevance of XML/RDF techniques.

</dc:description>

<dc:title>Basic XML and RDF techniques for knowledge management, Part 7

</dc:title>

<dc:publisher>IBM developerWorks</dc:publisher>

<dc:creator>Uche Ogbuji</dc:creator>

<dc:subject>XML</dc:subject>

<dc:subject>RDF</dc:subject>

<dc:format>text/html</dc:format></rdf:Description></rdf:RDF>

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

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

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

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

匿名领域

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

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

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:dc="http://purl.org/dc/elements/1.1/">

<rdf:Description>

<dc:title>Unwritten work</dc:title>

<dc:creator rdf:parseType="Resource">

<dc:title>The League of Procrastinators</dc:title>

</dc:creator>

<dc:contributor rdf:resource="http://put-off.org"/>

</rdf:Description></rdf:RDF>

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

图 1. 清单 3 的模型图

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

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

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

_:blank1

<http://purl.org/dc/elements/1.1/title> "Unwritten work" ._:blank2

<http://purl.org/dc/elements/1.1/title> "The League of Procrastinators" ._:blank1

<http://purl.org/dc/elements/1.1/creator>

_:blank2 ._:blank1

<http://purl.org/dc/elements/1.1/contributor>

<http://put-off.org> .

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

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

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:dc="http://purl.org/dc/elements/1.1/">

<rdf:Description rdf:nodeID="blank1">

<dc:title>Unwritten work</dc:title>

<dc:creator rdf:parseType="Resource" rdf:nodeID="blank2">

<dc:title>The League of Procrastinators</dc:title>

</dc:creator>

<dc:contributor rdf:resource="http://put-off.org"/>

</rdf:Description></rdf:RDF>

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

文字细节

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

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

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:dc="http://purl.org/dc/elements/1.1/">

<rdf:Description>

<dc:title xml:lang="es">A lo cubano</dc:title>

<dc:title xml:lang="en">Cuban style</dc:title>

<dc:creator>Orishas</dc:creator>

</rdf:Description></rdf:RDF>

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

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

_:blank1

<http://purl.org/dc/elements/1.1/title> "A lo cubano"@es ._:blank1

<http://purl.org/dc/elements/1.1/title> "Cuban style"@en ._:blank1

<http://purl.org/dc/elements/1.1/creator>

"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 处理器都将实现它。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有