powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: xs:extension - сначала наследник, потом родитель
4 сообщений из 4, страница 1 из 1
XSD: xs:extension - сначала наследник, потом родитель
    #36065944
Duster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Схема выглядит примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
	<xs:complexType name="parent" abstract="true">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element ref="AAA" />
		</xs:choice>						
	</xs:complexType>

	<xs:element name="child">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="parent">
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:element ref="BBB" />
					</xs:choice>			
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>

При этом такой документ является валидным:
Код: plaintext
1.
2.
3.
4.
<child>
       <BBB/>
       <AAA/>
</child>

а такой нет:
Код: plaintext
1.
2.
3.
4.
<child>
       <AAA/>
       <BBB/>
</child>

Как быть? Порядок следования элементов произвольный. "Наследование" сдорово помогает, т.к. у родителя определено порядка 10 аттрибутов и несколько дочерних элементов, а его наследников много.
...
Рейтинг: 0 / 0
XSD: xs:extension - сначала наследник, потом родитель
    #36066944
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем Вы везде используете xsd:choice? Что Вы выбираете? Замените на xsd:all и должно быть счастье.

С уважением, Vasilisk
...
Рейтинг: 0 / 0
XSD: xs:extension - сначала наследник, потом родитель
    #36081236
Duster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заменил на
Код: plaintext
all
вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
	<xs:complexType name="parent" abstract="true">
		<xs:all>
			<xs:element ref="AAA" minOccurs="0" maxOccurs="unbounded" />
		</xs:all>						
	</xs:complexType>

	<xs:element name="child">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="parent">
					<xs:all>
						<xs:element ref="BBB" minOccurs="0" maxOccurs="unbounded"/>
					</xs:all>			
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>

И получил при чтении схемы ошибку:
Код: plaintext
1.
cos-all-limited.1.2: An all model group mustappear in a particle with {min occurs} = {max occurs} = 1, 
and that particle must be part of a pair which constitutes the {content type} of a complex type definition. 

Погуглив нашел вот это: http://marc.info/?l=xerces-j-dev&m=118712527926345&w=2
где сказано "Pretty sure the only extension you can make to a complex type with an
"all" model group in XML Schema 1.0 is adding additional attributes.".

Что я делаю не так?
...
Рейтинг: 0 / 0
XSD: xs:extension - сначала наследник, потом родитель
    #36101128
Alexander_111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Duster,
нужно просто вынести данные во внешние комплексные типы и присваивать элементам типы.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: xs:extension - сначала наследник, потом родитель
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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