xml - 如果 XSD 定义了 targetNamespace,是否可以验证没有命名空间的 XML 文档?

标签 xml namespaces xml-namespaces jaxb2 xsd-validation

我正在重写的遗留应用程序现在定义了具有 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 消息在哪些情况下或选项仍然可以根据模式成功验证?我有点怀疑(我认为不应该,这正是模式定义 namespace 的原因),但是,这可能吗?如果没有,就我而言,最简单的解决方案是删除 targetNamespace来自 XSD 的声明,它不会改变并且会被废弃。

最佳答案

您的实例对架构无效,因为它使用了不同的命名空间。

这几乎是有效的,如果正如您所说的命名空间是唯一的区别;如果您想消除这种差异,则必须在验证之前更改实例,或者更改模式。两者都可以使用 XSLT 轻松完成;更改实例可能更容易。

关于xml - 如果 XSD 定义了 targetNamespace,是否可以验证没有命名空间的 XML 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25903475/

相关文章:

XML 文档默认命名空间

c# - 在 .NET 中将 List<object> 序列化为 XML 时如何重命名根节点?

kubernetes - 如何终止 Kubernetes 命名空间?

clojure 将协议(protocol)定义保存在与实现不同的命名空间中

xml - 我们可以更改 JDOM 中的 XML 命名空间变量名称吗?

xml - IMPORTXML 不选择第一个元素

c# - 为大型 XML 文件生成数字 XML 签名

algorithm - 为什么我们应该在 <algorithm> 头的函数之前使用 std 命名空间而不应该在 <cmath> 头的函数之前使用它?

php - 命名空间的 XPath 搜索每隔一个节点选择一次

java - 使用 SOAP 和 Java 添加 xmlns 命名空间的问题