推断架构节点类型和结构的规则

本主题介绍架构推断过程如何将 XML 文档中的节点类型转换为 XML 架构定义语言 (XSD) 结构。

元素推断规则

本节说明元素声明的推断规则。 其中将推断八种元素声明结构:

  1. 简单类型的元素

  2. 空元素

  3. 具有属性的空元素

  4. 具有属性和简单内容的元素

  5. 具有一系列子元素的元素

  6. 具有一系列子元素和属性的元素

  7. 具有一系列子元素选择的元素

  8. 具有一系列子元素和属性选择的元素

注意注意

所有 complexType 声明均推断为匿名类型。唯一推断的全局元素是根元素;所有其他元素都是局部元素。

有关架构推断过程的更多信息,请参见从 XML 文档推断架构

简单类型化的元素

下表显示 InferSchema 方法的 XML 输入以及生成的 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>

空元素

下表显示 InferSchema 方法的 XML 输入以及生成的 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>

具有属性的空元素

下表显示 InferSchema 方法的 XML 输入以及生成的 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>

具有属性和简单内容的元素

下表显示 InferSchema 方法的 XML 输入以及生成的 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>

具有一系列子元素的元素

下表显示 InferSchema 方法的 XML 输入以及生成的 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>

具有一系列子元素和属性的元素

下表显示 InferSchema 方法的 XML 输入以及生成的 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>

具有一系列子元素选择的元素

下表显示 InferSchema 方法的 XML 输入以及生成的 XML 架构。 粗体的元素显示为具有一系列子元素选择的元素推断的架构。

注意注意

在推断出的架构中,xs:choice 元素的 maxOccurs 属性设置为 "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>

具有一系列子元素和属性选择的元素

下表显示 InferSchema 方法的 XML 输入以及生成的 XML 架构。 粗体的元素显示为具有一系列子元素和属性选择的元素推断的架构。

注意注意

在推断出的架构中,xs:choice 元素的 maxOccurs 属性设置为 "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"。 只有值 "0" 和 "1" 无法验证 XML 文档时,才会使用值 "1" 和 "unbounded"(例如,如果 MinOccurs="0" 没有准确描述某个元素,则使用 minOccurs="1")。

混合内容

如果某个元素包含混合内容(例如混合了文本和元素),将为推断出的复杂类型定义生成 mixed="true" 属性。

其他节点类型推断规则

下表说明处理指令、注释、实体引用、CDATA、文档类型和命名空间节点的推断规则。

节点类型

转换

处理指令

忽略。

注释

忽略。

实体引用

XmlSchemaInference 类不处理实体引用。 如果 XML 文档包含实体引用,需要使用可以展开实体的读取器。 例如,可以将 EntityHandling 属性设置为 ExpandEntitiesXmlTextReader 作为参数传递。 如果遇到实体引用,并且读取器没有展开实体,将引发异常。

CDATA

XML 文档中的任何 <![CDATA[ … ]] 节均将推断为 xs:string。

文档类型

忽略。

命名空间

忽略。

有关架构推断过程的更多信息,请参见从 XML 文档推断架构

请参见

参考

XmlSchemaInference

概念

推断 XML 架构

从 XML 文档推断架构

推断简单类型的规则

其他资源

XML 架构对象模型 (SOM)