我想要完成的是创建一个 XML 模式,该模式描述了一个可以采用两种形式之一的 XML 文件。两者之间有一部分共同元素,然后是不同的一小部分。就像是:
<Dessert>
<Identifier> Hot Fudge Sundae </Identifier>
<SaleDate> 2013-06-03 </SaleDate>
<Duration> 2 </Duration>
<Size> SuperScooper </Size>
</Dessert>
<Dessert>
<Identifier> Dutch Apple Pie </Identifier>
<SaleDate> 2013-06-03 </SaleDate>
<Duration> 1 </Duration>
<AlaMode> 1 </AlaMode>
<IceCreamFlavor> Vanilla </IceCreamFlavor>
</Dessert>
所以对于冰淇淋甜点只有一个大小,而对于馅饼有一个AlaMode指示器和一个IceCreamFlavor说明符。
我想要完成的是使用说明xs:choice
符来指示Dessert
XML 将有一个或另一个(Size
或AlaMode
和IceCreamFlavor
),以便我可以验证它们。
我试图做的是创建两种类型并执行以下操作:
然后执行以下操作:
<xs:choice>
<xs:element name="Sundae" type="SundaeType" />
<xs:element name="Pie" type="PieType" />
</xs:choice>
当然,生成的 XML 具有如下布局:
<Dessert>
<Identifier> Hot Fudge Sundae </Identifier>
<SaleDate> 2013-06-03 </SaleDate>
<Duration> 2 </Duration>
<Sundae>
<Size> SuperScooper </Size>
<Sundae>
</Dessert>
这与现有的文件结构不匹配。
我可以简单地合并所有可能的元素并取消这些东西,但这实际上并没有传达格式的期望(例如,圣代有一个元素xs:choice
是无效的)。AlaMode
有没有办法做到这一点?我怀疑如果我只有一个不同的领域,我可以用xs:choice
(也许)来完成这一点,而没有那个额外的水平。或者,也许我只是在这里遗漏了一些东西。
是的,我意识到布局不是最好的,但它是一种现有的格式,我现在可以真正改变它。