Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: xs:extension - сначала наследник, потом родитель / 4 сообщений из 4, страница 1 из 1
30.06.2009, 13:25
    #36065944
Duster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: xs:extension - сначала наследник, потом родитель
Схема выглядит примерно так:
Код: 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
01.07.2009, 00:18
    #36066944
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: xs:extension - сначала наследник, потом родитель
Зачем Вы везде используете xsd:choice? Что Вы выбираете? Замените на xsd:all и должно быть счастье.

С уважением, Vasilisk
...
Рейтинг: 0 / 0
09.07.2009, 10:11
    #36081236
Duster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: xs:extension - сначала наследник, потом родитель
Заменил на
Код: 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
21.07.2009, 15:51
    #36101128
Alexander_111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: xs:extension - сначала наследник, потом родитель
Duster,
нужно просто вынести данные во внешние комплексные типы и присваивать элементам типы.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: xs:extension - сначала наследник, потом родитель / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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