1

我有 3 个不同的 xsd。xsd2 是 xsd1 的超集。xsd3 是 xsd2 的超集。我有所有 3 个不同的客户端,它们可能属于任何一个 xsds。对于他们使用他们的 xsd 提出的每个 xml 请求,我必须生成一个 xml 响应。我想如果我在某个地方维护哪个元素,哪个版本支持元素属性,然后基于该列表,我可以选择使用 xsd3 填充或不填充该元素。在服务器上,我正在考虑使用 xsd3。因此使用版本列表,我将能够生成可由 xsd1 和 xsd2 解析的 xml。我想在 xsd 本身内部维护这个元素版本映射。我怎么做?我在服务器端使用 jaxb 进行 xml 解析

4

1 回答 1

0

从您的描述看来,版本之间的差异似乎只是在声明的元素集合中,因此我们可以通过删除一些 xs:element 元素从 xsd3 派生 xsd2,并且从 xsd2 派生 xsd1 也是如此。

在这种假设下,管理元素-版本映射的最简单方法是将某个非 XSD 命名空间中的属性添加到每个元素声明,指定哪些版本包含/支持该元素。

<xs:element name="E" type="tns:T" my:versions="1"/>
<xs:element name="F" type="tns:T2" my:versions="1 2 3"/>
<xs:element name="G" type="tns:T3" my:versions="1 2"/>
<xs:element name="H" type="tns:T4" my:versions="1"/>

您还可以使用 xs:annotation/xs:appinfo 来管理更复杂的信息。

这些是否为您提供所需的东西取决于您的 XSD 工具提供的接口,或者取决于您从模式文档中提取信息并在没有 XSD 工具帮助的情况下自行利用它的能力。

于 2013-02-11T16:47:05.307 回答