1

次の XSD があります。

<element name="OrderElement" type="tns:OrderType"></element>

<complexType name="OrderType">
    <sequence>
        <element name="Name" type="tns:NameType"></element>
        <element name="Address" type="tns:AddressType"></element>
    </sequence>
</complexType>

<complexType name="NameType">
    <sequence>
        <element name="FirstName" minOccurs="1" maxOccurs="1" type="string">
        </element>
        <element name="Surname" minOccurs="1" maxOccurs="1" type="string">
        </element>
    </sequence>
</complexType>

<complexType name="AddressType">
    <sequence>
        <element name="AddressLine1" minOccurs="1" maxOccurs="1"
            type="string">
        </element>
        <element name="AddressLine2" minOccurs="1" maxOccurs="1"
            type="string">
        </element>
        <element name="Country" minOccurs="1" maxOccurs="1"
            type="tns:CountriesDeliveryType">
        </element>
    </sequence>
</complexType>

<complexType name="CountriesDeliveryType">
    <choice minOccurs="1">
        <element name="USA" type="string" maxOccurs="1" minOccurs="0"></element>
        <element name="Brazil" type="string" maxOccurs="1" minOccurs="0"></element>
        <element name="China" type="string" maxOccurs="1" minOccurs="0"></element>
    </choice>
</complexType>

私がやりたいことは、コード全体で国を再利用できるように、複雑な型を持つことです。私が抱えている問題は、国を削除すると XML 内で検証されることです。

<?xml version="1.0" encoding="UTF-8"?>
<tns:OrderElement xmlns:tns="http://www.example.org/NewXMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/NewXMLSchema NewXMLSchema.xsd ">
  <tns:Name>
    <tns:FirstName>tns:FirstName</tns:FirstName>
    <tns:Surname>tns:Surname</tns:Surname>
  </tns:Name>
  <tns:Address>
    <tns:AddressLine1>tns:AddressLine1</tns:AddressLine1>
    <tns:AddressLine2>tns:AddressLine2</tns:AddressLine2>
    <tns:Country>
      <tns:USA>tns:USA</tns:USA>
    </tns:Country>
  </tns:Address>
</tns:OrderElement>

つまり、削除し <tns:USA>tns:USA</tns:USA> ても検証されます。

私はこれを何年も調べてきましたが、解決策に出くわしていません。それはおそらく単純なことですが、うまくいかないようです。助言がありますか?

4

1 に答える 1

1

それはすべてあなたの中にありますminOccurs="0"。このため、すべての国を同時に設定することはできません。修正は次のようになります

<complexType name="CountriesDeliveryType">
    <choice minOccurs="1" maxOccurs="3">
        <element name="USA" type="string" maxOccurs="1" minOccurs="1"></element>
        <element name="Brazil" type="string" maxOccurs="1" minOccurs="1"></element>
        <element name="China" type="string" maxOccurs="1" minOccurs="1"></element>
    </choice>
</complexType>

ただし、まだ 2 つの<USA>要素が存在する可能性があります。

于 2013-10-22T01:19:04.167 に答える