使用XML名称空间前缀和指定xmlns =“blah”作为属性之间的区别

时间:2011-12-21 22:53:25

标签: xml xml-namespaces

下面的xml片段与命名空间有什么区别(如果有的话)?

Form1中

<prf:XmlElement1 xmlns:prf="namespacename">
   ...snip...
</prf:XmlElement1>

窗体2

<XmlElement1 xmlns="namespacename">
   ...snip...
</XmlElement1>

我正在与一个Web服务进行交互,当它的名称空间在Form2中被描述时,该服务会阻塞元素,但如果名称空间在Form1中描述则可以正常工作。不幸的是,我无法说服我的Web服务框架发出像Form1这样的元素;到目前为止我能得到的最好的是Form2。在我看来,两种形式都正确地指定了命名空间,这可能是Web服务方面的一个错误。

1 个答案:

答案 0 :(得分:3)

@marc_s已在他的评论中解释了有什么区别。

同样@JohnSaunders可能是正确的,因为服务被破坏了。使用默认命名空间打破文档的一个可能原因是服务可能依赖于硬编码的命名空间前缀。您可以通过为它提供一个文档来验证这一点,该文档使用相同的命名空间,但前缀不同于prf(或者它总是使用的任何东西)。另请注意,如果您没有为前缀声明命名空间,请确保在元素名称或属性名称中的任何位置都不使用该前缀。使用未声明的前缀会使您的文档(命名空间)格式不正确。

如果使用DTD验证文档,那么功能正常的XML服务可能依赖于固定的名称空间前缀。与其他模式语言不同,DTD不支持名称空间,因此处理名称空间声明很困难,因此声明的位置和前缀可能是固定的。