1 / 104

本课件仅用于北京航空航天大学计算机学院的教学; 本课件修改采用了一些网络资源(论文、研究报告、技术报告等),在采用的时候并没有准确标注引用信息。

声明. 本课件仅用于北京航空航天大学计算机学院的教学; 本课件修改采用了一些网络资源(论文、研究报告、技术报告等),在采用的时候并没有准确标注引用信息。. XML Schema. 林 学 练 2001年3月18日. 内容列表. Schema 简介 理解 Schema Schema 主要内容 Schema 详细内容. I.Schema 介绍. 比较 DTD 和 Schema, 简要介绍 Schema. DTD. XML 文档实例 (学生信息) 文档实例对应的 DTD ( 学生信息) DTD 特征

kedem
Télécharger la présentation

本课件仅用于北京航空航天大学计算机学院的教学; 本课件修改采用了一些网络资源(论文、研究报告、技术报告等),在采用的时候并没有准确标注引用信息。

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 声明 • 本课件仅用于北京航空航天大学计算机学院的教学; • 本课件修改采用了一些网络资源(论文、研究报告、技术报告等),在采用的时候并没有准确标注引用信息。

  2. XML Schema 林 学 练 2001年3月18日

  3. 内容列表 • Schema简介 • 理解Schema • Schema主要内容 • Schema详细内容

  4. I.Schema介绍 比较DTD和Schema,简要介绍Schema

  5. DTD • XML文档实例(学生信息) • 文档实例对应的DTD(学生信息) • DTD特征 • 元素定义方式是(元素,内容模型),在定义元素的同时,指定元素内容模型 • DTD缺点 • DTD有自己的特殊的语法,其本身不是XML文档 • DTD只提供了有限的数据类型 • DTD不支持名域机制

  6. Schema • XML文档的Schema(学生信息) • Schema特征 • Schema使用(元素,类型)模式描述文档的结构 • Schema优点 • 本身是XML文档 • 内建丰富的数据类型;可以方便地定义数据类型 • 支持名域(namespace)

  7. 小结 • Schema通过类型定义和元素声明,描述XML文档的结构。

  8. II. 理解Schema

  9. 如何理解Schema? 面向对象 以Java为参照,类比、分析Schema

  10. Schema基本概念 – 与Java之比较 • 类型定义 • 元素声明 • Schema,名域 • XML文档

  11. 类型定义 <xsd:complexType name="StudentType"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="age“ type="xsd:int“ minOccus=”0”/> </xsd:sequence> <xsd:attribute name=“sId“ type="xsd:NMTOKEN"/> </xsd:complexType> Class StudentType{ String name; int age; String sid; }

  12. 元素声明 • 元素声明: <xsd:element name=“age" type=”xsd:int”/> 对应于java中的变量声明: int age; • 属性声明: <xsd:attribute name=“b" type="xsd:NMTOKEN“ use="fixed" value="US"/> 对应于Java的变量声明 NMTOKEN b;

  13. Schema,namespace • Schema • Java程序是类的集合,Schema是类型定义和元素声明的集合 ,因此,Schema可以类比于Java程序 • Namespace • Schema中通过元素<schema>的属性targetNamspace指定名域: targetNamespace=“http://www.example.com/PO1” Namespace对应于Java中的package,如: package cscw.mypackage;

  14. XML文档实例 • 元素实例 • 进一步类推,可以得出XML文档的元素实例类比于Java中的类实例: student = new StudentType(); • XML文档元素与Java类实例的类比是差别最大的类比关系:前者是静态的文档,以字符形式存在;后者是程序的动态运行,以二进制形式存在于内存中。其实这个差别正是XML得以广泛应用的原因之一:二进制的数据很难在网络的不同应用之间传递,而文本数据则很容易。 • 文档实例 • XML文档实例类比于运行中的Java程序。

  15. Schema与Java类比汇总

  16. 类型系统 • 类型 • 类型扩展 • 类型限制 • 抽象元素,抽象类型 • 控制类型派生

  17. 类型(1) • ur-type • 概念上的类型,是类型系统的根 <xsd:element name="anything" type="xsd:anyType" /> 或者 <xsd:element name="anything" /> 在实际的应用中,ur-type可以表现为anyType或者anySimpleType,分别代表复杂类型的ut-type和简单类型的ur-type。 Java类型系统中,与ur-type相对应的类是Object,Object是Java中所有类型的根类型。需要注意的是,ur-type是概念上的类型。

  18. 类型(2) • 内建类型 • Schema内部预先定义的一些数据类型 这些数据类型包括:String, CDATA , token , byte , QName ……用户可以在这些数据类型的基础上,定义自己的数据类型。 类似于JDK中定义的基本类型库。

  19. 类型(3) • 用户定义类型 • 用户通过扩展(extension)、限制(restriction)原有的类型,构造出的新的类型 在Java语言中,用户也是通过扩展(extends,即继承)机制定义数据类型(class)的。默认情况下,Java编译器认为类是从Object类继承。

  20. 类型(4) • 简单类型定义 • 对字符串或字符串代表的信息进行限制而得到的新类型。用于属性内容,或者元素的文本内容。 <xsd:simpleType name="myInteger"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="10000"/> <xsd:maxInclusive value="99999"/> </xsd:restriction> </xsd:simpleType>

  21. 类型(5) • 复杂类型定义 • 复杂类型通常包含属性集合,有自己的内容模型 <xsd:complexType name="PurchaseOrderType"> <xsd:sequence> <xsd:element name="shipTo" type="xsd:string"/> <xsd:element ref="comment" minOccurs="0"/> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/> </xsd:complexType>

  22. 类型扩展(extension) • 在简单类型或者其他类型的基础上扩展 <xsd:element name="internationalPrice"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="currency" type="xsd:string" /> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element>

  23. 类型限制(Restriction) • 限制原有类型的内容模型,构造新类型 <xsd:simpleType name="USStateList"> <xsd:list itemType="USState"/> </xsd:simpleType> <xsd:simpleType name="SixUSStates"> <xsd:restriction base="USStateList"> <xsd:length value="6"/> </xsd:restriction> </xsd:simpleType>

  24. 置换组(Substitution Group) • 使得元素实例可以被其他元素实例所置换 • 被置换的元素(属性substitutionGroup的内容ipo:comment)称作head元素,head元素必须是Schema中全局声明的元素。 • 具有相同head元素的置换元素就属于同一个置换组。 <element name="shipComment" type="string" substitutionGroup="ipo:comment" /> <element name="customerComment" type="string" substitutionGroup="ipo:comment" />

  25. 抽象类型(1) • 抽象类型 在类型定义时加上属性abstract,并赋值“true”: <complexType name="Vehicle" abstract="true"/> 可以根据抽象类型声明元素,但不能直接创建抽象类型的实例元素

  26. 抽象类型(2) 以Java的抽象类型为例: //类的定义: abstract class A {…} class B extends A{…} //变量声明 A a; /** *创建实例,创建的是派生类型(类型B)的实例对象, *接着直接赋给以父类(抽象类型A)声明的变量a。 */ a = new B();

  27. 抽象类型(3) 假定Schema中定义了抽象类型Vehicle,并由抽象类型Vehicle派生出Car <complexType name="Vehicle" abstract="true"/> <complexType name="Car"> <complexContent> <extension base="target:Vehicle"/> </complexContent> </complexType> <element name="transport" type="target:Vehicle"/> 在实例文档中不能直接创建transport元素实例,如下例子是错误的: <transport xmlns="http://cars.example.com/schema" /> 正确的表示可以是这样: <transport xmlns="http://cars.example.com/schema" xsi:type="Car"/>

  28. 控制类型派生 • Final • 属性final=”restriction”表示类不能被派生 <complexType name="Address" final="restriction"> <sequence> <element name="name" type="string"/> <element name="street" type="string"/> <element name="city" type="string"/> </sequence> </complexType> 类似于Java中的final关键字: final class MyClass{…} • Fixed,仅用于简单类型 • Block,弱于final,仅防止restriction派生

  29. 包含(include) • 将其他xsd文件的内容包含到本文件中 <include schemaLocation = "http://www.example.com/schemas/address.xsd"/> Include 只能包含同一个namespace的xsd文件,不能跨越namespace进行。 • 利用include,可以将一个Schema分成多个xsd文档

  30. 导入(Import) • 导入不同Namespace中的类型定义和元素声明 • import 元素 <import namespace="http://www.example.com/IPO"/> • 引用(reference) <element ref="xipo:comment"/> • 类型库 名域和导入机制提供了一种可能:用户可以定义自己的基本类型,接着在其基础上构造新的类型,所有这些类型构成类型库。

  31. 小结 • Schema最重要的概念是类型定义 • 理解Schema语言的关键是面向对象思想。Schema更像是高级语言 • 设计Schema的主要工作是在原有类型的基础上,派生新类型、声明元素。

  32. III. Schema主要内容

  33. Schema的主要内容 • 抽象数据模型:Schema的基础概念 • XML表示(规则):抽象数据模型在Schema中的表示 • 有效性:Schema的作用是描述XML文档信息的结构,验证XML文档的有效性

  34. 抽象数据模型 • 概念: • 抽象数据模型是个概念上的模型,类似于高级语言中的面向对象 • 组成: • 抽象数据模型由Schema部件(Schema Component,也是抽象的概念)组成,Schema部件分成三类12种。 (本文第二部分描述的类型定义的各种机制大都体现在这些Schema部件中)

  35. Schema部件(Schema Component) • 基本部件 • 简单类型定义 • 复杂类型定义 • 属性声明 • 元素声明 • 辅助部件 • 注释(Annotation) • Model Group • Particle • Wildcard • Model group definition • Notation declaration • 次要部件 • Attribute group definition • Identity-constraint difinition

  36. 元素声明(Element Declaration) • 概念 • 部件属性 • XML表现(规则) • 例子

  37. 属性声明(Attribute Declaration) 概念 部件属性 XML表现(规则) 例子

  38. 符号声明(Notation Declaration) • 概念 • 部件属性 • XML表现(规则) • 例子

  39. 简单类型定义(Simple Type Definition) • 概念 • 部件属性 • XML表现(规则) • 例子

  40. 复杂类型定义(Complex Type Definition) • 概念 • 部件属性 • XML表现(规则) • 例子

  41. 模型组定义(Model Group Definition) • 概念 • 部件属性 • XML表现(规则) • 例子

  42. 属性组定义(Attribute Group Definition) • 概念 • 部件属性 • XML表现(规则) • 例子

  43. 模型组(Model Group) • 概念 • 部件属性 • XML表现(规则) • 例子

  44. Particle • 概念 • 部件属性 • XML表现(规则)(无) • 例子(无)

  45. Wildcard • 概念 • 部件属性 • XML表现(规则) • 例子

  46. Annotation • 概念 • 部件属性 • XML表现(规则) • 例子

  47. 标识-限制定义(Identity-contraint Definition Component ) • 概念 • 部件属性 • XML表现(规则) • 例子(XML文档,Schema)

  48. 2. XML 表现(规则) • 抽象数据模型的XML表现参考“抽象数据模型” • Schema的XML表现 • XML表现(规则) • 例子

  49. 3. 有效性 • Schema的作用是描述XML文档结构,验证XML文档的有效性

  50. 比较:抽象数据模型的XML表现(规则)与文法产生式(规则)比较:抽象数据模型的XML表现(规则)与文法产生式(规则) Schema的XML表现有点类似于高级语言中的产生式规则,比如文法: <A>::=b<A>|cc 根据这个产生式规则可以构造简单的语法解析器,由机器自动分析程序的语法。 Schema部件的XML表现(规则)仅仅是功能上类似于产生式规则,它的实际形式并不是产生式,因此无法根据这些规则构造完整的解析器,由机器自动分析Schema文件。对此,Schema增加了辅助措施:约束条件。

More Related