本页位置: 开放首页 -> 开放 XML -> 标准中译 -> XPointer 架构
译文XPointer 架构
( http://www.opendl.com/openxml/w3/TR/xptr-framework/xptr-framework-gb.html )
英文XPointer Framework
(http://www.w3.org/TR/xptr-framework/)
注意
译者
时间初次定稿:2003 年 8 月 6 日 (NZT)最后修改: 2003 年 8 月 13 日 (UTC)

W3C

XPointer 架构

W3C 建议 2003 年 3 月25 日

本版本:
http://www.w3.org/TR/2003/REC-xptr-framework-20030325/
最新版本:
http://www.w3.org/TR/xptr-framework/ 中文翻译 [简体中文]
以前版本:
http://www.w3.org/TR/2002/PR-xptr-framework-20021113/
编者:
Paul Grosso, Arbortext, Inc. <paul@arbortext.com>
Eve Maler, Sun Microsystems <eve.maler@sun.com>
Jonathan Marsh, Microsoft <jmarsh@microsoft.com>
Norman Walsh, Sun Microsystems <Norman.Walsh@Sun.COM>

摘要

本规格说明定义 XML 指针语言(XPointer)架构,该架构是一个用于 XML 的可扩展的定址系统,也是其它的 XPointer 模式规格说明的基础。该架构计划用作资源的片段标识符的基础,这些资源可以是英特网媒体类型是 text/xmlapplication/xmltext/xml-external-parsed-entity、或 application/xml-external-parsed-entity 之一的任何资源。同时也鼓励其它的基于 XML 的媒体类型使用这一个架构来定义它们自己的片段标识符语言。

本文档的地位

本节描述本文档在出版时的地位。其它的文档可能代替本文档。本文档系列的最新状态由 W3C 维护。

本文档为万维网协会 (W3C) 建议 (REC)。 本文档已由万维网协会(W3C)组织成员和其他感兴趣的各方审阅,并已被组织理事批准为万维网协会(W3C)建议。这是一个稳定的文档,可以用作参考材料,也可以作为其它文档的标准参考文献。W3C 在建议制定过程中的作用是吸引对本规范的注意并促进它的广泛使用。这能增强 Web 的功能性和互操作性。

本文档是是作为 W3C XML 制定工作(W3C XML Activity)的一部分的 XML 链接工作组的工作成果。它计划与附随的 XPointer element() 模式XPointer xmlns() 模式规格说明一起,陈述最初的 XPointer 需求的核心子集,作为关于 XML 媒体类型的整个或基础部分的片段标识符语法。

欢迎对本说明提建议。请电邮到公共邮件列表 www-xml-linking-comments@w3.org存档)。

有关本规格说明及附随的 XPointer element() 模式XPointer xmlns() 模式实现的资讯可参看实现报告

与本推荐相关的应行公告的专利的事项和许可义务,依照 W3C 政策可在 XPointer 知识产权声明页上查到。

现有 W3C 建议和其它技术文档的列表在 http://www.w3.org/TR。W3C 出版物可能随时被其它的文档更新、代替、或废除。

目录

1 介绍
    1.1 符号表示法
    1.2 术语
2 一致性
3 语言和处理
    3.1 语法
    3.2 简写指针
    3.3 基于模式的指针
    3.4 命名空间与上下文的绑定
4 字符转义
    4.1 上下文转义
    4.2 转义的例子

附录

A 参考资料
    A.1 标准参考资料
    A.2 非标准参考资料


1 介绍

本规格说明定义 XML 指针语言(XPointer)架构,该架构是一个用于 XML 的可扩展的定址系统,也是其它的 XPointer 模式规格说明的基础。该架构计划用作资源的片段标识符的基础,这些资源可以是英特网媒体类型是 text/xmlapplication/xmltext/xml-external-parsed-entity、或 application/xml-external-parsed-entity 之一的任何资源。同时也鼓励其它的基于 XML 的媒体类型使用这一个架构来定义它们自己的片段标识符语言。

处理 XML 的许多类型的应用程序都需使用 URI 引用来对 XML 资源的内在结构进行定址,例如,XML 链接语言[XLink]、XML Inclusions[XInclude]、the Resource Description Framework[RDF]、和 SOAP 1.2[SOAP12]。本规格说明既不限制对 XML 资源使用 URI 引用的应用程序的类型,也不限制或规定这些应用程序在定位了在那些资源内的所需要的信息后的行为。

1.1 符号表示法

定义:本规格说明中的关键字必须must)、不能must not)、必需的required)、shall)、将不shall not)、应该should)、不应该should not)、建议recommended)、可能may)、和可选的optional)依照[RFC 2119]所描述的进行解释。]

