powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: ограничение на кол-во и уникальность элементов в sequence
3 сообщений из 3, страница 1 из 1
XSD: ограничение на кол-во и уникальность элементов в sequence
    #39459959
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упрощенный пример: необходимо передавать в теге urls некие ссылки, сгруппированные по операционным системам: ios, android, winphone с соблюдением приведенных ниже условий:
1) в теге urls должен быть указан как минимум один элемент;
2) на каждую из операционных систем не может быть более одной ссылки.

Необходимо продумать формат передачи и XSD для валидации.

Вариант 1:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="urls">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ios"      type="xs:string" minOccurs="0"/>
                <xs:element name="android"  type="xs:string" minOccurs="0"/>
                <xs:element name="winphone" type="xs:string" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>


нормально отрабатывает (успешно валидирует) для приведенных ниже примеров:
Код: xml
1.
2.
3.
4.
5.
<urls>
    <ios>url1</ios>
    <android>url2</android>
    <winphone>url3</winphone>
</urls>

Код: xml
1.
2.
3.
4.
<urls>
    <ios>url1</ios>
    <android>url2</android>    
</urls>

Но, к сожалению, не ругается на варианте. Т.е. не проверяется обязательность элемента.
Код: xml
1.
2.
<urls>
</urls>


Замена
Код: xml
1.
<xs:sequence>

на
Код: xml
1.
<xs:sequence minOccurs="1">

эффекта на дает.

Вариант 2
Код: xml
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.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="urls">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="url" maxOccurs="unbounded">
                    <xs:complexType>           
                        <xs:simpleContent>
                            <xs:extension base="xs:string">                    
                                <xs:attribute name="type">
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:enumeration value="ios"/>
                                            <xs:enumeration value="android"/>
                                            <xs:enumeration value="winphone"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:attribute>     
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>


нормально отрабатывает (успешно валидирует) для приведенного ниже примера:
Код: xml
1.
2.
3.
4.
<urls>
    <url type="ios">url1</url> 
    <url type="android">url2</url>
</urls>


Но, к сожалению, не ругается на варианте, где для android дано более одного элемента. Т.е, не проверяется уникальность.
Код: xml
1.
2.
3.
4.
5.
<urls>
    <url type="ios">url1</url> 
    <url type="android">url2</url> 
    <url type="android">url3</url> 
</urls>


Существует ли возможность валидации моего кейса на уровне XSD?
...
Рейтинг: 0 / 0
XSD: ограничение на кол-во и уникальность элементов в sequence
    #39460007
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadВариант 2
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    <xs:element name="urls">
        <xs:complexType>
            <xs:sequence>
             ............
            </xs:sequence>
        </xs:complexType>
        <xs:key name="keyURL">
          <xs:selector xpath="url"/>
          <xs:field xpath="@type"/>
        </xs:key>
    </xs:element>
...
Рейтинг: 0 / 0
XSD: ограничение на кол-во и уникальность элементов в sequence
    #39460018
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Спасибо. То, что нужно. Почитал об этом на msdn и w3.org .

Код: xml
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.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="urls">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="url" maxOccurs="unbounded">
                    <xs:complexType>           
                        <xs:simpleContent>
                            <xs:extension base="xs:string">                    
                                <xs:attribute name="type">
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:enumeration value="ios"/>
                                            <xs:enumeration value="android"/>
                                            <xs:enumeration value="winphone"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:attribute>     
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
      <xs:key name="keyURL">
          <xs:selector xpath="url"/>
          <xs:field xpath="@type"/>
        </xs:key>		
    </xs:element>
</xs:schema>
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: ограничение на кол-во и уникальность элементов в sequence
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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