XML命名空间深度解析 —— XML1.0和XML1.1区别

文章 XML命名空间深度解析 —— 命名空间简介 中对XML命名空间进行了简单介绍,本文将会对命名空间在XML1.0 和 XML1.1中的区别进行介绍。让我们从一个小的例子开始命名空间之旅。


例1: XML1.0中命名空间定义为空

<XML version="1.0">

<root xmlns:pre="">

</root>

在该例中,在通过xmlns绑定命名空间的时候,命名空间的url为空,即"",如果试图去解析该文件,将会报出一个错误

The value of the attribute "prefix="xmlns",localpart="pre",rawname="xmlns:pre"" is invalid. Prefixed namespace
bindings may not be empty.


报错的原因是在XML1.0规范明确规定不允许把prefix绑定到空的URL上,所以报错。那在XML1.1中会怎样呢?

例2: XML1.1中命名空间定义为空

<XML version="1.1">

<root xmlns:pre="">

</root>

解析可以发现,没有报错,因为在XML1.1中是允许通过把URL设置成空来解除命名空间和prefix的绑定。


例2: XML1.1中命名空间和prefix解除绑定

<XML version="1.1">

<pre:root xmlns:pre="url">

<ibm xmlns:pre=""/>

</pre:root>

在该例子中,root element里把命名空间rul和pre绑定,也就是在整个root范围内pre都是生效的,但到了root的子element ibm, 使用xmlns:pre=""解除了这种绑定,也就是在ibm这个element范围内,pre将不生效了。这也就是为什么例3中xml文件解析会失败的原因。


例3: XML1.1中命名空间和prefix解除绑定

<XML version="1.1">

<pre:root xmlns:pre="url">

<pre:ibm xmlns:pre=""/>

</pre:root>

对该xml文件的解析将会报出 pre is unbound.

经过以上3个例子,相信大家都了解到了XML1.0和XML1.1中命名空间的区别,那么紧接着的问题就是如果是针对缺省命名空间呢?


例4: XML1.0中缺省命名空间定义为空

<XML version="1.0">

<root xmlns="">

</root>

对该xml文件的解析将会成功,针对缺省命名空间,XML1.0和XML1.1都支持通过空url解除绑定。



例5: XML1.0中解除缺省命名空间绑定

<XML version="1.0">

<root xmlns="url">

<ibm xmlns=""/>

</root>

对该xml文件的解析将会成功,ibm将不属于任何命名空间。

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念