用于 XPointer 架构的正式文法是在 XML 建议[XML]中所描述的、简单的扩展贝克诺尔格式 (EBNF) 记号。

1.2 术语

定义指针

一个遵守本规格说明的字串。本规格说明定义指针的语法和语义。

定义指针元件

指针的一部分,该部分提供了模式的名称以及遵照那个模式定义的一些指针数据。

定义模式

一个特定的指针数据格式,该格式有一个名称并在某个规格说明中定义。

定义XPointer 处理器

一个软件组件,该组件藉由使用一个指针来识别 XML 资源的子资源。本规格说明定义 XPointer 处理器的行为。

定义应用程序

一个软件组件,该组件因为需要访问 XML 资源的子资源而协同或使用 XPointer 处理器。每个应用程序所对应数据格式(可能是基于 XML 的或不是基于 XML 的)的定义决定了 XPointers 的出现和使用、以及对那些藉由处理 XPointer 而获得的资源和子资源应采取的行为。例如,使用 XPointer 处理器的应用程序可以是 HTML[HTML]Web 浏览器和 XInclude 处理器。

定义错误

一个对本规格说明的句法规则的违反,或一个识别子资源指针的失败。

定义命名空间与上下文的绑定

一个 XML 命名空间[XML-Names]定义的命名空间前缀与它们关联的命名空间的名称的绑定。

2 一致性

本规格说明定义了一个架构;目前它没有为 XPointer 处理器定义一个最低的一致性的标准。因此,本节中的信息所定义的一致性需求只适合于任何最低的一致性的标准的架构部分。

XPointer 处理器依赖于应用程序的能力来翻转任何的片段标识符编码及转码(参看4 字符转义)。

XPointer 处理器的行为依赖于来自 XML 资源中一定信息的可用性:用[Infoset]所提供的术语来说,信息项及在下面列表的的特性。信息项中的某些项及特性的出现又遵从 DTD 或 XML 模式的处理:并要求遵从 XPointer 的处理器做这样的处理,但是如果它们做这样的处理,简化的指针处理将会利用这些提供的信息。(参看3.2 简写指针)。

声明是 XPointer 处理器的软件组件必须遵从这个 XPointer 架构规格说明,以及,包括本规格说明和任何其它定义关于 XPointer 最低的一致性的标准的规格说明,以及可能遵从于其它的 XPointer 模式规格说明。 XPointer 处理器必须载明它们所遵守的其它的 XPointer 模式规格说明。依赖于 XPointer 处理的规格说明应该载明它们需要和支援的模式。

遵守一致性的 XPointer 处理器必须向应用程序报告 XPointer 架构的错误。应用程序可以自由地选择结束或以任何方式来从 XPointer 架构错误中恢复。

3 语言和处理

本节描述有 XPointer 架构和关于架构的 XPointer 处理器的行为。

XPointer 处理器接受一个 XML 资源和一个作为指针(例如,一个从用于存取资源的 URI 引用得来的经过转义倒置的片段标识符)的字串作为输入,尝试针对该资源对指针进行求值,并生成一个子资源标识、或者一到多个的错误作为输出。

3.1 语法

如果一个字串用作为一个指针而不遵守在本节中定义的语法,则是一个错误。

符号 S 在[XML]中定义。符号NCNameQName 在[XML-Names]中定义。

