Правила выведения структуры и типов узлов схемы
В данном разделе описывается, как в процессе вывода схемы различные типы узлов 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 . |
Document type | Пропускается. |
Пространства имен | Пропускается. |
См. дополнительные сведения о выведении схем из XML-документов.