XSD - порядок тегов
От: Аноним  
Дата: 12.09.06 08:30
Оценка:
Народ, подскажите плиз.
Есть XML файл. У головного тега есть много дочерних.
<root>
<tag1 value="...">
<tag2 value="...">
<tag3 value="...">
...
<tagn value="...">
</root>
Можно ли как-то организовать проверку схемой таким образовам, что бы в XML-е не нужно было соблюдать жесткий порядок тегов. Т.е. что бы по схеме проверялось все что нужно(тип данных, название тега и т.д.), но при этом порядок тегов в XML было бы произвольное.
Re: XSD - порядок тегов
От: achp  
Дата: 12.09.06 12:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Можно ли как-то организовать проверку схемой таким образовам, что бы в XML-е не нужно было соблюдать жесткий порядок тегов. Т.е. что бы по схеме проверялось все что нужно(тип данных, название тега и т.д.), но при этом порядок тегов в XML было бы произвольное.


Композитор <xsd:all>. Но у него есть ограничения.
Re[2]: XSD - порядок тегов
От: Аноним  
Дата: 12.09.06 14:02
Оценка:
Здравствуйте, achp, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>Можно ли как-то организовать проверку схемой таким образовам, что бы в XML-е не нужно было соблюдать жесткий порядок тегов. Т.е. что бы по схеме проверялось все что нужно(тип данных, название тега и т.д.), но при этом порядок тегов в XML было бы произвольное.


A>Композитор <xsd:all>. Но у него есть ограничения.


К сожалению не возможно применить <xsd:all>, по той причине, что у некоторых тегов стоит maxOccurs=unbounded
Re[3]: XSD - порядок тегов
От: achp  
Дата: 12.09.06 21:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>К сожалению не возможно применить <xsd:all>, по той причине, что у некоторых тегов стоит maxOccurs=unbounded


А у некоторых maxOccurs="1"? Тогда "идеологически правильно" — никак.
Re: XSD - порядок тегов
От: Yarrow  
Дата: 13.09.06 07:33
Оценка:
Можно использовать комбинацию xs:group и xs:choice.
Пример:

XSD
<xs:element name="masters" type="masters-type">
<xs:complexType name="masters-type">
    <xs:sequence>
        <xs:group ref="content" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

<xs:group name="content">
    <xs:choice>
        <xs:element name="master">
            <xs:complexType mixed="true">
                <xs:attribute name="id" type="xs:ID"/>
            </xs:complexType>
        </xs:element>
        <xs:element name="noise" type="xs:string"/>
    </xs:choice>
</xs:group>


Определенные внутри группы элементы <master/> и <noise/> могут встречаться в любом количестве и в любом порядке

Вот такой фрагмент XML будет валидным:
<master id="id1">мастер-1</master>
<noise>бла-бла-бла</noise>
<master id="id2">мастер-2</master>
<master id="id3">мастер-3</master>
<noise>бла-бла-бла</noise>
Re[2]: XSD - порядок тегов
От: achp  
Дата: 13.09.06 08:43
Оценка:
Здравствуйте, Yarrow, Вы писали:

Y>
Y><xs:element name="masters" type="masters-type">
Y><xs:complexType name="masters-type">
Y>    <xs:sequence>
Y>        <xs:group ref="content" minOccurs="0" maxOccurs="unbounded"/>
Y>    </xs:sequence>
Y></xs:complexType>

Y><xs:group name="content">
Y>    <xs:choice>
Y>        <xs:element name="master">
Y>            <xs:complexType mixed="true">
Y>                <xs:attribute name="id" type="xs:ID"/>
Y>            </xs:complexType>
Y>        </xs:element>
Y>        <xs:element name="noise" type="xs:string"/>
Y>    </xs:choice>
Y></xs:group>
Y>


То же самое, но короче:

<xs:element name="masters" type="masters-type">
<xs:complexType name="masters-type">
    <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="master">
                <xs:complexType mixed="true">
                    <xs:attribute name="id" type="xs:ID"/>
                </xs:complexType>
            </xs:element>
            <xs:element name="noise" type="xs:string"/>
        </xs:choice>
    </xs:sequence>
</xs:complexType>


Однако, если только некоторые элементы могут встречаться по многу раз (а на какие-то другие ограничение не наложено), то описать это так просто не выйдет...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.