Правила выведения структуры и типов узлов схемы
Обновлен: November 2007
В данном разделе описывается, как в процессе вывода схемы различные типы узлов XML-документа преобразуются в структуру языка XSD.
Правила вывода элементов
В данном разделе описаны правила вывода для декларации элементов. Могут быть выведены восемь структур деклараций элементов.
Элемент простого типа
Пустой элемент
Пустой элемент с атрибутами
Элемент с атрибутами и простым содержимым
Элемент с последовательностью дочерних элементов
Элемент с последовательностью дочерних элементов и атрибутов
Элемент с последовательностью выборов дочерних элементов
Элемент с последовательностью выборов дочерних элементов и атрибутов
Примечание. |
---|
Все декларации элементов 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-схема. Элементы, выделенные полужирным шрифтом, показывают схему, выведенную для элемента с последовательностью дочерних элементов.
Примечание. |
---|
Даже если элемент содержит только один дочерний элемент, он все равно интерпретируется как последовательность. |
Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из 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-схема. Элементы, выделенные полужирным шрифтом, показывают схему, выведенную для элемента с последовательностью дочерних элементов и атрибутов.
Примечание. |
---|
Даже если элемент содержит только один дочерний элемент, он все равно интерпретируется как последовательность. |
Дополнительные сведения о процессе выведения схемы см. в разделе Выведение схем из 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-схема. Элементы, выделенные полужирным шрифтом, показывают схему, выведенную для элемента с последовательностью и выбором дочерних элементов.
Примечание. |
---|
Для атрибута 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-схема. Элементы, выделенные полужирным шрифтом, показывают схему, выведенную для элемента с последовательностью и выбором дочерних элементов и атрибутов.
Примечание. |
---|
Для атрибута 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-документов
Правила выведения простых типов