XPointer 架构语法
[1]   Pointer   ::=    Shorthand | SchemeBased
[2]   Shorthand   ::=    NCName
[3]   SchemeBased   ::=    PointerPart (S? PointerPart)*
[4]   PointerPart   ::=    SchemeName '(' SchemeData ')'
[5]   SchemeName   ::=    QName
[6]   SchemeData   ::=    EscapedData*
[7]   EscapedData   ::=    NormalChar | '^(' | '^)' | '^^' | '(' SchemeData ')'
[8]   NormalChar   ::=    UnicodeChar - [()^]
[9]   UnicodeChar   ::=    [#x0-#x10FFFF]

如上述的产生式所示,右括弧“)”字符表示指针元件的结束,也平衡了元件的起头的左括弧“(”字符。如果左边或右边的括弧在模式中出现而没有由与它的配搭括弧来平衡,则必须在它之前以音调符号(^)来转义。允许对成对的刮弧进行转义。出现字面量的音调符号时必须用一个附加的音调符号来转义(也就是^^)。音调符号的其它任何的用法都是一个错误。

3.2 简写指针

简写指针,以前称为 barename,由一个 NCName 单独地组成。它最多标识在资源的信息集里的一个元素,明确地说,即是在文档顺序下第一个(如果有任何的的话)匹配的 NCName 作为标识符。元素的标识符依下列各项决定:

  1. 如果元素信息项在它的[属性]中有一个属性信息项是由一个模式决定的 ID,那么,它由该属性信息项的[模式标准化的值]特性的值来标识;

  2. 如果元素信息项在它的[孩子]中有一个元素信息项是由一个模式决定的 ID,那么,它由该元素信息项的[模式标准化的值]特性的值来标识;

  3. 如果元素信息项在它的[属性]中有一个属性信息项是由一个 DTD 决定的 ID,那么,它由该属性信息项的[模式标准化的值]特性的值来标识;

  4. 元素信息项也可能由外部决定的 ID 值来标识。

如果没有元素信息项被简写指针的 NCName 来标识,该指针则是错误的。

注意:

文档里有超过一个 DTD 决定的 ID模式决定的 ID、和外部决定的 ID 的时候,一个文档元素信息项可能被多重的值标识。在这样的文档中,如果一个特定元素的标识符的值不是总是相同时,则可能导致互通性的丧失。

定义:元素或属性信息项是一个模式决定的 ID,当且仅当,以下之一为真:]

  1. 它有[成员类型定义][类型定义]特性,而且它们的值分别有[名称]等于ID[目标命名空间]等于http://www.w3.org/2001/XMLSchema

  2. 它有[基本类型定义]且其值有[名称][目标命名空间]

  3. 它有[基本类型定义]且其值有值为[名称][目标命名空间][基本类型定义],等等,随[基本类型定义]特性的递归;

  4. 它有[类型定义名称]等于 ID 且[类型定义命名空间]等于 http://www.w3.org/2001/XMLSchema

  5. 它有[成员类型定义名称]等于ID[成员类型定义命名空间]等于http://www.w3.org/2001/XMLSchema

定义:属性信息项是一个 DTD 决定的 ID,当且仅当,它有[类型定义]特性且值与 ID 相等。]

定义外部决定的 ID 是个代表元素的标识的符字串,其值由应用程序通过本规格说明范围以外的机制来决定。]

注意:

简写指针为基于 XML 的媒体类型的资源提供大致类似于 HTML 片段标识符的行为。然而,如果因为没有 DTD、模式或应用程序特定的信息而导致没有 ID 类型的信息,指针将不标识任何的元素。有一些方法可使元素标识更可靠。举例来说,资源的创建者能使用内部的 DTD 子集来标示 ID 类型属性的出现,而且指针的创建者能用基于模式的指针或者是以其它的方式提供一个或多个的模式来定址需要的元素而不是用简写指针。

注意:

因为不论[XML]或[XMLSchema]对类型 ID 赋值都不作这样的要求,所以,以上的定义受标识元素信息项的值是否是唯一的影响。

3.3 基于模式的指针

