| 文章首页 |
|---|
| W3C官方XML命名空间介绍中文版 |
| 1 动机和摘要 |
| 2 声明命名空间 |
| 3 XML的合法名 |
| 4 使用合法名 |
| 5 命名空间在元素和属性中的运用 |
| 6 文件的一致 |
| 附录 |
A XML命名空间的内部结构(非标准)
A.1 传统命名空间的不足
在计算学科里,“命名空间”一般指一个命名集合,就是说一个没有重复的集合。可是,以这样一种命名空间来对待用于 XML 标注的名字将很大程度的损害它的可用性。在XML 文档中,这样的名字的基本用途是由诸如询问处理器,式样驱动表达引擎,模式驱动校验器的软件模块来鉴别文档的逻辑结构。考虑如下例子:
<section><title>Book-Signing Event</title>
<signing>
<author title="Mr" name="Vikram Seth" />
<book title="A Suitable Boy" price="$22.95" /></signing>
<signing>
<author title="Dr" name="Oliver Sacks" />
<book title="The Island of the Color-Blind" price="$12.95" /></signing>
</section>
在这个例子里,名字 title 三次出现在标注之中。 名字自己不能为软件模块提供足够的信息来保证正确的处理。
另一问题存在於使用全局属性,表现在如下例子中,一个用CSS文体来表达的XML文件片断:
<RESERVATION>本例中,CLASS 属性描述票价等级并有值“J”,“Y”, 和“C”, HTML:CLASS 属性用来模仿 HTML 语法的丰富性,并通过生成子类来弥补有限的元素指令表;这两种属性在所有语义层面上都是不同的。
<NAME HTML:CLASS="largeSansSerif">Layman, A</NAME>
<SEAT CLASS="Y" HTML:CLASS="reallyImportant">33B</SEAT>
<DEPARTURE>1997-05-24T07:55:00+1</DEPARTURE></RESERVATION>
XML 1.0 没有提供内置的办法来声明“全局”属性,只有在通过HTML 应用程序而来的它们的文章描述和解释中,如上述 HTML CLASS 属性的项才为全局的。
A.2 命名空间分区
为了支持合法名和非合法名都能满足它们预期目的的目标,我们把在 XML 命名空间里出现的名字认定成为属於几种相互无关的传统 (亦即集合结构的) 命名空间中的一种,称之为命名空间分区,这些分区如下:
全部元素类型分区
XML命名空间里的全部元素类型出现在这一分区当中,每个元素有一个唯一的局域部分; 命名空间名字和局域部分的联合唯一地确定了该元素类型。
全局属性分区
本分区包含了所有在本命名空间里被定义成全局的属性名。一个全局属性的唯一必要的特徵是它的名字在全局属性分区中为唯一的。本规格说明没有对这样属性的正确使用做出声明。命名空间名字和属性名字的联合唯一地确定了该全局属性。
单元素类型分区
全部元素类型分区里每一种类型都有相关命名空间,在该命名空间出现该元素的非合法属性名字。这是一个传统命名空间,因为 XML 1.0 禁止在一个元素上属性名字的重复出现。带有元素类型的属性名和命名空间名字的联合唯一地确定了每一种非合法的属性。
在与本规格说明相符的 XML 文件中,所有合法的 (有前缀的) 属性都属於全局属性分区,所有非合法属性都归属於相应的单元素类型分区。
A.3 扩展元素类型及属性名
为了便於详细说明规则和做比较,我们在这里定义了以 XML 元素句法表示的在 XML 文档里的元素类型及属性名的扩展形式。
定义:扩展元素类型被表示为类型 ExpEType 的一个空XML元素。它要求有一 type 属性,该属性给出类型的局域部分 LocalPart,并且,如果元素是合法的话,则有一可选 ns 的属性来给定它的命名空间名字。
定义:扩展属性名被表示为类型 ExpAName 的一个空XML单元。它要求有一 name 属性,该属性给出名字。如果属性是全局的,它要求有一 ns 来给出属性命名空间名字;否则,它则要求有属性 eltype 来给出所依附的元素的类型,并且,如果知道所依附的元素的话,可选的属性 elns 来给出该元素的命名空间名字。
在上列例子中作稍微的变化将说明扩展的元素类型及属性名是如何工作的。以下两个片段后紧接着的表格显示了名字的扩展:
<!-- 1 --> <section xmlns='urn:com:books-r-us'>
<!-- 2 --> <title>Book-Signing Event</title>
<!-- 3 --> <signing>
<!-- 4 --> <author title="Mr" name="Vikram Seth" />
<!-- 5 --> <book title="A Suitable Boy" price="$22.95" />
</signing>
</section>
名字将扩展如下:
Line Name Expanded
1 section <ExpEType type="section" ns="urn:com:books-r-us" />
2 title <ExpEType type="title" ns="urn:com:books-r-us" />
3 signing <ExpEType type="signing" ns="urn:com:books-r-us" />
4 author <ExpEType type="author" ns="urn:com:books-r-us" />
4 title <ExpAName name='title' eltype="author" elns="urn:com:books-r-us" />
4 name <ExpAName name='name' eltype="author" elns="urn:com:books-r-us" />
5 book <ExpEType type="book" ns="urn:com:books-r-us" />
5 title <ExpAName name='title' eltype="book" elns="urn:com:books-r-us" />
5 price <ExpAName name='price' eltype="book" elns="urn:com:books-r-us" />
<!-- 1 --> <RESERVATION xmlns:HTML="http://www.w3.org/TR/REC-html40">
<!-- 2 --> <NAME HTML:CLASS="largeSansSerif">Layman, A</NAME>
<!-- 3 --> <SEAT CLASS="Y" HTML:CLASS="largeMonotype">33B</SEAT>
<!-- 4 --> <HTML:A href='/cgi-bin/ResStatus'>Check Status</HTML:A>
<!-- 5 --> <DEPARTURE>1997-05-24T07:55:00+1</DEPARTURE></RESERVATION>
1 RESERVATION <ExpEType type="RESERVATION" />
2 NAME <ExpEType type="NAME" />
2 HTML:CLASS <ExpAName name="CLASS" ns=http://www.w3.org/TR/REC-html40 />
3 SEAT <ExpEType type="SEAT" />
3 CLASS <ExpAName name="CLASS" eltype="SEAT">
3 HTML:CLASS <ExpAName name="CLASS" ns="http://www.w3.org/TR/REC-html40" />
4 HTML:A <ExpEType type="A" ns="http://www.w3.org/TR/REC-html40" />
4 HREF <ExpAName name="HREF" eltype="A" elns="http://www.w3.org/TR/REC-html40" />
5 DEPARTURE <ExpEType type="DEPARTURE" />
A.4 唯一的扩展属性名
由上面 5.3 属性的单一性描述的限制可以通过要求没有元素有两个属性扩展后的名字是相等的, 也就是说,即有同样的属性-值对,直接地来实现。
B 致谢(非标准)
本工作是许许多多的人贡献的结果,特别包括万维网协会 XML 工作组,和特别兴趣工作组及 W3C Metadata 活动组。微软的 Charles Frankston 作出了特别珍贵的贡献。
C 参考书目及文章
RFC2141
IETF (Internet Engineering Task Force) RFC 2141: URN Syntax, ed. R. Moats. May 1997.
RFC2396
IETF (Internet Engineering Task Force) RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, eds. T. Berners-Lee, R. Fielding, L. Masinter. August 1998.
XML
Extensible Markup Language (XML) 1.0, eds. Tim Bray, Jean Paoli, and C. M. Sperberg-McQueen. 10 February 1998. Available at http://www.w3.org/TR/REC-xml.
(THE END)
如果你喜欢这篇文章,请阅读本文相关的下列内容:
