我正在重写的遗留应用程序现在定义了有XSD的入站XML消息。
架构如下:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/myapp">
<xsd:element name="my-root">...</xsd:element>
但是,XML消息不包含xmlns
声明。他们直接使用<my-root>
,而不是<myns:my-root xmlns:myns="http://www.example.com/myapp">
。除此之外,结构是正确的。
新应用程序将使用JAXB2(可以使用其他应用程序,如果需要,我们使用Spring O / X)。
现在的问题,与标题中的相同:是没有命名空间声明的XML消息仍能成功验证模式的情况或选项吗?我有点怀疑(我认为它不应该,这正是模式定义命名空间的原因)但是,它是否可能?如果没有,我的最简单的解决方案是从XSD中删除targetNamespace
声明,它不会改变,它将被废弃。
答案 0 :(得分:0)
您的实例对架构无效,因为它使用不同的命名空间。
它几乎是有效的,如果你说的命名空间是唯一的区别;如果要对这种差异进行折扣,则必须在验证之前更改实例,或者更改架构。两者都可以使用XSLT轻松完成;更改实例可能更容易。