powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSD: Как описать такое правило...
14 сообщений из 14, страница 1 из 1
XSD: Как описать такое правило...
    #37274423
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Описал корневой элемент (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
XSD: Как описать такое правило...
    #37275473
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<xsd:any>?
...
Рейтинг: 0 / 0
XSD: Как описать такое правило...
    #37275534
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оно. Но до конца не уразумел...
Код: 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
XSD: Как описать такое правило...
    #37275575
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
<xsd:any processContents="lax"/>
...
Рейтинг: 0 / 0
XSD: Как описать такое правило...
    #37277201
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался, но впереди открылось непаханое поле...

Конечная цель этого xsd — описание языка разметки, которое можно подцепить в VS.NET IDE чтобы оно через intellisense подсказывало допустимые теги и атрибуты.
Я добился того, что любой xml текст стал валиден, но подсказки пропали. Добился того, чтобы подсказки вернулись частично: пока курсор находится в контексте NS1-тега, этот неймспейс в выпадающем списке присутствует, а когда попадает в контекст произвольного, — пропадает. Но все это не в ту степь. Подсказки должны работать как в xsl, независимо от не-xsl текста.
Начал изучать схему самого xsl , но ниасилил. Совершенно непонятно, какими средствами это достигается.
...
Рейтинг: 0 / 0
XSD: Как описать такое правило...
    #37278257
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал так:
Код: 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
XSD: Как описать такое правило...
    #37278458
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

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

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

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

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

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

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


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