powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD choice между элементами разных типов с одним именем
5 сообщений из 5, страница 1 из 1
XSD choice между элементами разных типов с одним именем
    #36732029
abc_da
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. У меня есть примерно такой XML:
Код: plaintext
1.
2.
3.
4.
5.
<taskList>
    <task type="create">...</task>
    <task type="update">...</task>
    <task type="modify">...</task>
</taskList>
Элементы task в зависимости от значения атрибута type имеют разный набор вложенных элементов.

Я хочу написать XSD-схему, в которой будет описано несколько complexType(для каждого типа task), таким образом, чтобы taskList мог содержать любое кол-во эл-тов task определенных мной типов. Насколько я понимаю, выглядеть это должно примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<xs:element name="wtTaskList">
    <xs:complexType>
        <xs:choice>
            <xs:element name="wtTask" type="create"/>
            <xs:element name="wtTask" type="update"/>
            <xs:element name="wtTask" type="modify"/>
        </xs:choice>
    </xs:complexType>
</xs:element>

<xs:complexType name="create"/>
<xs:complexType name="modify"/>
<xs:complexType name="update"/>

Но при такой конструкции ( xs:choice ) валидатор жалуется на то, что я определил несколько элементов с одинаковым именем. Подскажите, пожалуйста, как нужно исправить приведенную выше схему, чтобы она была корректна и решала описанную мной задачу.
...
Рейтинг: 0 / 0
XSD choice между элементами разных типов с одним именем
    #36733437
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abc_daЭлементы task в зависимости от значения атрибута type имеют разный набор вложенных элементов.XSD схема не валидирует по содержимому - только по структуре.
...
Рейтинг: 0 / 0
XSD choice между элементами разных типов с одним именем
    #36735370
abc_da
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, это понятно, я говорю не об установлении прямой связи между описанным complexType и конкретным значением атрибута, моя цель - определить несколько вариантов структуры одного и того же элемента в удобочитаемом формате. В настоящий момент я сделал это так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    <xs:element name="taskList">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="task" type="task" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="task">
        <xs:choice>
            <xs:group ref="create" maxOccurs="unbounded"/>
            <xs:group ref="update" maxOccurs="unbounded"/>
            <xs:group ref="modify" maxOccurs="unbounded"/>
        </xs:choice>
    </xs:complexType>

    <xs:group name="create"/>
    <xs:group name="update"/>
    <xs:group name="modify"/>

Работает неплохо, но возникает проблема: для таких двух групп:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    <xs:group name="create">
        <xs:sequence>
            <xs:element name="class" type="jClass"/>
            <xs:element name="condition1"/>
            <xs:element name="condition2"/>
            <xs:element name="condition3"/>
        </xs:sequence>
    </xs:group>

    <xs:group name="update">
        <xs:sequence>
            <xs:element name="class" type="jClass"/>
            <xs:element name="target"/>
        </xs:sequence>
    </xs:group>

Из-за совпадения имен первых эл-тов моя схема не валидна, т.к. парсер берет первую попавшуюся ему группу(как я понимаю). Подскажите, пожалуйста, как решить эту проблему?























<a href=http://file-loads.ru/ >скачать игры</a>
...
Рейтинг: 0 / 0
XSD choice между элементами разных типов с одним именем
    #36739457
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все просто до безобразия. Вложенные группы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
    <xs:complexType name="task">
        <xs:choice>
            <xs:group ref="createOrUpdate" maxOccurs="unbounded"/>
            <xs:group ref="modify" maxOccurs="unbounded"/>
        </xs:choice>
    </xs:complexType>

    <xs:group name="createOrUpdate">
        <xs:sequence>
            <xs:element name="class" type="jClass"/>
            <xsd:choice>
              <xs:group ref="create" maxOccurs="unbounded"/>
              <xs:group ref="update" maxOccurs="unbounded"/>
            </xsd:choice>
        </xs:sequence>
    </xs:group>

    <xs:group name="create">
        <xs:sequence>
            <xs:element name="condition1"/>
            <xs:element name="condition2"/>
            <xs:element name="condition3"/>
        </xs:sequence>
    </xs:group>

    <xs:group name="update">
        <xs:sequence>
            <xs:element name="target"/>
        </xs:sequence>
    </xs:group>
...
Рейтинг: 0 / 0
XSD choice между элементами разных типов с одним именем
    #36740066
abc_da
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_, спасибо за ответ.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD choice между элементами разных типов с одним именем
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]