我喜欢创建一个具有不同子元素的元素,具体取决于其中一个元素的值。我想知道是否以及如何实现这一目标(最佳解决方案)。
因此,如果Type
为piece
,则必须有Weight
元素。如果Type
为kilogram
或gram
或......则不需要它。
<?xml version="1.0" encoding="UTF-8"?>
<Amounts>
<Amount>
<Type>piece</Type>
<Value>6</Value>
<Weight>
<Value>1.5</Value>
<Type>liter</Type>
</Weight>
</Amount>
<Amount>
<Type>kilogram</Type>
<Value>0.610</Value>
</Amount>
</Amounts>
所以我想我可能会做这样的事情,但我得到错误(见下文)。
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.test.org/amount"
xmlns:amount="http://www.test.org/amount" elementFormDefault='qualified'>
<element name="Amount">
<complexType>
<choice>
<group ref="amount:kilogram" />
<group ref="amount:piece" />
</choice>
</complexType>
</element>
<group name="kilogram">
<sequence>
<element name="Type" fixed="kilogram" />
<element name="Value" type="float" />
</sequence>
</group>
<group name="piece">
<sequence>
<element name="Type" fixed="piece" />
<element name="Value" type="int" />
<element name="Weight">
<complexType>
<sequence>
<element name="Type" type="amount:amountType" />
<element name="Value" type="float" />
</sequence>
</complexType>
</element>
</sequence>
</group>
<simpleType name="amountType">
<restriction base="string">
<enumeration value="kg" />
<enumeration value="g" />
<enumeration value="mg" />
<enumeration value="lb" />
</restriction>
</simpleType>
</schema>
我在第5行遇到的错误是:
此行找到多个注释: - cos-nonambig:“http://www.test.org/amount”:类型和“http://www.test.org/amount”:类型(或替换它们的元素) 小组)违反“独特粒子归因”。验证期间 针对这种模式,将为这两种模式创建歧义 粒子。 - cos-element-consistent:类型'#AnonType_Amount'的错误。名称为“Value”且具有不同类型的多个元素将显示在模型中 基。
答案 0 :(得分:1)
如果你做了&#34;输入&#34;一个属性而不是一个元素,那么你可以使用条件类型赋值在XSD 1.1中完成它。否则,抱歉,你运气不好。