Post on 12-Jan-2016
description
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 2页 共 49 页
问题陈述 2.D.1 CyberShoppe 总公司向分公司发送产品的信息。产品
详细资料在所有的分店里必须用一致的格式进行存储。必须对存储在数据存储库中的数据进行约束来确保信息一致性。
CyberShoppe 所销售的产品被组织为两个种类:玩具和书。产品的详细资料包括产品名、产品的简短描述、产品的价格和仓库中的现存量。通过产品 ID 来唯一标识每个产品。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 3页 共 49 页
任务单 确定存储结构化数据所必需的元素。 确定属性。 确定存储一致性数据的方法。 确定声明用来存储结构化数据的元素的方法。 确定声明属性的方法。 确定验证数据结构的方法。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 5页 共 49 页
任务 1 :确定存储结构化数据所必需的元素。 结果 : 需要存储 CyberShoppe 销售的产品详细资料的元素如
下:
元素 描述PRODUCTDATA 指出存储在文档中的各种产品指定的数据。作为所有其他元素的根元素。
PRODUCT 表示每一个产品的详细资料(产品名称、描述、价格和数量)。
PRODUCTNAME 表示每个产品的名称。
DESCRIPTION 表示每个产品的描述。
PRICE 表示每个产品的价格。
QUANTITY 表示每个产品的数量。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 6页 共 49 页
任务 2 :确定属性。 结果 :
在 CyberShoppe案例中,你需要存储 XML文档中的产品的所有详细资料。
每个产品需要一个唯一的标识号。该标识号是一个无形的、抽象的属性,用它来检索特定产品的详细资料。因此,定义 PRODUCTID 作为 PRODUCT 元素的一个属性。
产品的种类把产品进行分类(比如书或玩具)。因此CATEGORY 也被定义为 PRODUCT 元素的一个属性。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 7页 共 49 页
任务 2 :确定属性。 (续) 下面的表指定了在存储产品详细资料的 XML 文档中
所使用的属性:
属性 描述PRODUCTID 表示每个产品的一个唯一标识值。对于每个产品都必须指定它。
CATEGORY 表示产品的类别和指定一个产品是玩具还是书。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 8页 共 49 页
任务 3 :确定存储一致性数据的方法。
文档类型定义 DTD 定义了 XML 文档内容的结构,因此允许你以一致
的格式存储数据。 XML 允许你为应用程序创建自己的 DTD 。
你可以依据 DTD 来检查 XML 文档。 这种检查过程被称为验证。 与 DTD 相符合的 XML 文档被认为是有效的文档。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 9页 共 49 页
任务 3 :确定存储一致性数据的方法。 (续)结果 :
因为 DTD 允许你指定数据元素的结构和类型,因此能够创建 DTD 来指定文档的结构 。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 10页 共 49 页
任务 4 :确定声明存储结构化数据的元素的方法。 在 DTD 中,使用下面的语法声明元素:
<!ELEMENT elementname (content-type orcontent-model)>
元素有下列类型: Empty
Unrestricted
Container
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 11页 共 49 页
任务 4 :确定……的方法。(续)
在 DTD 中声明元素的时候,不同的符号用来指定一个元素是强制的还是可选择的和它是否将会多次出现。
下面的表列举了在 DTD 中指定元素时使用的各种符号:
符号 含义 实例 描述 , 以指定的顺序 " 与
" PRODUCTNAME, DESCRIPTION
PRODUCTNAME 与 DESCRIPTION 必须以这种顺序出现,
| " 或 " PRODUCTNAME|DESCRIPTION
PRODUCTNAME 或DESCRIPTION.
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 12页 共 49 页
任务 4 :确定……的方法。(续)
Symbol Meaning Example Description
? “ 可选择的 ", 能且只能出现一次
DESCRIPTION? DESCRIPTION 不需要被表示,但是如果被表示,它只能出现一次。
* 有 0 次或多次出现该元素
(PRODUCTNAME|DESCRIPTION)*
能够以任何顺序任意次表示PRODUCTNAME 或DESCRIPTION 元素。
+ 至少出现一次该元素。能够多次出现。
DESCRIPTION+ 可有多个 DESCRIPTION 元素。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 13页 共 49 页
元素 内容类型 描述PRODUCTDATA 元素内容 包含一个或者多个 PRODUCT元素。
PRODUCT 元素内容 包含其他产品的详细资料,因此将包含PRODUCTNAME、 DESCRIPTION、 PRICE和 QUANTITY 元素。
PRODUCTNAME 数据内容 包含表示产品名的规则文本。
DESCRIPTION 数据内容 包含表示产品描述的规则文本。
PRICE 数据内容 包含表示产品价格的规则文本。
QUANTITY 数据内容 包含表示产品数量的规则文本。
任务 4 :确定……的方法。(续) 在每个给定的场景中,在下表中给出每个元素的内容类
型:
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 14页 共 49 页
任务 4 :确定……的方法。(续) You need to use the <!ELEMENT> statement for
declaring elements in a DTD. 你需要使用 <!ELEMENT>语句来声明 DTD 中所有的这些元素。
例如,通过在 DTD 中添加下面的声明,你可以声明用在CyberShoppe 场景中的 PRODUCTNAME 元素:
<!ELEMENT PRODUCTNAME (#PCDATA)>
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 15页 共 49 页
任务 5 :确定声明属性的方法。 在 DTD 中声明属性的语法如下:
<!ATTLIST elementname attributename valuetype [attributetype] [“default”]>
attributename valuetype [attributetype] [“default”]部分象为任意给定元素创建多个属性的必要性一样经常重复。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 16页 共 49 页
任务 5 :确定声明属性的方法。(续) 可以在 DTD 中指定的属性的值类型有:
PCDATA
ID
(enumerated)
属性类型为: REQUIRED
FIXED
IMPLIED
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 17页 共 49 页
任务 5 :确定声明属性的方法。(续)结果: 下面的表指定了用在给定场景中需要属性的属性类型和值
类型:
为了在 DTD 中声明属性,你需要使用 <!ATTLIST> 语句。
属性 属性类型 值类型 描述
PRODUCTID #REQUIRED ID 产品 ID必须有一个唯一的值并且必须为每一个产品都指定产品 ID。
CATEGORY #REQUIRED (enumerated) 种类必须是玩具或书。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 18页 共 49 页
任务 6 :确定验证数据结构的方法。 为了使存储在 XML 文档中的数据的结构对于 DTD 是有效
的,你需要使用解析器。 解析器是检查 XML 文件中所使用语法的软件程序。解析
器有两种类型。它们是: 非确认解析器:检查文档是否遵循 XML 语法规则。 确认解析器 :检查 XML 文档的形式良好性与有效性
。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 19页 共 49 页
任务 6 :确定验证数据结构的方法。 (续)结果: 为了检查送到 CyberShoppe 分公司的数据是否遵循在
DTD 中指定的结构,你需要使用确认解析器。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 20页 共 49 页
任务 7 :声明元素和属性。 内部 DTD 和外部 DTD
你可以在 DTD 中声明元素和属性。 DTD 可分为两种类型:
内部 DTD
外部 DTD
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 21页 共 49 页
任务 7 :声明元素和属性。(续)
下面的表列出了内部 DTD 和外部 DTD 的不同:
内部 DTD 外部 DTD
该 DTD是 XML文档的一部分。 该 DTD作为一个独立的文件被维护。该文件的引用被包含在 XML文档中。
该 DTD只能被创建它的文档使用,不能跨多个文档使用。
该 DTD可以跨多个文档使用。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 22页 共 49 页
任务 7 :声明元素和属性。(续) 为了确保 XML 文档的结构与 DTD 一致,你必须使
DTD 和 XML 文档发生联系。 它能用来定义一个内部 DTD 。它也可以用做一个外部
DTD 的引用。 在 XML 文档中定义一个内部 DTD 的语法如下:
<!DOCTYPE rootelement
[element and attribute declarations]>
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 23页 共 49 页
任务 7 :声明元素和属性。(续) 在 XML 文档中引用一个外部 DTD 的语法如下:
<!DOCTYPE rootelement PUBLIC|SYSTEM [public identifier] "path-of-file">
动作 :
输入创建 DTD 的代码。 保存文件为 products.dtd.
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 24页 共 49 页
任务 8 :存储数据。 动作: 编写创建 XML 文档的代码。 保存文件为 products.xml.
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 25页 共 49 页
任务 9 :验证数据结构动作: 在 Internet Explorer 中打开 index.htm 。
单击 DTD Validator 链接。 在文本框中输入需要解析的 XML 文档名。 单击 Validate 按钮。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 26页 共 49 页
稍等一下…yberShoppe 分公司向总公司发送关于它们所销售的书的信息。必须以一致的格式存储书的详细资料。对保存在数据存储库中的数据必须进行限制来确保信息一致性。 CyberShoppe 所销售的书的详细资料包括书的名称、书的 ISBN 、书作者的姓和名字、价格和书的种类。每本书的 ISBN 是唯一的。另外,你需要确保书的种类包含 HISTORY 、 SCIENCE 或 者 FICTION 作为它的有效值。为声明在 XML 文档中用来存储书的详细资料的元素,创建一个 DTD 。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 27页 共 49 页
XML 模式介绍 XML 模式用来定义 XML 文档的结构。 Microsoft已经开发了一种语言来定义 XML 文档的模式。
这种语言称为 XML 模式定义 (XSD) 语言。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 28页 共 49 页
XML 模式超越 DTD 的优点 使用 XSD 创建的 XML 模式超越 DTD 的一些优点如下
: 与 DTD 相比, XSD提供了跨越能分配给元素和属
性的数据类型的更多的控制。 DTD 不能使你定义自己的定制数据类型。 XSD 能
使你创建你自己的数据类型。 XSD 也允许你指定数据的约束。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 29页 共 49 页
XML 模式超越 DTD 的优点 (续) 定义 DTD 的语法与用来创建 XML 文档的语法不同
。但是,定义 XSD 的语法与 XML 文档的语法相同。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 30页 共 49 页
问题陈述 2.D.2
CyberShoppe 总公司把关于它的产品的信息发送给它的分公司。产品详细资料必须以一致的格式存储。必须对被保存在数据存储库中的每种数据进行约束,来确保信息的一致性。产品的详细资料包含产品的名称、关于它的简短描述、产品的价格和仓库中现有的数量。产品的价格必须总是大于 0 。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 31页 共 49 页
任务单 确定需要存储的元素。
确定元素内容的数据类型。 确定声明简单类型元素的方法。
确定声明复杂类型元素的方法。
创建 XML 模式。 创建一个与该模式相符的 XML 文档。
验证 XML 文档相对于模式的有效性。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 32页 共 49 页
任务 1 :确定需要存储的元素。 结果 :
对于给定的问题,在 XML 文档中需要的元素如下:
元素 描述PRODUCTDATA 标志对于各种产品指定的数据正在被存储在该文档中。作为所有其他元素
的根元素
PRODUCT 表示每一个产品的详细资料(产品名称、描述、价格和数量)
PRODUCTNAME 表示每种产品的名称
DESCRIPTION 表示每种产品的描述
PRICE 表示每种产品的价格
QUANTITY 表示每种产品的数量
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 33页 共 49 页
任务 2 :确定元素内容的数据类型。 在 XSD 中声明的每个元素都必须与一个数据类型相关
联。 XSD提供了一系列预定义数据类型。
Primitive 数据类型:它是 XSD 的基本数据类型,比如 string 、 decimal 、 float 和 boolean 。
Derived 数据类型:通过其他数据类型来定义。 Atomic 数据类型:不能再分的数据类型。 List 数据类型: 包含一组值。 Union 数据类型: 由 list 和 atomic 数据类型派生而来。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 34页 共 49 页
任务 2 :确定元素内容的数据类型。(续)
XSD 也允许自定义数据类型。这些自定义数据类型分类如下: 简单类型:只包含值的数据类型。 复杂类型:包含子元素、属性和混合内容的数据元
素。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 35页 共 49 页
任务 2 :确定元素内容的数据类型。(续)结果: 元素内容的数据类型如下:
元素 数据类型 描述PRODUCTDATA 复杂类型 能容纳其他元素、属性和混和内容的复杂类型元素。 该元素包含
复杂类型,这将在后面章节定义。
PRODUCT 复杂类型 能容纳其他元素、属性和混和内容的复杂类型元素。 该元素包含复杂类型,这将在后面章节定义。
PRODUCTNAME String 包含数据字符串类型的值的简单类型元素。
DESCRIPTION String 包含数据字符串类型的值的简单类型元素。
PRICE Positiveinteger 包含正整数数据类型值的简单类型元素(产品的价格一定是大于 0的)。
QUANTITY Integer 包含整数数据类型值的简单类型元素。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 36页 共 49 页
任务 3 :确定声明一个简单类型元素的方法。 简单类型元素不包含任何子元素或者属性。它只包含值
(比如数字、字符串和日期)。 用简单类型声明元素的语法如下:
<xsd:element name=”element-name” type=”data type” default=”default value” minOccurs=”nonNegativeInteger” maxOccurs=”nonNegativeInteger|unbounded” />
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 37页 共 49 页
任务 3 :确定声明一个简单类型元素的方法。(续) 你可以将元素和用户定义简单类型相关联。为此,你必
须定义新的简单类型。 你可以使用 XSD 的 simpleType 元素来创建自定义的简
单类型。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 38页 共 49 页
任务 3 :确定声明一个简单类型元素的方法。(续)结果: 对于给定的问题,在 XSD 中声明简单元素,如下所示
: <xsd:element name="PRODUCTNAME"
type="xsd:string"/><xsd:element name="DESCRIPTION"
type="xsd:string"/><xsd:element name="PRICE"
type="xsd:positiveInteger"/><xsd:element name="QUANTITY"
type="xsd:nonNegativeInteger"/>
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 39页 共 49 页
任务 4 :确定声明复杂类型元素的方法。 复杂类型元素包含其他的元素、属性和混和内容。 为了声明复杂元素,你需要首先定义一个复杂类型。在
定义复杂类型之后,你可以通过使该数据类型和元素相关联来声明一个复杂元素。
通过下面的语法,你可以定义一个复杂类型: <xsd:complexType name=”data type name”>
Content model declaration
</xsd:complexType>
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 40页 共 49 页
任务 4 :确定声明复杂类型元素的方法。(续) 为了把一个元素声明为复杂类型,该元素必须和复杂类
型相关联。 例如,为了把元素 PRODUCT 声明为复杂类型元素,你
可以使该元素和 prdt 数据类型相关联,如下所示:
<xsd:element name="PRODUCT" type="prdt"/>
结果: 在 CyberShoppe 场景中,你需要两个复杂类型元素:
PRODUCTDATA 和 PRODUCT 。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 41页 共 49 页
任务 4 :确定声明复杂类型元素的方法。(续) 你可以使它们和复杂类型相关联来创建复杂类型元素。 你可以使用 XSD 的 element 元素来声明一个复杂类型
元素。 你可以使用 XSD 的 complexType 元素来创建复杂元素
。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 42页 共 49 页
任务 5 :创建 XML 模式。 模式元素
使用模式元素来完成 XSD 的各种组件的集成。 XML 模式声明开始于 <schema> 元素。 <schema> 元素使用 xmlns 属性来指定名称空间和
该文档相关联。 动作:
在记事本中输入 XML 模式。 保存文件为 product.xsd 。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 43页 共 49 页
任务 6 :创建一个与该模式相符的 XML 文档。 为了创建与 XML 模式相符的数据结构,你应该创建一
个 XML 文档,并使它和 XML 模式相关联。 XML 不能直接的与 XML 模式文件相关联。 XML 文件
只能通过确认器与 XML 模式相关联。
动作: 在记事本中输入代码。 保存文件为 products.xml
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 44页 共 49 页
任务 7 :验证 XML 文档相对于模式的有效性。 动作:
打开 index.htm.
单击 Schema Validator 链接。 输入 XML 文档和 XSD 文件的名称。 单击 Validate 按钮。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 45页 共 49 页
问题陈述 2.P.1 CyberShoppe 所销售的书的详细资料由书的名称、书的ISBN 、作者的姓和名字、书的价格。 ISBN 必须以字母 I开头,后面再跟随三个数字。
为了维护数据完整性,应使数据有效来确保它符合指定的标准。数据使用的数据类型必须和数据库中使用的数据类型相兼容。所有的数据必须以一致的格式存储。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 46页 共 49 页
小结在这课里,你学习了: 文档类型定义 (DTD) 是在 XML 文档中定义数据结构的
一种方法。 有两种类型的 DTD :
内部 DTD :它被包括作为文档的一部分。 外部 DTD :它被存储为一个拥有在 XML 文档中使
用的所有元素和属性声明的分离文件。 元素有三种类型: empty 、 unrestricted 和
container 。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 47页 共 49 页
小结(续) <!ELEMENT> 语句用来在 DTD 中声明一个元素。 <!ATTLIST> 语句用来声明 DTD 中的一个元素的属性
列表。 在 XML 中使用 <!DOCTYPE > 语句使 XML 文档和
DTD 相关联。 非确认解析器检查一个 XML 文档是否为形式良好的文
档。 确认 XML 解析器用语验证 XML 文档对于 DTD 或模式
的有效性。
确保 XML 文档中数据的一致性
©NIIT 可扩展标记语言 / 第二课 / 第 48页 共 49 页
小结(续) 模式用来指定元素的列表和这些元素在 XML 文档中出
现的顺序。 在模式中用来描述元素结构的语言称为 XML 模式定义
(XSD) 语言。 XML 模式支持的数据类型可如下分类:
Primitive Derived Atomic List