显然,这是有效的XML文档(从http://www.lenzconsulting.com/namespaces/复制)。
<?xml version="1.1"?>
<my:doc xmlns:my="http://xmlportfolio.com/xmlguild-examples">
<simple xmlns:my="">
<remark>We don't use namespaces.</remark>
</simple>
</my:doc>
但是,它似乎违反了Namespace 1.1规范中的“ Prefix Declared”命名空间约束。
命名空间约束:前缀已声明
除非是xml或xmlns,否则名称空间前缀必须已在使用前缀的元素的起始标签或祖先元素(即在其内容中带有前缀标记的元素)的名称空间声明属性中进行了声明。 )。此外,最里面的此类声明中的属性值不得为空字符串。
注意最后一句“最里面的这样的声明中的属性值不能为空字符串”,以及它如何应用于上述文档元素中的my:
未声明simple
。当然这是最内在的声明了吗?
我的理解是,除非您有一个子元素可以重新声明前缀,否则您不能取消声明前缀。
是的,根据命名空间1.1,它是有效的(技术上来说,是“格式正确的命名空间”)
您引用的规则是指元素和属性名称(例如my:element或my:attribute)的有效性,并且是与此类名称中前缀“ my”的有效性有关的规则。您没有任何带有前缀“ my”的元素或属性,名称空间声明xmlns:my是最里面的声明,因此您没有违反规则。
未声明的值很小。这是一个很大的错误:为了解决一个小问题,在规范中增加了痛苦的部分。微小的问题是“命名空间污染”:例如,如果将一些XML有效负载包装在SOAP信封中,则SOAP名称空间会渗透到您的有效负载中,而当提取有效负载时,很难摆脱SOAP名称空间。命名空间声明旨在解决该问题。但是它几乎从未使用过,因为在实践中,每个人都会忽略不必要的未使用的命名空间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句