【发布时间】:2012-09-11 20:41:15
【问题描述】:
我有一个对象有 3 个属性: 1) 动作 2) 身份证 3) 名称
Action 可以是 Update 或 Remove 并且是强制性的。 ID 是一个 int 并且是强制性的。 name 是一个字符串,在Action=Remove 时是可选的,在Action=Update 时是必需的。
如何在 XSD 中描述这一点? 谢谢!
吉姆
这是我目前所拥有的:
<s:element name="UpdateAccount">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="myAccount" type="tns:WSUpdate" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="WSUpdate">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="ID" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="Name" nillable="false" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="action" type="tns:UpdateAction" />
</s:sequence>
</s:complexType>
<s:simpleType name="UpdateAction">
<s:restriction base="s:string">
<s:enumeration value="Update" />
<s:enumeration value="Remove" />
</s:restriction>
</s:simpleType>
编辑于 2012 年 9 月 12 日@美国东部标准时间上午 9:28: 在做了更多的思考之后,我已经修补了一些东西。这不是我想要的,但可能足够接近我的客户接受。它并没有完全进入条件细节,但它确实为客户提供了结构定义。你怎么看?
<s:element name="UpdateAccount">
<s:complexType>
<s:sequence>
<s:choice>
<s:element minOccurs="0" maxOccurs="1" name="myAccount" type="tns:WSUpdate" />
<s:element minOccurs="0" maxOccurs="1" name="myAccount" type="tns:WSDelete" />
</s:choice>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="WSUpdate">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="ID" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="Name" nillable="false" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="action" type="tns:UpdateAction" />
</s:sequence>
</s:complexType>
<s:complexType name="WSDelete">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="ID" type="s:int" />
<s:element minOccurs="0" maxOccurs="1" name="Name" nillable="true" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="action" type="tns:UpdateAction" />
</s:sequence>
</s:complexType>
<s:simpleType name="UpdateAction">
<s:restriction base="s:string">
<s:enumeration value="Update" />
<s:enumeration value="Remove" />
</s:restriction>
</s:simpleType>
【问题讨论】:
-
根据我的经验,您不使用 XSD 来定义元素的情况,而只是定义元素/属性应该相互关联的方式,而不管它们的值如何。因此,如果您遇到根据某些情况需要 3 个属性/元素是可选/必需的情况,您需要针对这些独特情况进行设计。