Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > xsd большая вложенность элементов


Автор: Samotnik 16.11.2010, 15:43
Как в xsd указать,  что может быть большая вложенность одного и того же элемента category ?
Вот кусок xml :
Код

<category name="baseball" >
        <category name="men" reference="Sport">
            <category name="usa"/>
            <category name="europe"/>
            <category name="asia"/>
        </category>
    </category>

как это написать в  xsd  ? Делаю так, но это не верно
Код

<xsd:element name="category" minOccurs="0" maxOccurs="unbounded">
                    <xsd:complexType>
                        <xsd:attribute name="name" type="xsd:string" use="required" />
                        <xsd:attribute name="reference" type="xsd:string" use="optional" />
                    </xsd:complexType>
                </xsd:element>

Вопрос в том, как показать xsd что category может быть много раз быть вложенным 1, 5, 10, 100, .... ?

Автор: diadiavova 16.11.2010, 19:33
Если элемент объявляется глобально, то можно использовать атрибут ref
Код

    <xs:element name="category">
        <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="category"/>
            </xs:sequence>
            <xs:attribute name="name" use="required"/>
            <xs:attribute name="reference" use="optional"/>
        </xs:complexType>
    </xs:element>

В ином случае придется глобально объявлять тип, а элементу присваивать именно этот тип при объявлении
Код

    <xs:complexType name="category-def">
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:element name="category" type="category-def"/>
        </xs:sequence>
        <xs:attribute name="name" use="required"/>
        <xs:attribute name="reference" use="optional"/>
    </xs:complexType>

Сам элемент объявляется так
Код

            <xs:element name="category" type="category-def"/>

Наверно есть и другие варианты, но принцип везде один: элемент должен объявляться рекурсивно.

Автор: Samotnik 17.11.2010, 16:17
diadiavova, спасибо, да, именно так, я уже сам сделал !   smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)