1.6 XML Schema

本文深入探讨了XMLSchema与DTD的区别,强调XMLSchema在XML文档结构描述、数据类型支持、约束定义及与XMLAPI兼容性方面的优势。同时,通过具体实例展示了XMLSchema的语法结构及其在描述复杂数据类型和关系模式上的优越性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如同 DTD 一样,XML Schema 也是一种用于定义和描述 XML 文档结构和内容的模式语言,其出现的目的是为了克服 DTD 的局限性,比如 XML DTD 并不能很好地实现应用程序的不同模块间的相互协调,缺少对文档结构、属性、数据类型等约束的足够描述等,并为 XML 文档提供更丰富的语法结构。另外, XML DTD 不使用 XML 语法,采用的完全是另外一种专用的表示方法,并且对类型和名称空间仅提供有限的支持。W3C 希望以 XML Schema 来作为 XML 模式描述语言的主流,并逐渐代替 XML DTD。

1.6.1 XML Schema 与 DTD 的比较

XML Schema 相比 XML DTD,具有如下一些显著优点:

(1)XML Schema 符合 XML 语法结构,XML Schema 文件本身也是一种 XML 文档,所以,XML 用户很容易理解 XML Schema 的语法格式。

(2)一些常用的 XML API,例如 DOM 和 SAX,它们只能处理 XML 实例文档,并没有提供解析 XML DTD 文档内容的功能,无法通过 DOM 和 SAX 来得到 DTD 中的描述信息。如果一些应用程序需要得到 DTD 本身的描述内容和结构,例如使用关系数据库来存储 XML 文档中的数据时,就涉及如何将 XML DTD 映射为关系模式的问题。由于没有创建和访问 DTD 的标准编程接口,无法使用标准的编程方式来操作 DTD 文档;为了实现对 XML DTD 的解读,研究人员必须为 XML DTD 开发新的接口或者专用工具。由于 XML Schema 本身就是一个 XML 文档,可以使用通用的 XML 解析器解析它,例如,使用 DOM、SAX 或 JDOM 等 XML API 就可以很容易解析出 XML Schema 文档中的内容。所以,XML 的编辑工具、API 开发包及语法分析器都可以直接用于处理 XML Schema 文件。

(3)XML 有非常高的合法性要求,XML DTD 和 XML Schema 都用于对 XML 文档进行描述,都被用作验证 XML 合法性的基础。但是,XML DTD 本身的合法性的验证必须采用另外一套机制,XML Schema 则采用与 XML 文档同样的额合法性验证机制。

(4)XML Schema 对名称空间支持得非常好,而 XML DTD 几乎不支持名称空间。

(5)DTD 支持的数据类型非常有限,在大多数应用环境下都显得能力不足。例如,DTD 可以指定一个元素中必须包含字符文本(PCDATA),但无法指定一个元素中必须包含非负整数之类的类型;而 XML Schema 比 XML DTD 支持更多的数据类型,并支持用户自定义新的数据类型。

(6)DTD 定义约束的能力也非常有限,无法对 XML 实例文档做出更细致的语义限制,例如,无法很好地指定一个元素中的某个子元素必须出现7到12次;而 XML Schema 定义约束的能力非常强大,可以对 XML 实例文档做出细致的语义限制。

(7)在将关系数据表示为 XML 数据和实现基于关系数据库的 XML 数据存储、查询和更新等问题上,XML Schema 基本满足关系模式在数据描述上的需要,比 XML DTD 更适合描述关系数据。

当然,XML Schema 也有一些缺陷,例如,不能像 XML DTD 一样定义实体,XML Schema 比 DTD 更复杂。一般的用户无需自己编写 XML Schema 文档,作为通常的学习和应用需要,读者只需要知道 XML Schema 与 XML DTD 所实现的基本功能和目的是一样的,而不用去考虑两者的语法格式的显著区别。

1.6.2 一个 XML Schema 例子

XML Schema 文件称为模式文档,而采用某个 XML Schema 文档作为约束模式的 XML 文档称为实例文档,XML Schema 模式文档的扩展名通常为 .xsd。下面的例子是一个采用 XML Schema 作为其模式文档的 XML 实例文档,对于其中目前还没有讲解的细节,暂且不用理会。

例子:xmlbook.xml

<?xml version="1.0" encoding="UTF-8"?>

<书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:noNamespaceSchemaLocation="xmlbook.xsd">

    <书>

        <书名>JavaScript 网页开发</书名>

        <作者>张孝祥</作者>

        <售价>28.00 元</售价>

    </书>

</书架>

