本主题介绍架构推理过程如何将 XML 文档中的节点类型转换为 XML 架构定义语言 (XSD) 结构。
元素推理规则
本部分介绍元素声明的推理规则。 将推断出元素声明的八个结构:
简单类型的元素
空元素
具有属性的空元素
具有属性和简单内容的元素
具有一系列子元素的元素
具有子元素和属性序列的元素
具有一系列子元素选择的元素
具有子元素和属性选项序列的元素
注释
所有 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" xmlns: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" xmlns: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" xmlns: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" xmlns: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" xmlns: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" xmlns: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" xmlns: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" xmlns: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 | XML 文档中的任何 <![CDATA[ … ]] 节都将推断为 xs:string。 | 
| 文档类型 | 忽视。 | 
| 命名空间 | 忽视。 | 
有关架构推理过程的详细信息,请参阅 从 XML 文档推断架构。