具有 3 个不同名称空间且无前缀的 XML 模式

问题描述 投票:0回答:1

我需要生成一个模式,该模式将生成具有 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>

xml xsd xml-namespaces map-force
1个回答
0
投票

XML 1,使用默认命名空间声明

<Data xmlns="namespace1">
 --elements--
 <Body>
  <Header xmlns="namespace2">
     --elements--
  </Header>
  <Doc xmlns="namespace3">
     --elements--
  </Doc>
 </Body>
</Data>

XML 2,使用命名空间前缀声明

<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 级)工具,以实现你的错误目标。

© www.soinside.com 2019 - 2024. All rights reserved.