Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: Как описать такое правило... / 14 сообщений из 14, страница 1 из 1
23.05.2011, 13:49
    #37274423
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Описал корневой элемент (TEMPLATE), описал несколько потомков.
Код: 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.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:NS1="http://tempuri.org/NS1" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://tempuri.org/NS1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:attributeGroup name="ACTATTR">
		<xs:attribute name="EVENT" type="xs:string"/>
		<xs:attribute name="FIELD" type="xs:string"/>
	</xs:attributeGroup>
	<xs:attributeGroup name="GETATTR">
		<xs:attribute name="SOURCE" type="xs:string"/>
		<xs:attribute name="FIELD" type="xs:string" use="required"/>
		<xs:attribute name="FILTER" type="xs:string"/>
		<xs:attribute name="FORMAT" type="xs:string"/>
	</xs:attributeGroup>
	
	<xs:element name="GET"><xs:complexType><xs:attributeGroup ref="NS1:GETATTR"/></xs:complexType></xs:element>
	<xs:element name="TAG"><xs:complexType><xs:attribute name="NAME" type="xs:string" use="required"/></xs:complexType></xs:element>
	<xs:element name="ACTION"><xs:complexType><xs:attributeGroup ref="NS1:ACTATTR"/></xs:complexType></xs:element>
	
	<xs:element name="TEMPLATE">
		<xs:complexType>
			<xs:all>
				<xs:element ref="NS1:ACTION" minOccurs="0" />
				<xs:element ref="NS1:GET" minOccurs="0" />
				<xs:element ref="NS1:TAG" minOccurs="0" />
			</xs:all>
		</xs:complexType>
	</xs:element>
</xs:schema>
Как задать правило, что любой потомок может содержать любые комбинации потомков же?
Сейчас такая конструкция:
Код: plaintext
1.
2.
3.
<?xml version="1.0" encoding="utf-8" ?>
<NS1:TEMPLATE xmlns:NS1="http://tempuri.org/NS1">
	<NS1:TAG NAME="test"><NS1:GET FIELD="test"></NS1:GET></NS1:TAG>
</NS1:TEMPLATE>
выдает ошибку "TAG не может содержать GET потому что родительская модель контента пуста".

Еще, можно ли сделать так, чтобы любые теги без неймспейса были валидны в любом месте?
Код: plaintext
1.
2.
<NS1:TEMPLATE xmlns:NS1="http://tempuri.org/NS1">
	<anyTag><NS1:TAG NAME="test"><anyTag><NS1:GET FIELD="test"></NS1:GET></anyTag></NS1:TAG></anyTag>
</NS1:TEMPLATE>
...
Рейтинг: 0 / 0
23.05.2011, 22:27
    #37275473
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
<xsd:any>?
...
Рейтинг: 0 / 0
23.05.2011, 23:14
    #37275534
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Оно. Но до конца не уразумел...
Код: plaintext
1.
2.
3.
4.
<xs:element name="TEMPLATE">
  <xs:complexType>
    <xs:sequence><xs:any /></xs:sequence>
  </xs:complexType>
</xs:element>
Такая схема ругается на тег outer в этом xml:
Код: plaintext
1.
2.
<NS1:TEMPLATE xmlns:NS1="http://tempuri.org/NS1">
	<outer><NS1:TAG NAME="test"><anyTag><NS1:GET FIELD="test"><qe/></NS1:GET></anyTag></NS1:TAG></outer>
</NS1:TEMPLATE>
Все остальное заработало.
...
Рейтинг: 0 / 0
23.05.2011, 23:37
    #37275575
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Код: plaintext
<xsd:any processContents="lax"/>
...
Рейтинг: 0 / 0
24.05.2011, 17:40
    #37277201
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Разобрался, но впереди открылось непаханое поле...

