2.4 常见的命名空间

XML格式采用的命名空间标准,可能有成百上千。本节只讨论一些最常见的命名空间。

1.“xml:”命名空间

“xml:”命名空间是一个特例。在每个XML文档中,前缀名“xml”都已经被隐式地绑定到URI http://www.w3.org/XML/1998/命名空间,这是硬编码到所有XML解析器的,用户不必自己声明。这意味着用户可以在自己的XML文档中使用各种特殊属性,如使用xml:lang来设置元素的本地化语言信息。例如,使用如下代码来实现在文档中保存多国语言短语。

<phrases>
    <phrase id="1">
        <text xml:lang="en-gb">Please choose a colour</text>
        <text xml:lang="en-us">Please choose a color</text>
        <text xml:lang="zh-CN">请选择颜色</text>
    </phrase>
    <phrase id="2">
        <text xml:lang="en-gb">How large is your organisation?</text>
        <text xml:lang="en-us">>How large is your organization?</text>
        <text xml:lang="zh-CN">你的公司规模多大?</text>
    </phrase>
</phrases>

内置属性名称以“xml:”作为前缀,自定义的属性名不能以“xml:”作为前缀,否则在解析时将发生错误。

在“xml:”命名空间可能遇到的其他属性和标识符还包括:

·xml:space。用于设置下游应用程序应该如何处理解析器传递的空格等字符。xml:space是一个Enumerated类型的属性,它的属性值只能是default或preserve。default表示应用程序可以自行处理空格等字符,preserve则表示应用程序应把空格等字符作为普通文本字符来处理。格式如下。

<网址 xml:space="preserve">    www.it315.org   </网址>

·xml:base。提供了一种通过显式的方式指定一个基准URI(base URI),并通过此基准URI来解析指向外部资源的相对URI的方式。以下示例展示了xml:base的应用。

<?xml version="1.0"?>
  <doc xml:base="http://example.org/today/"
   xmlns:xlink="http://www.w3.org/1999/xlink">
   <head>
    <title>Virtual Library</title>
   </head>
   <body>
    <paragraph>See <link xlink:type="simple"  xlink:href="new.xml">what's
      new</link>!</paragraph>
    <paragraph>Check out the hot picks of the day!</paragraph>
    <olist xml:base="/hotpicks/">
    <item>
     <link xlink:type="simple" xlink:href="pick1.xml">Hot Pick #1</link>
    </item>
    <item>
     <link xlink:type="simple" xlink:href="pick2.xml">Hot Pick #2</link>
    </item>
   <item>
    <link xlink:type="simple" xlink:href="pick3.xml">Hot Pick #3</link>
    </item>
    </olist>
   </body>
  </doc>

上例中的URI被解析为下列完整的URI。

“what's new”被解析为URI "http://example.org/today/new.xml"

“Hot Pick #1”被解析为URI "http://example.org/hotpicks/pick1.xml"

“Hot Pick #2”被解析为URI "http://example.org/hotpicks/pick2.xml"

“Hot Pick #3”被解析为URI "http://example.org/hotpicks/pick3.xml"

·xml:id。用于表示XML文档元素的唯一标识符。应用程序将所有指定为xml:id的属性视为唯一标识符。

目前只有3个有关XML的规范XLink、XML InfoSet和Cannonical XML是基于XML Base的,将其作为它们标准引用的一部分。

2.xmlns命名空间

xmlns是xml namespace的缩写。xmlns前缀用于声明XML文档的命名空间,xmlns被绑定到URI http://www.w3.org/2000/xmlns/命名空间,这是硬编码到XML解析器。xmlns属性可以在文档中定义一个或多个可供选择的命名空间。该属性可以放置在文档内任何元素的起始标签中。该属性的值类似于URL,它定义了一个命名空间,浏览器会将此命名空间用于该属性所在元素内的所有内容。

3.XML模式(XML Schema)命名空间

此命名空间具有URI,http://www.w3.org/2001/XMLSchema,被用于模式文档中(模式文档用于描述特定的XML格式的合法结构模式)。这个命名空间中包含“W3C XML模式结构规范”和“W3C XML模式数据类型规范”中定义的元素、属性和数据类型,如十进制数据、字符串和布尔值。习惯上常将前缀xs或xsd绑定到此命名空间,但是这纯粹是个人的选择。除了前缀xml和xmlns外,用户可以选择任何自己喜欢的前缀来绑定到命名空间。所以,像下面这样的代码也是完全可以接受的。

<myLongPrefix:schema
    xmlns:myLongPrefix="http://www.w3.org/2001/XMLSchema">
    <!-- rest of document here -->
</myLongPrefix:schema>

4.XSLT命名空间

XSLT主要用于将XML文档转换成不同的格式,如其他格式的XML文档、HTML文档,或纯文本文件。XSLT命名空间的URI是http://www.w3.org/1999/XSL/Transform,常用xsl或xslt前缀来绑定到此命名空间。