несколько лет назад я определил XSD для моего файла установки XML. Цель состояла в том, чтобы определить узел требований с подузлами с разными названиями, такими как:xs: choice - один и только один из следующих узлов или один или несколько из следующих узлов?
<requirements>
<core version="1.0.0.1749" />
<field version="1.2">chbxgroup</field>
<php version="5.3"/>
</requirements>
XSD для этой части выглядит следующим образом:
<xs:element name="requirements" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="core" type="requirement" minOccurs="0" maxOccurs="1" />
<xs:element name="cms" type="requirement" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="plugin" type="requirement" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="application" type="requirement" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="field" type="requirement" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="php" type="requirement" minOccurs="0" maxOccurs="unbounded" />
</xs:choice>
</xs:complexType>
</xs:element>
и определение требований:
<xs:complexType name="requirement" mixed="true">
<xs:attribute name="version" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="(\d+\.)?(\d+\.)?(\d+)?(\.)?(\d+)?" />
<xs:whiteSpace value="preserve" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="type" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="function|class" />
<xs:whiteSpace value="preserve" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
Если вам нравится, вы можете проверить все определение по адресу: https://xml.sigsiu.net/SobiPro/application.xsd
Теперь важная информация: это работает прекрасно и точно так, как мы хотели его
Вопрос заключается в том, что у нас есть очень любопытный и приятный пользователь, который проверил определение и он пытается узнать о XML и XSD и он указал мне на документацию по адресу http://www.w3schools.com/Schema/el_choice.asp, в которой четко указано, что вы, что «xs: choice» позволяет фактически использовать только один из определенных дочерних узлов.
Я проверял разные документы на этом, и на самом деле каждый из них утверждает то же самое. Так что для моего понимания, как мы определили, и как я узнал, это не должно работать. Но это
Некоторые примеры: http://msdn.microsoft.com/en-us/library/ms256109.aspx
позволяет один и только один из элементов, содержащихся в выбранной группе присутствовать в содержащем элемент.
http://www.w3schools.com/schema/schema_complex_indicators.asp
Индикатор указывает, что ни один дочерний элемент или другой может произойти:
Так что реальное определение "хз: выбор"?
Позволяет ли он действительно использовать только один из определенных элементов или просто ограничивает возможный выбор следующего дочернего узла для определенных элементов?
Извините, похоже, я дважды вставлял один и тот же код - я только что исправил его. Надеюсь, что это станет понятным :) –