基于模式的指针由一个或多个的指针元件所组成,元件可以有选择地用空白符(S)分开。每个元件都有一个模式名称并且在刮弧里面包含遵照所命名的模式数据(EscapedData)。如果模式数据包含刮弧,它们必须是配对的或者经过转义的。

当提供有多个指针元件的时候,XPointer 处理器必须以左到右的顺序来求值。如果 XPointer 处理器不支持指针元件所用的模式,则跳过该指针元件。如果指针元件没有标识任何的子资源,如果还有下一个元件的话,则对下一个元件继续进行求值。XPointer 处理器将报告第一个标识一个或多个的子资源的指针元件的求值结果,并将该结果作为整体求值的结果,然后停止求值。如果没有指针元件标识子资源,则是个错误。

在以下例子中,如果 'xpointer' 指针元件不能明确或者没有标识任何的子资源,则对 'element' 指针元件求值;如果 'xpointer' 指针元件标识子资源,则不对 'element' 指针元件求值。

#xpointer(id('boy-blue')/horn[1])element(boy-blue/3)

如[XML-Names]所定义的,模式名称可选择的 PrefixLocalPart 依照语法组成。理论上,模式名称是个由 LocalPart 和与命名空间与上下文的绑定中的前缀所对应的命名空间名称所组成的元组。如果命名空间与上下文的绑定中没有包含对应的前缀,或者,XPointer 处理器所支持的模式名称中没有相对应的(namespace nameLocalPart)对,则跳过该指针元件。

本规格说明为所有以 W3C 建议方式规定的其它 XPointer 模式中的定义保留了不合法的模式名称。用 QNames 作为模式名称提供了一个适合于扩展的总体架构,使其它基于 XML 的媒体类型愿在定义它们自己的片段标识符语言时使用这一架构。任何与 XPointer 架构一同使用的模式的定义必须为由(namespace nameLocalPart)对组成的模式指定名称。

3.4 命名空间与上下文的绑定

为了解释在指针元件中出现的模式名称或者元素名称、属性名称及其它的 QNames 的前缀的目的,模式规格说明可能定义将命名空间[XML-Names]前缀绑定到命名空间名称的方法。这些绑定提供了命名空间与上下文的绑定,而该绑定将应用于生成绑定的指针元件右侧的所有指针元件,除非所述的模式明确地生成的例外。任何关于命名空间绑定模式的文档都必须说明其绑定是否对随后的指针元件保持有效。每个模式的文档都必须 说明是否使用使用命名空间与上下文的绑定。

在下面的例子中,使用了 'xmlns' 模式(参看[XPtrXmlns])在命名空间与上下文的绑定中增加了一个(前缀/命名空间名称)绑定。XPointer 处理器利用该信息来确定 img:rect 是否表示它所支持的模式名称。

#xmlns(img=http://example.org/image)img:rect(10,10,50,50)

在第一个指针元件的求值之前的初始命名空间与上下文的绑定由单个条目组成:xml 前缀绑定到命名空间名称 http://www.w3.org/XML/1998/namespace。命名空间与上下文的绑定需受以下限制;尝试违犯这些限制将对命名空间与上下文的绑定没有效果:

  • xml 前缀绑定到命名空间名称 http://www.w3.org/XML/1998/namespace。 它不能绑定到任何其它的命名空间名称。

  • 命名空间名称 http://www.w3.org/XML/1998/namespace 绑定到 xml 前缀。它不能绑定到任何其它的命名空间名称。

  • xmlns 前缀不能绑定到命名空间名称。

  • 命名空间名称 http://www.w3.org/2000/xmlns/ 不能绑定到任何的前缀。

以三个字母序列x、m、 l 起头的前缀,包括任何的大小写的组合都被保留。除了由 XML 及 XML 相关的规格说明定义外,用户不应该使用它们。

4 字符转义

