如何在xsd中维护元素版本

时间:2013-02-11 10:52:22

标签: java xsd jaxb versioning

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

1 个答案:

答案 0 :(得分:0)

从你的描述中看起来好像版本之间的差异只是在声明的元素集中,因此我们可以通过删除一些xs:element元素从xsd3派生xsd2,并从dsto派生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工具帮助的情况下自行利用它。