У меня есть эта проблема, и я не могу на всю жизнь найти простое решение.
Я пытаюсь систематизировать список операционных систем, где XML-файл содержит список операционных систем, которые есть у данного человека. Существует фиксированный список операционных систем (XP, Vista, Win7, OSX и Ubuntu).
У меня есть следующий кусок XML
<operatingSystems>
<operatingSystem name="Windows XP" />
<operatingSystem name="Windows Vista" />
<operatingSystem name="Windows 7" />
<operatingSystem name="OS X" />
<operatingSystem name="Ubuntu Linux" />
</operatingSystems>
Элемент <operatingSystems>
может содержать 0 или более перечисленных операционных систем.
Итак, допустимыми примерами будут:
<operatingSystems>
<operatingSystem name="Windows XP" />
<operatingSystem name="OS X" />
<operatingSystem name="Ubuntu Linux" />
</operatingSystems>
или
<operatingSystems />
Я пытаюсь написать схему XSD для проверки этого. Мои вопросы: как лучше всего проверить, что элемент <operatingSystems>
содержит только дочерние элементы <operatingSystem>
, имя которых принадлежит данному набору, и что каждый элемент name появляется не более одного раза.
Недопустимые примеры:
<operatingSystems>
<operatingSystem name="OS X" />
<operatingSystem name="OS X" />
<operatingSystem name="Ubuntu Linux" />
</operatingSystems>
или
<operatingSystems>
<operatingSystem name="Sun Solaris" />
</operatingSystems>
Я пробовал это:
<element name="operatingSystems">
<complexType>
<sequence>
<element name="operatingSystem" minOccurs="0" maxOccurs="1">
<complexType>
<attribute name="name" fixed="Windows XP" />
</complexType>
</element>
<element name="operatingSystem" minOccurs="0" maxOccurs="1">
<complexType>
<attribute name="name" fixed="Windows Vista" />
</complexType>
</element>
.......
</sequence>
</complexType>
</element>
но он принимает во внимание тот факт, что minOccurs равен 0, и будет выдавать жалобу, если какой-либо элемент операционной системы отсутствует.
Буду признателен за любую помощь.
Спасибо