Здравствуйте, andy73, Вы писали:
A>Смысл в том,что отец и мать могут быть только по одному или отсутствовать, а сестер и братьев сколько угодно. Порядок не важен.
Здравствуйте, andy73, Вы писали:
A>Пример на XML: A>
A><МояСемья>
A> <Отец>...</Отец>
A> <Мать>...</Мать>
A> <Брат>...</Брат>
A> <Брат>...</Брат>
A> <Сестра>...</Сестра>
A> <Брат>...</Брат>
A> <Брат>...</Брат>
A> <Сестра>...</Сестра>
A> ...
A></МояСемья>
A>
A>Смысл в том,что отец и мать могут быть только по одному или отсутствовать, а сестер и братьев сколько угодно. Порядок не важен.
Gad>P.S. Gad>если minOccurs/maxOccurs не указаны, то по умолчанию они 1/1 насколько я помню.
Хотя это неверно, если порядок элементов "Брат"и "Сестра" определяется только тем, что эти элементы идут после элементов родителей.
тогда как вариант можно воспользоваться substitutionGroup:
A><xs:choice minOccurs="0" maxOccurs="unbounded">
A> <xs:element name="Мать"minOccurs="0" maxOccurs="1"/>
A> <xs:element name="Отец"minOccurs="0" maxOccurs="1"/>
A> <xs:element name="Брат"/>
A> <xs:element name="Сетстра"/>
A></xs:choice>
A>
A>То вроде все нормально, но мать и отец могут повторяться, а должны быть максимум по одному.
А теперь?
Проядок элементов в <МоейСемье> не важен!!! Хотя всех братьев и сестер можно собрать в кучу. <xs:sequence/> это не позволяет,а в <xs:all> — нельзя для элементов задавать maxOccurs="unbounded". В <xs:choice> нельзя ограничить повторяемость для <мать> <отец>.
Здравствуйте, Аноним, Вы писали:
А>Проядок элементов в <МоейСемье> не важен!!! Хотя всех братьев и сестер можно собрать в кучу. <xs:sequence/> это не позволяет,а в <xs:all> — нельзя для элементов задавать maxOccurs="unbounded". В <xs:choice> нельзя ограничить повторяемость для <мать> <отец>.
Первый вариант — определить ограничения уникальности (<unique>) для элементов <мать> и <отец>. Тогда невозможно будет создать дубляжи без нарушения этих ограничений.
Второй вариант — определить модель данных так (извините за краткое схематичное описание):
Здравствуйте, andy73, Вы писали:
A>В моем случае все элементы имеют разные сложные типы, а substitutionGroup вроде можно только для однотипных применять
Или для элементов, типы данных которых связаны отношениями наследования.
Здравствуйте, achp, Вы писали:
A>Первый вариант — определить ограничения уникальности (<unique>) для элементов <мать> и <отец>. Тогда невозможно будет создать дубляжи без нарушения этих ограничений.
А можно поподробней про unique. какие выражения в selector и field. Уникальность по атрибуту я понимаю, а как по элементу?
Для меня этот вариант был бы проще, потому что мне этот xsd еще и парсить для разбора типов.
Здравствуйте, achp, Вы писали:
A>Второй вариант ...
Вообще-то я привел пример с семьей, чтобы было проще представить мой xml. Реально в нем есть много типов элементов типа <мать>, <отец> (maxOccurs=1), и много элементов типа <брат>, <сестра> (maxOccurs="unbounded"). В этом случае второй вариант слишком быстро разрастается.