Поделиться через


Правила выведения структуры и типов узлов схемы

Обновлен: November 2007

В данном разделе описывается, как в процессе вывода схемы различные типы узлов XML-документа преобразуются в структуру языка XSD.

Правила вывода элементов

В данном разделе описаны правила вывода для декларации элементов. Могут быть выведены восемь структур деклараций элементов.

  1. Элемент простого типа

  2. Пустой элемент

  3. Пустой элемент с атрибутами

  4. Элемент с атрибутами и простым содержимым

  5. Элемент с последовательностью дочерних элементов

  6. Элемент с последовательностью дочерних элементов и атрибутов

  7. Элемент с последовательностью выборов дочерних элементов

  8. Элемент с последовательностью выборов дочерних элементов и атрибутов

8kfzkw68.alert_note(ru-ru,VS.90).gifПримечание.

Все декларации элементов complexType выводятся как анонимные типы. Единственный выводимый глобальный элемент — корневой элемент; все остальные элементы локальны.

Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из XML-документов.

Простой типизированный элемент

В следующей таблице показаны входные XML-данные для метода InferSchema и созданная XML-схема. Элемент, выделенный полужирным шрифтом, показывает схему, выведенную для элемента простого типа.

Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из XML-документов.

XML

Схема

<?xml version="1.0"?>

<root>text</root>

<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root" type="xs:string" />

</xs:schema>

Пустой элемент

В следующей таблице показаны входные XML-данные для метода InferSchema и созданная XML-схема. Элемент, выделенный полужирным шрифтом, показывает схему, выведенную для пустого элемента.

Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из XML-документов.

XML

Схема

<?xml version="1.0"?>

<empty/>

<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="empty" />

</xs:schema>

Пустой элемент с атрибутами

В следующей таблице показаны входные XML-данные для метода InferSchema и созданная XML-схема. Элементы, выделенные полужирным шрифтом, показывают схему, выведенную для пустого элемента с атрибутами.

Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из XML-документов.

XML

Схема

<?xml version="1.0"?>

<empty attribute1="text"/>

<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="empty">

<xs:complexType>

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:complexType>

</xs:element>

</xs:schema>

Элемент с атрибутами и простым содержимым

В следующей таблице показаны входные XML-данные для метода InferSchema и созданная XML-схема. Элементы, выделенные полужирным шрифтом, показывают схему, выведенную для элемента с атрибутами и простым содержимым.

Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из XML-документов.

XML

Схема

<?xml version="1.0"?>

<root attribute1="text">value</root>

<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:simpleContent>

<xs:extension base="xs:string">

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:extension>

</xs:simpleContent>

</xs:complexType>

</xs:element>

</xs:schema>

Элемент с последовательностью дочерних элементов

В следующей таблице показаны входные XML-данные для метода InferSchema и созданная XML-схема. Элементы, выделенные полужирным шрифтом, показывают схему, выведенную для элемента с последовательностью дочерних элементов.

8kfzkw68.alert_note(ru-ru,VS.90).gifПримечание.

Даже если элемент содержит только один дочерний элемент, он все равно интерпретируется как последовательность.

Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из XML-документов.

XML

Схема

<?xml version="1.0"?>

<root>

<subElement/>

</root>

<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:element name="subElement" />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

Элемент с последовательностью дочерних элементов и атрибутов

В следующей таблице показаны входные XML-данные для метода InferSchema и созданная XML-схема. Элементы, выделенные полужирным шрифтом, показывают схему, выведенную для элемента с последовательностью дочерних элементов и атрибутов.

8kfzkw68.alert_note(ru-ru,VS.90).gifПримечание.

Даже если элемент содержит только один дочерний элемент, он все равно интерпретируется как последовательность.

Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из XML-документов.

XML

Схема

<?xml version="1.0"?>

<root attribute1="text">

<subElement1/>

<subElement2/>

</root>

<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:element name="subElement1" />

<xs:element name="subElement2" />

</xs:sequence>

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:complexType>

</xs:element>

</xs:schema>

