如果我将XML从“xmlns”更改为没有“xmlns”,它会破坏兼容性吗?

时间:2012-09-26 12:04:39

标签: xml xsd xml-namespaces

假设我的Web服务发出XML,其中“xmlns”,“xmlns:xsi”和“xsi:schemaLocation”设置为不是有效URI的占位符(例如“blahblahblah”),并且一旦使用了该服务许多系统中的一个用户发现他的XML解析器不喜欢占位符。

现在我必须用它做点什么。其中一个选项是删除“xmlns”,“xmlns:xsi”和“xsi:schemaLocation”属性。

删除它们可能会破坏现有用户吗?这样的XML会有效吗?

2 个答案:

答案 0 :(得分:2)

如果您以前在文档元素中有xmlns属性,则意味着所有XML元素(没有前缀)都在命名空间中。如果您现在删除该命名空间,则不再适用,并且任何(名称空间感知)解析器的输出都会更改。有了它,很可能是处理解析数据的程序的行为。

仅作为示例,如果XML元素位于命名空间中,则在Java中使用XPath是不同的:How to query XML using namespaces in Java with XPath?。虽然接受的答案显示了以命名空间无关的方式使用XPath的方法,但大多数程序可能不会使用这种方法。

XML应该仍然有效(实际上格式正确),您可以在支持验证的体面XML编辑器中轻松检查(例如,包括Eclipse)。但是因为你删除了对Schema的引用,验证只会涵盖基本的XML规则(正如我所说的那样,格式良好),而不是Schema设置的规则。

所以简而言之,是的,你可能会破坏你的客户但是,XML(可能)仍然有效。

答案 1 :(得分:1)

如果以前格式良好的XML文件仍然是格式良好的。有效性并不真正适用,因为您没有指向具有xsi:location属性的正确模式文档。

事实上,用户抱怨可能是唯一一个尝试验证文件的人。其余的消费者对占位符做得很好。除非他们拥有专门定制的软件以“识别”你的blahblahblah发明,否则它们可能完全没有这些属性规范。