Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD choice между элементами разных типов с одним именем / 5 сообщений из 5, страница 1 из 1
09.07.2010, 11:18
    #36732029
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD choice между элементами разных типов с одним именем
Добрый день. У меня есть примерно такой 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
09.07.2010, 19:04
    #36733437
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD choice между элементами разных типов с одним именем
abc_daЭлементы task в зависимости от значения атрибута type имеют разный набор вложенных элементов.XSD схема не валидирует по содержимому - только по структуре.
...
Рейтинг: 0 / 0
12.07.2010, 11:24
    #36735370
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD choice между элементами разных типов с одним именем
Да, это понятно, я говорю не об установлении прямой связи между описанным 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
13.07.2010, 22:51
    #36739457
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD choice между элементами разных типов с одним именем
Все просто до безобразия. Вложенные группы
Код: 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
14.07.2010, 10:51
    #36740066
abc_da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD choice между элементами разных типов с одним именем
_Vasilisk_, спасибо за ответ.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD choice между элементами разных типов с одним именем / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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