xmlbook.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://wwww.w3.org/2001/XMLSchema">
    <xs:element name='书架'>
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded'>
                <xs:element name='书'>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='书名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售价' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

下面是对 xmlbook.xsd 文件内容的解释:

(1)<schema> 元素为所有 XML Schema 模式文档的根元素,它用于声明该 XML 文档是一个 XML Schema 模式文档。

(2)由于 XML Schema 模式文档本身也是一个 XML 文档,它们里面的词汇都是含有特定含义和作用的,这些词汇来自另外一个统一规定的模式文档,该模式文档的名称空间为 "http://wwww.w3.org/2001/XMLSchema"。在 xmlbook.xsd 中,将该名称空间定义成使用 xs 前缀名来代表,所以,有关元素前都增加了 xs 前缀。关于名称空间的细节,稍后将进行详细讲解。

(3)模式文档中的每一个 <element> 元素用于定义实例文档中的一个元素,<element> 元素可以是不包含任何子元素的空元素的形式,也可以是包含子元素的成对标签的形式。<element> 元素定义的实例文档中的每个元素都对应一种类型,这个类型通过 <element> 元素的 type 属性来指定。

(4)如果模式文档中的 <element> 元素所定义的实例文档中的元素包含子元素或者具有属性,那么,这个元素的类型即为复杂类型。在模式文档中必须使用 <complexType> 元素来定义复杂类型,复杂类型的定义可以直接嵌套在相关的 <element> 元素中,也可以在 <element> 元素的外部进行定义,然后在 <element> 元素中使用 type 属性来进行引用。在 <complexType> 元素中可以为它所定义的元素类型指定子元素和属性,其中用于声明子元素的语句必须嵌套在 <sequence>、<choice>等标签内。<sequence>、<choice> 等标签用于表示子元素的各种组合关系,例如,<sequence> 标签用于说明各个子元素在实例文档中的出现顺序必须与它们在模式文档中声明时的顺序一致,<choice> 用于说明在实例文档内只需出现其中声明的各个子元素之中的任何一个。注意,即使 <complexType> 元素中定义的子元素只有一个,那也必须将声明子元素的语句嵌套在<sequence>、<choice> 等标签内。

(5)<sequence> 元素中的 maxOccurs=‘unbounded’ 属性设置用于说明嵌套在 <sequence> 元素中的子元素定义可以在 XML 实例文档中出现多次,上不封顶。

====== 以上内容来源于 张孝祥老师的《深入体验Java Web开发内幕 》,记录下来,只作为个人读书笔记。===========

资源下载链接为: https://pan.quark.cn/s/967a7e1a5d94 《东北大学应用数理统计2009—2020真题及个人答案解析》是一份极具价值的学习资料,对于准备东北大学应用数理统计课程考试的学生而言意义非凡。它涵盖了十二年的考试真题以及作者的详细答案解析,为学生提供了一个深入了解考试方向、复习要点和解题技巧的优质平台。 数理统计作为应用数学的重要分支,主要基于概率论理论,通过收集、分析、解释和呈现数据来解决实际问题。在东北大学的该课程中,学生需掌握诸多核心知识点,包括样本与总体、随机变量、期望值与方差、概率分布、假设检验、置信区间、线性回归等。 首先,样本与总体是统计学的基础概念。通过对样本的研究来推断总体特征,理解它们之间的关系及抽样分布的重要性至关重要。其次,随机变量是概率论的核心,无论是连续型还是离散型随机变量,掌握其概率密度函数或概率质量函数是进行统计推断的关键。期望值和方差分别反映随机变量的平均值和波动程度,帮助我们了解随机现象的中心趋势和稳定性。此外,常见的概率分布如均匀分布、正态分布、泊松分布、二项分布等,对于分析实际问题中的数据分布极为重要。假设检验是科研和决策中的重要环节,常用的T检验、Z检验、卡方检验和F检验等方法,能够帮助判断数据是否支持特定假设。置信区间则用于估计总体参数的不确定范围,其计算和解释是理解统计推断的关键。线性回归是预测和建模的常用方法,通过分析最佳拟合直线来揭示变量间的关系,而残差分析、多重共线性和模型选择等则是提升回归分析能力的重要方面。 在解答这些真题时,作者不仅检验了自己的知识掌握程度,还分享了个人的解题思路和策略。这些内容对于后来的学习者来说极具参考价值。通过深入研究这些真题和答案,学生可以熟悉考试的常见题型,把握出题老师的命题风格,并学会如何高效地组织和呈现答案。这份资料对于提升学生的数理统计理论水平和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值