Re[2]: Помогите написать схему XSD
От: Gad  
Дата: 03.02.06 09:58
Оценка:
Здравствуйте, Gad, Вы писали:

Gad>Здравствуйте, andy73, Вы писали:


A>>Пример на XML:

A>>
A>><МояСемья>
A>>  <Отец>...</Отец>
A>>  <Мать>...</Мать>
A>>  <Брат>...</Брат>
A>>  <Брат>...</Брат>
A>>  <Сестра>...</Сестра>
A>>  <Брат>...</Брат>
A>>  <Брат>...</Брат>
A>>  <Сестра>...</Сестра>
A>>  ...
A>></МояСемья>
A>>

A>>Смысл в том,что отец и мать могут быть только по одному или отсутствовать, а сестер и братьев сколько угодно. Порядок не важен.


Gad>
Gad>    <xs:element name="МояСемья">
Gad>        <xs:complexType>
Gad>            <xs:sequence>
Gad>                <xs:element name="Отец" minOccurs="0"/>
Gad>                <xs:element name="Мать" minOccurs="0"/>
Gad>                <xs:element name="Брат" minOccurs="0" maxOccurs="unbounded"/>
Gad>                <xs:element name="Сестра" minOccurs="0" maxOccurs="unbounded"/>
Gad>            </xs:sequence>
Gad>        </xs:complexType>
Gad>    </xs:element>
Gad>

Gad>P.S.
Gad>если minOccurs/maxOccurs не указаны, то по умолчанию они 1/1 насколько я помню.

Хотя это неверно, если порядок элементов "Брат"и "Сестра" определяется только тем, что эти элементы идут после элементов родителей.
тогда как вариант можно воспользоваться substitutionGroup:

    <xs:element name="МояСемья">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Отец" minOccurs="0"/>
                <xs:element name="Мать" minOccurs="0"/>
                <xs:element ref="Брат" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="Брат"/>
    <xs:element name="Сестра" substitutionGroup="Брат"/>


Вроде как раз то что надо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.