DTD, XML Schema etc.
От: fox_2000  
Дата: 27.01.03 15:27
Оценка:
Кто-нибудь знает, можно ли с помощью DTD или XML Schema описывать XML, структура которого зависит от значений атрибутов. Типа такого: если у <box> атрибут type="a", то этот <box> может содержать только элементы <a1>, <a2>, <a3>. А если type="b" — то только <b> и <b1>.
Или, если не с помощью DTD или XML Schema, то с помощью чего?
Re: DTD, XML Schema etc.
От: dmile Россия  
Дата: 27.01.03 15:34
Оценка:
F2>Кто-нибудь знает, можно ли с помощью DTD или XML Schema описывать XML, структура которого зависит от значений атрибутов. Типа такого: если у <box> атрибут type="a", то этот <box> может содержать только элементы <a1>, <a2>, <a3>. А если type="b" — то только <b> и <b1>.
По-моему, так нельзя. Правильно будет сделать значение Вашего атрибута элементом, и в зависимости от того, что за элемент, включать в него другие элементы. Это проходит и со схемой, и с DTD.
Re: DTD, XML Schema etc.
От: Аноним  
Дата: 27.01.03 15:35
Оценка:
Здравствуйте, fox_2000, Вы писали:

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


DTD таких сложномудрых вещей не позволяет точно.
XSD позволяет в некоторых ситуациях извернуться при помощи ограничений идентичности (identity constraints), но как этого добиться в данном конкретном случае, я не вижу.
Re[2]: DTD, XML Schema etc.
От: fox_2000  
Дата: 27.01.03 19:36
Оценка:
Здравствуйте, dmile, Вы писали:

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


D>По-моему, так нельзя. Правильно будет сделать значение Вашего атрибута элементом, и в зависимости от того, что за элемент, включать в него другие элементы. Это проходит и со схемой, и с DTD.


К сожалению, эта структура xml от меня не зависит. Приходится работать с тем, что дали.
Re[3]: DTD, XML Schema etc.
От: A_Gura Россия http://a-gura.livejournal.com
Дата: 28.01.03 04:41
Оценка:
Здравствуйте, fox_2000, Вы писали:

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


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


Попробуй определение самого элемента <box> включить в <choice>. Собственно говоря почему нет, если элемент <box> выглядит так, то содержит такие элементы, а если так, то — другие.
... << RSDN@Home 1.0 beta 5 >>
Работать надо над собой...
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...
Пока на собственное сообщение не было ответов, его можно удалить.