| 文章首页 |
|---|
| XML Namespace命名空间上手指南 |
| 什么是命名空间(Namespace) |
| XML为什么需要命名空间? |
| XML命名空间的语法规则 |
| 解析器是怎样处理XML命名空间的? |
| 命名空间和DTD |
| 命名空间和XML模式 |
页5 共7页
命名空间是在XML 1.0后才加到规格书中。然而,设计时考虑到要保证往后的相容性。因此,不懂得命名空间的XML1.0解析器,也不会在读取那些用到命名空间的文件时,遇到麻烦。因为冒号在XML1.0的元素和属性名称里,是合法的字元,所以旧版本的解析器只会回报某些名称包含了冒号。唯一可能的问题出在,当不同的全称名称被解析成同一个完整名称,或当同样的全称名称,在文件的不同处,表示了不同的完整名称。一个看得懂命名空间的解析器,会在它所执行的正常结构良好性检查之外,加上几种检查,特别是它会确定所有的前置字都对应到URI。使用了未对应前置字的文件会被丢弃,除非是以XML 1.0或XML规格书里命名空间所规定之方式使用的xml和xmlns。此外,它会丢弃名称中包含了多于一个冒号的元素或属性。除此之外,它的功能几乎完全像是一个不懂命名空间的解析器。其它位于纯粹XML解析器之上的软体(例如,一个XSLT引擎),可能以不同方式看待元素,完全看它们所属于的命名空间。然而,只要合乎所有的结构良好性和命名空间限制,XML解析器本身通常不在意命名空间这回事。
有个例外可能会发生在不太可能发生的情形─具有不同前置字的元素却属于同一个命名空间。在这种情况下,懂得命名空间的解析器会回报这些元素是一样的,而不懂得命名空间的解析器则认为它们是不同的。同样不太可能的情形是,当两个有相同全称名称的元素或属性,却在不同的命名空间之中,因为相同的前置字,在文件的不同处,代表了不同的URI。比较有可能发生的是:在不同的预设命名空间中,有两个没有前置字的名称。这两种情形,懂得命名空间的解析器会认为它们是不同的;而不懂命名空间的解析器则把当它们当成一样。许多解析器让你视情况开启或关闭处理命名空间的功能。
如果你喜欢这篇文章,请阅读本文相关的下列内容:
比本文新的文章:
