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

本主题介绍架构推理过程如何将 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 架构。 粗体的元素显示为具有一系列子元素选择的元素推断的架构。

注释

元素 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>

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

下表显示了该方法的 InferSchema XML 输入和生成的 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"中。

匹配项约束

在架构推理过程中,将为架构的推断组件生成minOccursmaxOccurs属性,属性的值为"0""1"以及"1""unbounded"。 仅当"1""unbounded"值无法验证 XML 文档时,才使用"0""1"值(例如,如果MinOccurs="0"未准确描述一个元素,就使用minOccurs="1")。

混合内容

如果元素包含混合内容(例如与元素交错的文本),则会为推断的复杂类型定义生成 mixed="true" 属性。

其他节点类型推理规则

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

节点类型 翻译
处理指令 忽视。
注释 忽视。
实体参考 XmlSchemaInference 类不处理实体引用。 如果 XML 文档包含实体引用,则需要使用扩展实体的读取器。 例如,可以将XmlTextReader作为参数传递,其EntityHandling属性设置为ExpandEntities。 如果遇到实体引用,并且读取器没有展开实体,将引发异常。
CDATA XML 文档中的任何 <![CDATA[ … ]] 节都将推断为 xs:string
文档类型 忽视。
命名空间 忽视。

有关架构推理过程的详细信息,请参阅 从 XML 文档推断架构

另请参阅