Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: зависимые ограничения / 9 сообщений из 9, страница 1 из 1
16.06.2008, 11:07
    #35374024
uncle_max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: зависимые ограничения
Добрый день!

Например есть простой XML

Код: plaintext
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd">
	<param>Неделя</param>
	<value>Среда</value>
</data>

и схема для его проверки

Код: 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.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:element name="data">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="param"/>
				<xs:element ref="value"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="param">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="Неделя"/>
				<xs:enumeration value="Месяц"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
	<xs:element name="value">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="Понедельник"/>
				<xs:enumeration value="Вторник"/>
				<xs:enumeration value="Среда"/>
				<xs:enumeration value="Четверг"/>
				<xs:enumeration value="Пятница"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
</xs:schema>

Посоветуйте, пожалуйста, как заставить схему накладывать ограничение на элемент "value" в зависимости от выбранного значения элемента "param" т.е. если
param = "Неделя", то допустимые значения value "Понедельник", "Вторник", "Среда" и т.д.
а если
param = "Месяц", то допустимые значения value из другого списка - "Январь", "Февраль", "Март" и т.д.

С уважением,
Max
...
Рейтинг: 0 / 0
16.06.2008, 14:08
    #35374518
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: зависимые ограничения
сделать 6 соотв. simpleType'ов и попарно их сгруппировать.
...
Рейтинг: 0 / 0
16.06.2008, 14:10
    #35374521
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: зависимые ограничения
то есть 2 простых типа для value
...
Рейтинг: 0 / 0
16.06.2008, 20:14
    #35375540
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: зависимые ограничения
uncle_maxПосоветуйте, пожалуйста, как заставить схему накладывать ограничение на элемент "value" в зависимости от выбранного значения элемента "param" т.е. если
param = "Неделя", то допустимые значения value "Понедельник", "Вторник", "Среда" и т.д.
а если
param = "Месяц", то допустимые значения value из другого списка - "Январь", "Февраль", "Март" и т.д.
Сам долго над этим бился - ответ никак.

Объяснение примерно такое

В XSD тип привязывается к имени элемента и с конкретным значением никак не связян. Т.е. для данного контекста у элементов с одним и тем-же именем может быть только один тип.

Отсюда явное решение - чтобы такое работало должно выполняться одно из двух условий
1) у элементов разные имена
2) у элементов разный контекст
...
Рейтинг: 0 / 0
16.06.2008, 20:19
    #35375545
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: зависимые ограничения
то есть вот так нельзя?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<xs:choose>
	<xs:element name="param">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="Неделя"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
	<xs:element name="param">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="Месяц"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
</xs:choose>
...
Рейтинг: 0 / 0
16.06.2008, 20:24
    #35375550
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: зависимые ограничения
Конечно нет. Провалидируй схему и получи пинок от парсера

Он тебе скажет, что он не телепат и не в состоянии в XML определить какой param ты хотел использовать

Еще раз связь здесь name => type => value и никак иначе

С уважением, Vasilisk
...
Рейтинг: 0 / 0
17.06.2008, 03:33
    #35375918
uncle_max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: зависимые ограничения
Всем большое спасибо за ответы. Жаль, конечно, что нельзя, но все равно еще повоюю.

Max
...
Рейтинг: 0 / 0
17.06.2008, 10:56
    #35376279
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: зависимые ограничения
_Vasilisk_Он тебе скажет, что он не телепат и не в состоянии в XML определить какой param ты хотел использоватьстранно… choose же стоит, зачем тут телепатия?
...
Рейтинг: 0 / 0
17.06.2008, 13:14
    #35376887
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: зависимые ограничения
Ну и что? choose говорит, что нужно использовать либо один элемент, либо другой. Он применяется к ЭЛЕМЕНТУ, а не к типу.
Вот тебе пример
Код: plaintext
<param>Неделя</param>
Валидатор находит элемент param с каким-то значением, чтобы проверить валидно это значение или нет, он должен взять тип элемента и проверить значение на соответствие этому типу. А вот какой тип взять он и не знает.

choose будет работать так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<xs:choose>
	<xs:element name="param1">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="Неделя"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
	<xs:element name="param2">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="Месяц"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
</xs:choose>
Тогда следующие XML будут валидны
XML1
Код: plaintext
<param1>Неделя</param1>
XML2
Код: plaintext
<param2>Месяц</param2>
А такой XML валидным не будет
Код: plaintext
1.
<param1>Неделя</param1>
<param2>Месяц</param2>
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: зависимые ограничения / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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