我需要生成一个模式,该模式将生成具有 3 个不同名称空间的 XML 输出,但不应有任何前缀用于引用元素或名称空间。更具体地说,它是与 SWIFT Alliance Access (SAA) 一起使用的 ISO20022 SWIFT 消息。下面是一个例子。我怎样才能实现这个输出?
<Data xmlns="namespace1">
--elements--
<Body>
<Header xmlns="namespace2">
--elements--
</Header>
<Doc xmlns="namespace3">
--elements--
</Doc>
</Body>
</Data>
我尝试通过 xs:import 创建架构,其中 Header 和 Doc 是单独的 XSD。我设法得到的最接近的是下面的输出,其中 Doc 下的元素包含 n0 前缀。请注意,我将架构与名为 Mapforce 的应用程序一起使用,并且 n0 前缀是自动分配的。
<Data xmlns="namespace1">
--elements--
<Body>
<Header xmlns="namespace2">
--elements--
</Header>
<Doc xmlns="namespace3">
<n0:--elements-->
</Doc>
</Body>
</Data>
<Data xmlns="namespace1">
--elements--
<Body>
<Header xmlns="namespace2">
--elements--
</Header>
<Doc xmlns="namespace3">
--elements--
</Doc>
</Body>
</Data>
<ns1:Data xmlns:ns1="namespace1">
--elements--
<ns1:Body>
<ns2:Header xmlns:ns2="namespace2">
--elements--
</ns2:Header>
<ns3:Doc xmlns:ns3="namespace3">
--elements--
</ns3:Doc>
</Body>
</Data>
XML 1 与 XML 2 无法在 XSD 级别进行控制。
下面的 XML 1 和 XML 2 完全等效。任何符合规范的 XML 应用程序都不会以任何不同的方式对待它们。如果您的应用程序需要其中之一,那么它就损坏了。修理它。不要通过迎合问题来使问题永久化。
如果你说这超出了你的控制范围,那就诅咒责任方,并准备好与特定于应用程序的序列化配置进行斗争,或者在最坏的情况下恢复到文本级(而不是 XML 级)工具,以实现你的错误目标。