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

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

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

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

Отсюда явное решение - чтобы такое работало должно выполняться одно из двух условий
1) у элементов разные имена
2) у элементов разный контекст
...
Рейтинг: 0 / 0
XSD: зависимые ограничения
    #35375545
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть вот так нельзя?
Код: 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
XSD: зависимые ограничения
    #35375550
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно нет. Провалидируй схему и получи пинок от парсера

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

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

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

Max
...
Рейтинг: 0 / 0
XSD: зависимые ограничения
    #35376279
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Он тебе скажет, что он не телепат и не в состоянии в XML определить какой param ты хотел использоватьстранно… choose же стоит, зачем тут телепатия?
...
Рейтинг: 0 / 0
XSD: зависимые ограничения
    #35376887
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и что? 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
9 сообщений из 9, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: зависимые ограничения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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