如果我将我的XML从;xmlns";没有;xmlns";它会破坏兼容性吗?

如果我将我的XML从;xmlns";没有;xmlns";它会破坏兼容性吗?,xml,xsd,xml-namespaces,Xml,Xsd,Xml Namespaces,假设我的web服务发出XML,其中“xmlns”、“xmlns:xsi”和“xsi:schemaLocation”设置为无效URI的占位符(例如“blahblahblah”),并且一旦该服务从多个系统中使用,其中一个用户发现他的XML解析器将不喜欢占位符 现在我得做点什么了。其中一个选项是删除“xmlns”、“xmlns:xsi”和“xsi:schemaLocation”属性 删除它们可能会破坏现有用户吗?这样的XML有效吗?如果您以前在文档元素中有一个xmlns属性,这意味着所有XML元素(没

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

现在我得做点什么了。其中一个选项是删除“xmlns”、“xmlns:xsi”和“xsi:schemaLocation”属性


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

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

例如,如果XML元素位于命名空间中,则在Java中使用XPath是不同的:。尽管公认的答案显示了一种以与名称空间无关的方式使用XPath的方法,但大多数程序可能不会使用这种方法

XML应该仍然有效(实际上格式良好),您可以在一个支持验证的像样的XML编辑器(例如包括Eclipse)中轻松地检查它。但是,由于删除了对模式的引用,验证将只覆盖基本的XML规则(正如我所说的,格式良好),而不是模式设置的规则


因此,简而言之,是的,您可以中断您的客户机,但是是的,XML(可能)仍然有效。

如果XML文件以前的格式正确,那么它们的格式仍然正确。有效性实际上并不适用,因为您没有使用xsi:location属性指向正确的模式文档


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

三分之二是正确的。OP所描述的名称空间切除确实应该使XML保持良好的格式,而且它确实可能破坏数据的下游消费者。但是数据几乎肯定不再有效,因为有效并不意味着“XML规范允许”;它的意思是“根据模式或DTD进行更正”。从理论上讲,模式可以同时接受名称空间限定输入和非限定输入,但很少有模式接受。感谢您的澄清。如“(实际上格式良好)”所示,我在这里相当非正式地使用了“有效”一词。