Кардинальность элемента XSD - как моделировать «Одно из полей является обязательным» - PullRequest
2 голосов
/ 21 октября 2011

В моем элементе XSD я должен сделать «одно из полей fieldA или filedB обязательным».

So far i have this:


<xsd:complexType name="Test">
            <xsd:sequence>
                <xsd:element name="fieldA" maxOccurs="1"    minOccurs="0"/>
                <xsd:element name="fieldB" maxOccurs="1" minOccurs="0"/>
            </xsd:sequence>
</xsd:complexType>

Как задать количество элементов для этих 2 полей, чтобы одно из них было обязательным?

Большое спасибо за ваше время и усилия!

Ответы [ 2 ]

6 голосов
/ 21 октября 2011

Используйте <xsd:choice> вместо <xsd:sequence> и отбросьте minOccurs="0"

Пример кода, который требует одно из полей

<xsd:complexType name="Test">
    <xsd:choice>
        <xsd:element name="fieldA"/>
        <xsd:element name="fieldB"/>
    </xsd:choice>
</xsd:complexType>

Если вы хотите, чтобыравен <fieldA> или <fieldB> или обоим элементам в любом порядке , затем используйте

<xsd:complexType name="Test">
    <xsd:choice>
        <xsd:sequence>
            <xsd:element name="fieldA"/>
            <xsd:element name="fieldB" minOccurs="0"/>
        </xsd:sequence>
        <xsd:sequence>
            <xsd:element name="fieldB"/>
            <xsd:element name="fieldA" minOccurs="0"/>
        </xsd:sequence>
    </xsd:choice>
</xsd:complexType>

Если вы хотите, чтобы было <fieldA> или <fieldB> или обаэлементы и сохраните порядок (<fieldA> до <fieldB>), тогда вы можете немного упростить структуру.

<xsd:complexType name="Test">
    <xsd:choice>
        <xsd:sequence>
            <xsd:element name="fieldA"/>
            <xsd:element name="fieldB" minOccurs="0"/>
        </xsd:sequence>
        <xsd:element name="fieldB"/>
    </xsd:choice>
</xsd:complexType>
0 голосов
/ 21 октября 2011

Элемент выбор может помочь вам:

<xs:complexType name="Test">
    <xs:choice>
         <xs:element name="fieldA" maxOccurs="1" minOccurs="0"/>
         <xs:element name="fieldB" maxOccurs="1" minOccurs="0"/>
    </xs:choice>
</xs:complexType>

Для получения дополнительной информации: http://www.w3schools.com/Schema/el_choice.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...