XPointers 的字符集是[Unicode]。然而, XPointer 语言是设计用在 URI 引用[RFC 2396]和[IRI]引用[ IRI ]环境中的,在这样的环境中需要对特定的字符进行编码及转义。包含有 XPointer 的 XPointer 及 IRI 引用也时常出现在 XML 文档及外部解析过的实体中,而当编码限制了可直接使用的指令表,外部解析过的实体会实行它们自己所需要的转义。 其它的环境下可能需要对 XPointer 应用额外的转义。同样,因为一些字符对 XPointer 的处理是有意义的,需要通过转义来使用这些字符原来的意义。

4.1 上下文转义

在以下上下文中需要对 XPointer 应用各种不同的类型转义:

A. 对 XPointer 有意义的字符的转义

正如在3.1 语法中描述的,不配对的刮弧和音调符号必须转义。

B. IRI 保留字符的转义和编码

定义国际化资源标识符,或 IRI 是一个协议元素,该元素将 URI 的语法扩展到更加宽广的统一码字符[Unicode]指令表。] IRI 引用允许完整的转义的 URI 引用字符的超集,但是,必须转义正常的百分比号(%),因为它在 URI 和 IRI 中作为转义字符。

因此,当指针插入 IRI 引用时,任何出现的百分比号(%必须要转义。其它的字符也可能要转义,虽然并不建议这样做。字符依下列各项来转义:

  1. 每个要转义的字符转换成一个或多个字节的 UTF-8[RFC 2279]。

  2. 所生成的字节是由 URI 转义机制转义的(也就是说,转换成 %HH,HH HH是字节值的十六进制的表示法)。

  3. 原来的字符由生成的字符序列来代替。

例如:% 转换成 %25

C. URI 保留字符的转义和编码

IRI 引用可能转换成 URI 引用而由 URI 解析器使用。URI 引用中所不允许的字符包括所有非 ASCII 字符、以及在[RFC 2396]的第 2.4 节中列出的拒绝接纳的字符,除了在[RFC 2732]中重新允许的数目符(#)、百分号(%)和方括符外。不允许的字符必须依下列各项来转码:

  1. 每个不允许的字符转换成一个或多个的 UTF-8[RFC 2279]字节。

  2. 所生成的字节是由 URI 转义机制转义的(也就是说,转换成 %HH,HH是字节值的十六进制的表示法)。

  3. 原来的字符由生成的字符序列来代替。

D. XML 转义

如果指针出现在 XML 文档或外部解析过的实体中,任何在编码中不能表现的字符必须转义成字符引用,而任何对 XML 的处理来说是重要的任何字符必须在它们出现的地方用像是字符引用或实体引用这样适当的机制来转义。当解析 XML 文档或实体时,这些转义将被保留。一般不建议在 XML 文档之内使用 URI 引用(而用较通用的 IRI 引用)。如果因为一些不可避免的理由,则应用相同的转义机制。

既然 XPointer 处理器只倒转对 XPointer 有意义的字符的转义(A),应用程序必须倒转指针需要的其它任何的编码或转义(如 B、C 或 D)。如果传递给 XPointer 处理器的结果没有遵从本规格说明的 XPointer 语法规则,则是个错误。

4.2 转义的例子

下表显示了在各种包含不配对的括弧、双引号、以及空格符的 XPointer 上下文中的转义。这些例子使用 'xpointer' 模式(参看[XPtrXPointer]),因为在它的模式数据中允许字串字面量。

上下文 符号表示法
初始模式数据 创建之初的 xpointer 模式数据:
string-range(//P,"my favorite smiley :-)")
A. XPointer 按本规格说明所要求,转义了模式数据中带有不配对的括弧:
xpointer(string-range(//P,"my favorite smiley :-^)"))
B. 在 IRI 引用中的指针 与 A 相同(没有找到需要转义的百分比号):
#xpointer(string-range(//P,"my favorite smiley :-^)"))
C. IRI 引用转换成 URI 引用 出现了经过转义的双引号标记 (%22)、空格符 (%20)、和音调符号(%5E):
#xpointer(string-range(//P,%22my%20favorite%20smiley%20:-%5E)%22))
D. 在 XML 文档中的 IRI 引用 使用 XML 预定义的实体 &quot; 转义双引号标记(假定g该指针出现在由双引号引起的属性值里的 IRI 引用中):
#xpointer(string-range(//P,&quot;my favorite smiley :-^)&quot;))

下表显示了包含在各种不同的上下中重音字符的 XPointer 的转义。 假定 XML 文档是用 US-ASCII 编码的,该编码不允许直接地出现字母“é”。

上下文 符号表示法
初始模式数据 创建之初的 xpointer 模式数据:
id('résumé')
A. XPointer XPointer (模式数据里没有需要转义的音调符号或不配对的刮弧):
xpointer(id('résumé'))
B. 在 IRI 引用中的指针 与 A 相同(没有找到需要转义的百分比号):
#xpointer(id('résumé'))
C. IRI 引用转换成 URI 引用 出现的字母(%C3%A9)经过转义:
#xpointer(id('r%C3%A9sum%C3%A9'))
D. 在 XML 文档中的 IRI 引用 代表在 US-ASCII 编码里;用 XML 的实体转义的重音字符:
#xpointer(id('r&#xE9;sum&#xE9;'))

A 参考资料

A.1 标准参考资料

Infoset
John Cowan and Richard Tobin, editors. XML Information Set. World Wide Web Consortium, 2001.
RFC 2119
Scott Bradner, RFC 2119: Key words for use in RFCs to Indicate Requirement Levels. Internet Engineering Task Force, 1997.
RFC 2396
Tim Berners-Lee, Roy Fielding, and Larry Masinter, RFC 2396: Uniform Resource Identifiers. Internet Engineering Task Force, 1995.
RFC 2732
Robert Hinden, Brian Carpenter, and Larry Masinter, RFC 2732: Format for Literal IPv6 Addresses in URL's. Internet Engineering Task Force, 1999.
RFC 2279
François Yergeau RFC 2279: UTF-8, a transformation format of ISO 10646. Internet Engineering Task Force, 1998.
RFC 3023
MURATA Makoto, Simon St.Laurent, and Dan Kohn, RFC 3023: XML Media Types. Internet Engineering Task Force, 2001.
XML
Tim Bray, Jean Paoli, C.M. Sperberg-McQueen, and Eve Maler, editors. Extensible Markup Language (XML) 1.0 (Second Edition). World Wide Web Consortium, 2000.
XML-Names
Tim Bray, Dave Hollander, and Andrew Layman, editors. Namespaces in XML. World Wide Web Consortium, 1999. See also: 中文翻译 [简体中文] ).
XMLSchema
Henry Thompson et al., editors. XML Schema Part 1. World Wide Web Consortium, 2001.
Unicode
The Unicode Consortium The Unicode Standard.

A.2 非标准参考资料

HTML
Dave Raggett, Arnaud Le Hors, and Ian Jacobs. HTML 4.01 Specification. World Wide Web Consortium, 1999.
IRI
Martin J. Dürst and Michel Suignard Internationalized Resource Identifiers (IRI) Internet draft draft-duerst-iri-01, Internet Engineering Task Force, 2002. Work in progress.
RDF
Dave Beckett, editor. RDF/XML Syntax Specification. World Wide Web Consortium, 2001.
SOAP12
Nilo Mitra et al., editors. SOAP Version 1.2 Parts 0, 1, and 2. World Wide Web Consortium, 2001. Work in progress.
XInclude
Jonathan Marsh and David Orchard, editors. XML Inclusions (XInclude) Version 1.0. Work in progress. World Wide Web Consortium, 2001.
XLink
Steve DeRose, Eve Maler, and David Orchard, editors. XML Linking Language (XLink). World Wide Web Consortium, 2001. See also: 中文翻译 [简体中文] ).
XPtrXmlns
Paul Grosso, Eve Maler, Jonathan Marsh, and Norman Walsh, editors. XPointer xmlns() Scheme. See also: 中文翻译 [简体中文] ). World Wide Web Consortium, 2003.
XPtrXPointer
Steven DeRose, Eve Maler, and Ron Daniel Jr., editors. XPointer xpointer() Scheme. World Wide Web Consortium, 2002. Work in progress.