Элемент с последовательностью и выбором дочерних элементов

В следующей таблице показаны входные XML-данные для метода InferSchema и созданная XML-схема. Элементы, выделенные полужирным шрифтом, показывают схему, выведенную для элемента с последовательностью и выбором дочерних элементов.

8kfzkw68.alert_note(ru-ru,VS.90).gifПримечание.

Для атрибута maxOccurs элемента xs:choice устанавливается в выводимой схеме значение "unbounded".

Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из XML-документов.

XML

Схема

<?xml version="1.0"?>

<root>

<subElement1/>

<subElement2/>

<subElement1/>

</root>

<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:choice maxOccurs="unbounded">

<xs:element name="subElement1" />

<xs:element name="subElement2" />

</xs:choice>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

Элемент с последовательностью и выбором дочерних элементов и атрибутов

В следующей таблице показаны входные XML-данные для метода InferSchema и созданная XML-схема. Элементы, выделенные полужирным шрифтом, показывают схему, выведенную для элемента с последовательностью и выбором дочерних элементов и атрибутов.

8kfzkw68.alert_note(ru-ru,VS.90).gifПримечание.

Для атрибута maxOccurs элемента xs:choice устанавливается в выводимой схеме значение "unbounded".

Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из XML-документов.

XML

Схема

<?xml version="1.0"?>

<root attribute1="text">

<subElement1/>

<subElement2/>

<subElement1/>

</root>

<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml

ns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">

<xs:complexType>

<xs:sequence>

<xs:choice maxOccurs="unbounded">

<xs:element name="subElement1" />

<xs:element name="subElement2" />

</xs:choice>

</xs:sequence>

<xs:attribute name="attribute1" type="xs:string" use="required" />

</xs:complexType>

</xs:element>

</xs:schema>

Обработка атрибутов

Каждый раз, когда в узле встречается новый атрибут, он добавляется к выведенному определению узла с помощью атрибута use="required". В следующий раз, когда в экземпляре обнаружится этот узел, процесс вывода сравнит атрибуты текущего экземпляра с уже выведенными. Если в данном экземпляре отсутствуют некоторые из уже выведенных атрибутов, к определению атрибута добавляется атрибут use="optional". Новые атрибуты добавляются к существующим декларациям с атрибутом use="optional".

Ограничения вхождений

При выводе схемы формируются атрибуты minOccurs и maxOccurs для выведенных компонентов схемы, имеющие значения "0" или "1" и "1" или "unbounded". Значения "1" и "unbounded" используются только в случае, когда не удается выполнить проверку XML-документа со значениями "0" и "1" (например, если MinOccurs="0" не описывает действительное состояние элемента, используется значение minOccurs="1").

Смешанное содержимое

Для элемента, имеющего смешанное содержимое (например, текст, перемежающийся элементами), для выводимого определения сложного типа будет создан атрибут mixed="true".

Другие правила определения типов узлов

В следующей таблице описаны правила вывода для инструкций по обработке, комментариев, ссылок на сущности, данных типа CDATA, типа документа и узлов пространства имен.

Тип узла

Перевод

Инструкция по обработке

Не обрабатывается.

Комментарий

Не обрабатывается.

Ссылка на сущность

Класс XmlSchemaInference не обрабатывает ссылок на сущности. Если XML-документ содержит ссылки на сущности, нужно использовать модуль чтения данных, разворачивающий сущности. Например, можно передать в качестве параметра объект XmlTextReader, у которого свойство EntityHandling имеет значение ExpandEntities. Если обнаружены ссылки на сущности и модуль чтения данных не разворачивает сущности, будет вызвано исключение.

CDATA

Все разделы <![CDATA[ … ]] в XML-документе будут выведены как xs:string.

Тип документа

Не обрабатывается.

Пространства имен

Не обрабатывается.

Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из XML-документов.

См. также

Основные понятия

Выведение XML-схемы

Выведение схем из XML-документов

Правила выведения простых типов

Ссылки

XmlSchemaInference

Другие ресурсы

Модель объектов схемы XML (SOM)