<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的性别初始化为各自的值。
我怎样才能做到这一点?
答案 0 :(得分:0)
您当前的定义是尝试在一个步骤中组合限制(在Gender属性上)和扩展名(添加新属性)。
表示,这不仅会产生您在绑定工具中不喜欢的结果,而且会使模式不符合。如果将两个更改分成两个派生步骤,会发生什么?
<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表面语法中的另一个缺陷)。