Re[4]: DTD, XML Schema etc.
От: fox_2000  
Дата: 05.02.03 13:23
Оценка:
Здравствуйте, A_Gura, Вы писали:

F2>>>>Кто-нибудь знает, можно ли с помощью DTD или XML Schema описывать XML, структура которого зависит от значений атрибутов. Типа такого: если у <box> атрибут type="a", то этот <box> может содержать только элементы <a1>, <a2>, <a3>. А если type="b" — то только <b> и <b1>.


AG>Попробуй определение самого элемента <box> включить в <choice>. Собственно говоря почему нет, если элемент <box> выглядит так, то содержит такие элементы, а если так, то — другие.


Просто в <choice> нельзя, потому что у него еще атрибут должен быть. Так что он в любом случае complextype и на него ссылка по type. Но и ссылки эти тоже непосредственно в <choice> включать нельзя, ибо там не может быть элементов с одинаковыми именами. В итоге, у меня получилось так:

<xs:choice>
<xs:sequence>
<xs:element name="box" type="box_a" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="box" type="box_b" minOccurs="0"/>
</xs:sequence>
</xs:choice>

<xs:complexType name="box_a">
<xs:sequence>
<xs:element name="a1" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="type" type="attr_type_a" use="required"/>
</xs:complexType>

<xs:simpleType name="attr_type_a">
<xs:restriction base="xs:string">
<xs:enumeration value="a"/>
</xs:restriction>
</xs:simpleType>

При этом схема становится non-deterministic, и MSXML с ней работать отказывается. А XMLSpy ее признает и работает прекрасно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.