Конечная цель этого xsd — описание языка разметки, которое можно подцепить в VS.NET IDE чтобы оно через intellisense подсказывало допустимые теги и атрибуты.
Я добился того, что любой xml текст стал валиден, но подсказки пропали. Добился того, чтобы подсказки вернулись частично: пока курсор находится в контексте NS1-тега, этот неймспейс в выпадающем списке присутствует, а когда попадает в контекст произвольного, — пропадает. Но все это не в ту степь. Подсказки должны работать как в xsl, независимо от не-xsl текста.
Начал изучать схему самого xsl , но ниасилил. Совершенно непонятно, какими средствами это достигается.
...
Рейтинг: 0 / 0
25.05.2011, 12:30
    #37278257
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Сделал так:
Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:NS1="http://tempuri.org/NS1" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://tempuri.org/NS1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:attributeGroup name="ACTATTR">
		<xs:attribute name="EVENT" type="xs:string"/>
		<xs:attribute name="FIELD" type="xs:string"/>
	</xs:attributeGroup>
	<xs:attributeGroup name="GETATTR">
		<xs:attribute name="SOURCE" type="xs:string"/>
		<xs:attribute name="FIELD" type="xs:string" use="required"/>
		<xs:attribute name="FILTER" type="xs:string"/>
		<xs:attribute name="FORMAT" type="xs:string"/>
	</xs:attributeGroup>
	
	<xs:complexType name="any" abstract="true" mixed="true">
		<xs:sequence><xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" /></xs:sequence>
	</xs:complexType>

	<xs:element name="ACTION">
		<xs:complexType>
			<xs:attributeGroup ref="NS1:ACTATTR"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="GET">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="NS1:any">
					<xs:attributeGroup ref="NS1:GETATTR"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="TAG">
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="NS1:any">
					<xs:attribute name="NAME"/>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:group name="tags">
		<xs:all>
			<xs:element ref="NS1:ACTION" minOccurs="0"/>
			<xs:element ref="NS1:GET" minOccurs="0"/>
			<xs:element ref="NS1:TAG" minOccurs="0"/>
		</xs:all>
	</xs:group>
	<xs:element name="TEMPLATE">
		<xs:complexType><xs:group ref="NS1:tags"/></xs:complexType>
	</xs:element>
</xs:schema>

XML:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0" encoding="utf-8"?>
<NS1:TEMPLATE xmlns:NS1="http://tempuri.org/NS1" xmlns:tmp="http://tempuri.org" >
	<tag1 />
	<NS1:GET  FIELD="qwe">
		<tag2></tag2>
		<NS1:TAG  NAME="asd"><NS1:TEMPLATE/></NS1:TAG>
	</NS1:GET>
</NS1:TEMPLATE>
1) Ругается на tag1
2) Все остальное валидно, но <NS1:TEMPLATE/> не должно.
3) При нахождении курсора внутри левого тега (tag2) пропадают подсказки. В остальных случаях работают.
...
Рейтинг: 0 / 0
25.05.2011, 13:49
    #37278458
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Antonariy,

Antonariy3) При нахождении курсора внутри левого тега (tag2) пропадают подсказки. В остальных случаях работают.А почему там должны быть подсказки?

Не для каждого XML можно написать XSD. Элементы в XML должны быть... (слово забыл, что-то типа детерминированы). Смысл в том, что при проходе по XML сверху вниз, мы в любой момент знаем в какой части схемы находимся, подъемов не допускается. Как следствие, в первую очередь откажись от <xs:all>
...
Рейтинг: 0 / 0
25.05.2011, 14:19
    #37278520
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
А почему там должны быть подсказки?А почему они есть в xsl?
...
Рейтинг: 0 / 0
25.05.2011, 14:28
    #37278534
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Antonariy,

Ну, ведь нет описания "левого" элемента - почему должны быть подсказки? какие, например? Одна только может быть - закрыть тег...

PS. Вот нашел по поводу детерминистической модели - Deterministic Content Models
...
Рейтинг: 0 / 0
25.05.2011, 14:49
    #37278586
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Я имею ввиду описание не элемента, а самой схемы:
...
Рейтинг: 0 / 0
25.05.2011, 15:27
    #37278674
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Antonariy,

так не поможет (у меня просто нет поблизости VS):
Код: plaintext
<xs:complexContent mixed="true">
...
Рейтинг: 0 / 0
25.05.2011, 16:04
    #37278762
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Не поможет. mixed только регламентирует использование чистого текста в ноде.
...
Рейтинг: 0 / 0
25.05.2011, 16:18
    #37278793
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Antonariy,

а так ?
Код: plaintext
<xs:complexType mixed="true">
...
Рейтинг: 0 / 0
25.05.2011, 16:22
    #37278806
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD: Как описать такое правило...
Тоже самое. mixed у любого элемента, где он есть, отвечает за текст.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: Как описать такое правило... / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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