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