<xs:simpleType name="Gender">
<xs:restriction base="xs:string">
<xs:enumeration value="Male"/>
<xs:enumeration value="Female"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Client"
abstract="true">
<xs:attribute name="LastName"
type="xs:string"
use="optional"/>
<xs:attribute name="FirstName"
type="xs:string"
use="optional"/>
<xs:attribute name="Gender"
type="Gender"
use="required"/>
</xs:complexType>
<xs:complexType name="MaleClient">
<xs:complexContent>
<xs:extension base="Client">
<xs:attribute name="Gender"
type="Gender"
use="required"
fixed="Male"/>
<xs:attribute name="NewMaleProperty"
type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="FemaleClient">
<xs:complexContent>
<xs:extension base="Client">
<xs:attribute name="Gender"
type="Gender"
use="required"
fixed="Female"/>
<xs:attribute name="NewFemaleProperty"
type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
我有一个抽象类(Client),我将该类扩展到两个子类(MaleClient和FemaleClient)。
当我使用当前架构生成类时,会生成一个名为"Gender1"的新属性。我想做的是将MaleClient和FemaleClient的性别初始化为各自的值。
我怎样才能做到这一点?
您当前的定义是尝试在一个步骤中组合一个限制(关于性别属性)和一个扩展(添加新属性)。 这不仅会在绑定工具中产生您不喜欢的结果,还会使架构不符合要求。
如果将这两个更改分为两个派生步骤,会发生什么情况?
<xs:complexType name="MaleClient-0">
<xs:complexContent>
<xs:restriction base="Client">
<xs:attribute name="Gender"
type="Gender"
use="required"
fixed="Male"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="MaleClient">
<xs:complexContent>
<xs:extension base="MaleClient-0">
<xs:attribute name="NewMaleProperty"
type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
最好使中间类型匿名,但这似乎是不可能的(XSD 表面语法中的另一个缺陷)。