本主题介绍架构推理过程如何将 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" 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"
中。
匹配项约束
在架构推理过程中,将为架构的推断组件生成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 文档推断架构。