返回介绍

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

发布于 2025-02-23 23:16:10 字数 10657 浏览 0 评论 0 收藏 0

本主题介绍架构推断过程如何将 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 作为参数传递。 如果遇到实体引用,并且读取器没有展开实体,将引发异常。
CDATAXML 文档中的任何 <![CDATA[ … ]] 节均将推断为 xs:string
文档类型已忽略。
命名空间已忽略。

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

另请参阅

XmlSchemaInference
XML 架构对象模型 (SOM)
推断 XML 架构
从 XML 文档推断架构
推断简单类型的规则

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文