XML 命名空间

XML 和 HTML 的根本区别在于:HTML 中的各类标记是已经定义好的、固定的,而 XML 的标记是自定义的、可扩充的。在大型而复杂的 XML 文档中,极可能会出现标记名称相同,然而其所表明的元素意义却各不相同的现象。尤为是将多个 XML 文档组合使用时,出现这种标记名混乱的现象几乎是不可避免的。html

一个命名空间一般是和一个特定的 DTD 对应起来的,某个 DTD 中定义的元素名称集合就是其对应的命名空间中的元素名称集合。在 XML 文档中,对于不一样命名空间的区分很是简单,即对于每一套特定应用的 DTD,赋予它一个独一无二的标识符来表明,若是在文档中使用某个 DTD 中定义的元素,就将该 DTD 的标识符做为元素名或属性名的前导符,这就至关于指明了这些元素的标记名称来自什么地方,或者说归属于哪一个命名空间。编程

因为是经过在元素的标记名前添加一个独特的标识符来代表该标记的归属,于是这个标识符在 XML 文档中应该是惟一的。固然,每个命名空间自己也应该是惟一的。在 XML 规范中,对命名空间的定义采用了一种至关巧妙的方法,即采用 Web 上某个惟一的 URI 来定义不一样的命名空间。这个 URI 能够是 URL,也能够是 URN,并将其与某个特定的命名空间标识符对应起来。网络

定义命名空间spa

命名空间经过给标识名加一个网址(URL)定位的方法来区分这些名称相同的标识。命名空间的定义通常放在元素的开始标记处,其使用的语法格式:code

<标记名 xmlns:标识符="URI">

对上面代码中各名词的含义说明以下:xml

  • “标记名”是用户要在其中定义命名空间的某个元素标记的名称。
  • “xmlns”是定义命名空间时所使用的固定词语,与其后面的标识符之间必须有冒号分割。
  • “标识符”是用户为命名空间定义的对应标识名称,此名称在文档中应该是惟一的,并且不能含有冒号。
  • “URI”即统一资源标识符,一般是这个命名空间的元素在 Web 上所归属的文档的 URL 或 URN。

须要注意的是,命名空间的标识符不容许使用 xml、html、xsl、xmlns 等保留字。此外,定义语句中的 URI 一般只起一个标识的做用,并非真的要从该网络资源获得什么,因此它的精确性并不重要,甚至根本就不存在。htm

示例:blog

<?xml version="1.0" encoding="GB2312"?>
<Films xmlns:films="http:www.bb.com" xmlns:director="http:www.dd.com">
    <Film>
        <films:NAME>钢铁侠</films:NAME>
        <director:NAME>沙恩•布莱克</firector:NAME>
        <Starring>小罗伯特•唐尼</Starring>
    </Film>
</Films>

默认命名空间教程

在实际编程的过程当中,对于一个很长的 XML 文档来讲,若是须要为文档中的每个元素都添加命名空间标识将会是一个很麻烦的事,因此,能够将文档中使用较多的命名空间定义为默认命名空间,并设法使这个默认命名空间与某个元素及其子元素相关联。这样的话,在 XML 文档中为某个元素定义了默认命名空间后,该元素及其全部未加命名空间标识符的子元素都归属于这个默认命名空间,除非它们另外拥有指定的命名空间标识符。资源

默认命名空间也是在元素的起始标记内进行定义的,与定义通常命名空间不一样的是,默认命名空间的定义不使用标识符,具体的定义语法格式以下:

<标记名 xmlns="URI">

示例:

<?xml version="1.0" encoding="GB2312"?>
<Films xmlns="http:www.bb.com" xmlns:director="http:www.dd.com">
    <Film>
        <NAME>钢铁侠</NAME>
        <director:NAME>沙恩•布莱克</firector:NAME>
        <Starring>小罗伯特•唐尼</Starring>
    </Film>
</Films>

一个默认命名空间的做用范围仅限于定义这个命名空间的元素,及其子元素。须要指出的是,定义默认命名空间以后,能够做用到有关的元素,但没法做用到元素所包含的属性。换句话说,对元素的属性来讲是不存在默认命名空间的。

 

本文节选自:《XML 实用教程》 陈做聪、苏静、王龙等编著

相关文章
相关标签/搜索