簡體   English   中英

使用xsd在抽象類中的擴展complexType中初始化Enum

[英]Initialize Enum in extension complexType in an abstract class with xsd

<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>

我有一個抽象類(客戶端),並且將該類擴展為兩個子類(MaleClient和FemaleClient)。

當我使用當前架構生成類時,將生成一個名為“ Gender1”的新屬性。 我想做的是將MaleClient和FemaleClient的性別初始化為各自的值。

我該如何實現?

您當前的定義試圖在一個步驟中組合一個限制(對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表面語法的另一個缺陷)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM