第2章 XML命名空间和Schema约束-_第1页
第2章 XML命名空间和Schema约束-_第2页
第2章 XML命名空间和Schema约束-_第3页
第2章 XML命名空间和Schema约束-_第4页
第2章 XML命名空间和Schema约束-_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章XML名称空间和Schema约束第1部分XML名称空间学习目标本单元学习:名称空间名称空间的作用域和处理使用名称空间的优缺点名称空间的使用

简介XML可以自定义标记集XML经常用于两个商务系统之间的通信XML中的元素名不是固定的当两个不同的文档使用描述两种不同的元素的相同名称时,将产生名称冲突名称空间是一个用来避免名称冲突的概念示例<?xmlversion="1.0"encoding="UTF-8"?><AUTHOR><TITLE>Mr.</TITLE><FIRST>Sidney</FIRST><SECOND>Sheldon</SECOND></AUTHOR>示例...1<?xmlversion="1.0"encoding="UTF-8"?><BOOKS><BOOK><TITLE>SkyisFalling</TITLE><PRICE>$5.6</PRICE></BOOK><BOOK><TITLE>RageofAngels</TITLE><PRICE>$4.3</PRICE></BOOK></BOOKS>使用前缀解决名称冲突

<?xmlversion="1.0"encoding="UTF-8"?><AUTHOR><AU:TITLE>Mr.</AU:TITLE><AU:FIRST>Sidney</AU:FIRST><AU:SECOND>Sheldon</AU:SECOND><BO:BOOK><BO:TITLE>SkyisFalling</BO:TITLE><BO:PRICE>$5.6</BO:PRICE></BO:BOOK><BO:BOOK><BO:TITLE>RageofAngels</BO:TITLE><BO:PRICE>$4.3</BO:PRICE></BO:BOOK></AUTHOR>名称空间

XML名称空间提供了一种避免元素名称冲突的方法它们通过给标记名关联一个词汇来解决名称冲突的问题名称空间可以使不同概念空间下的多个元素名出现在同一个XML文档中创建名称空间的语法如下:xmlns:prefix=namespacevalue对元素应用名称空间的语法是:<NameSpace:ElementName>Content</NameSpace:ElementName>属性和名称空间

和元素名一样,我们可以在属性名前添加一个名称空间前缀考虑一个以值/Univ/RD

声明的名为RD

的名称空间当我们有了一个声明为id

的属性以后,我们还需要使用名为RD

的名称空间来限定它以下示例显示了具有名称空间的属性<University xmlns:RD='/Univ/RD'> <RD:DeanRD:id=”1”>John </RD:Dean></University>缺省名称空间

如果文档中的大多数元素属于同一个名称空间,那么不必对每个元素名都附加前缀可以定义一个缺省的名称空间,并把它应用到所有未附加前缀的元素和属性定义一个缺省名称空间的语法为:xmlns="namespace"示例:<NAMExmlns="/NA"> <TITLE>Mr. </TITLE> <FIRST>Sidney </FIRST> <SECOND>Sheldon </SECOND></NAME>示例<?xmlversion="1.0"encoding="US-ASCII"?> <!—除去缺省的命名空间之外,此处还定义了另外3个命名空间--> <Universityxmlns='/Univ/Default' xmlns:RD='/Univ/RD' xmlns:Admit='/Univ/Admit'> <AcademicResearchxmlns:xmlschema='/Univ/RD'> <RD:Dean>Sophiya </RD:Dean> <RD:AssistantDean>Maria示例</RD:AssistantDean> <RD:Inchargeid="3">Dickenson </RD:Incharge> </RD:AcademicResearch><Admit:AdmissionAndPlacement> <Admit:Dean>David </Admit:Dean> <Admit:AssistantDean>Joseph </Admit:AssistantDean> <Admit:Inchargeid="3">John </Admit:Incharge> </Admit:AdmissionAndPlacement> </University>XML名称空间的优点

可复用性:XML名称空间可以实现标记的复用模块化:使用按照其它标准设计的元素和属性可以产生模块化的文档可扩展性:XML名称空间通过加入来源于其它词汇的元素和属性提供了语言的可扩展性

第2部分XML模式

学习目标本单元的学习:

XML模式的历史XML模式较之DTD的优点XML模式的数据类型和facet各种不同的XML模式元素创建简单的XML模式文件以及如何依据这些模式来验证XML

简介XML模式是由Microsoft公司开创的一项技术它用来改进DTD,现在已是W3C批准的一个标准模式通过施加对允许元素、属性等的控制充当着一种约束机制它限制了用户对于标记及其元素模型的选择模式为约束结构和表述XML文档的信息集定义了一组规则

有关DTD的问题

书写和理解困难不可扩展很难实现元数据的程序化处理不支持数据类型不支持继承XML模式的优点

XML模式是基于XML的,而不是某些专用语法它们提供了一个开放式的数据模型,从而使我们可以扩展词汇,并且在不违反文档语法的前提下建立继承关系它们支持多种数据类型,如Integer(整型)、Float(浮点型)、Boolean(布尔型)和date(日期型)XML模式支持属性组,从而使我们可以在逻辑上对属性进行组合它们支持名称空间集成,从而使我们可以将一个文档的个别节点与一个模式中的类型声明关联XML模式定义

XML模式本身是一个XML应用,这意味着它被实现为XML词汇XML模式文档基于XML语法模式以下述语句作为开始:<?xmlversion="1.0"encoding="UTF-8"?>模式定义包含在<xs:schema>

标记中

<xs:schema>元素

通常,一个XML模式包含一个序言,该序言后面跟有一个或多个声明序言是一组在<xs:schema>

元素中声明的属性以下代码给出了定义模式时使用的<xs:schema>

元素的语法:<xs:schemaxmlns:xs="/2001/XMLSchema">...</xs:schema><schema>

元素使用它的属性来标识任何将被<schema>

及其子元素使用的外部模式<xs:element>元素

该元素用来创建元素并定义它的结构元素类型的定义也包含在此标记中其语法如下:<xs:elementname="elementName"type="datatype"/>元素名对应于XML元素名数据类型对应于施加于元素可以保存的数据上的约束

<xs:element>

元素具有的一些属性

属性名值描述Name任何有效的名称被声明的元素名Type整型、字符串型等指定元素的数据类型Ref任何有效的名称该元素用来引用另一元素名default任何允许使用的值指定元素使用的缺省值Fixed任何允许使用的值指定固定的值。不允许在XML文档中给出其它值minOccurs任何正数。如果没有限制,使用无限大的值(unbounded)用来指定允许出现的最少次数在XML文档内部引用模式

XML模式语言是由名称空间/2001/XMLSchema

来识别的文档可以用schemaLocation

或noNamespaceSchemaLocation

属性来引用一个模式包含模式定义的方法如下:<RootElementxmlns:xsi="/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="externalxsdfile">示例—XSD代码XSD代码<?xmlversion="1.0"encoding="UTF-8"?><xs:schemaxmlns:xs="/2001/XMLSchema"> <xs:elementname="Message"type="xs:string"/></xs:schema>XML代码<?xmlversion="1.0"encoding="UTF-8"?><Messagexmlns:xsi="/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="Message.xsd"> HelloWorld</Message>XML模式元素

因为XML模式是使用XML语法编写的,所以XML模式定义的结构是指我们可以用来定义标记的XML构造元素这部分规范将描述用来定义模式的元素和属性同时,在这一部分中也将描述内容模型它们显式地指定了允许使用的元素的内部结构XML模式中的数据类型

基本数据类型

基本数据类型是指那些不用其它数据类型来定义的数据类型它们构成所有其它数据类型的基础,而且不可以被更小的组成部分定义它们不可以具有元素或内容属性,因为它们是派生出所有其它数据类型的基本类型

XML模式提供了两种用户定义的数据类型定义:

派生的或简单的复杂的

简单定义使我们知道该如何创建派生数据类型,包括那些被内置到模式规范中的数据类型复杂的定义主要用来描述内容模型用户定义类型具有以下一些特性:

值空间词汇空间Facets或约束用户定义的数据类型定义<xs:simpleType>元素

简单类型定义使用<simpleType>

元素、它的属性和任何有效的约束facets其语法如下:<xs:simpleType> <xs:restrictionbase="基础数据类型">

限定条件定义… </xs:restriction></xs:simpleType><xs:restriction>元素

任何派生的类型都基于基本数据类型以及施加于它的约束它的定义如下:<xs:simpleTypename="negativeValues"> <xs:restrictionbase="xs:integer"> <xs:maxExclusivevalue="0"/> </xs:restriction></xs:simpleType>FacetFacet是一个数据类型的定义特性之一,它将一个数据类型与其它数据类型区分开来它是一个值空间特性它包括诸如一个数值数据类型或一个字符串长度的边界之类的特性Facet分为两类:

基本facet约束facet基本facet

基本facet定义数据类型有5种基本facet:顺序(Order):对于某些数据类型,值之间存在着已定义的关系(如:数值具有有序的值)边界(Bound):有序的数据类型可能被约束到一个值的集合或范围基数(Cardinality):值空间内值的个数数值(Numeric):这用来指示元素中可用的值是否是数值型的

非数值(Non-numeric):这用来指示元素中可用的值是否是非数值型的约束facet

约束facet通过限制派生数据类型值空间从而限制该数据类型的词汇空间有几种可以被应用到派生数据类型的约束facet:EnumerationfractionDigits、totalDigitslength、minLength、maxLengthPatternminExclusive、maxExclusive、minInclusive、maxInclusive示例<xs:simpleType> <xs:restrictionbase="xs:integer"> <xs:minInclusivevalue="1001"/> <xs:maxInclusivevalue="9999"/> <xs:patternvalue="[1-9][0-9][0-9][1-9]"/> </xs:restriction></xs:simpleType>示例<xs:elementname="Phone"> <xs:simpleType> <xs:restrictionbase="xs:string"> <xs:pattern value="[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]"> </xs:pattern> </xs:restriction> </xs:simpleType></xs:element>复杂类型定义

复杂类型定义是属性声明和一个内容类型的集合,它们分别与属性和指定的元素类型的子元素相关复杂类型定义提供了验证包含该类型的文档实例的机制它们描述了元素和属性存在及内容它们还描述了一个元素类型的内容,它可能只是一个元素、文本、混合的或空的它们控制着派生其它类型的能力<complexType>元素复杂类型定义使用<complexType>

元素、它的属性和任何有效的约束facet<complexTypeabstract="boolean"base="QName"block="#all|subsetof{extension,restriction}"final="#all|subsetof{extension,restriction}"id="ID"mixed="boolean"name="NCName">示例<xs:elementname="name"><xs:complexType><xs:elementname="firstname"type="xs:string"/><xs:elementname="middlename"type="xs:string"/><xs:elementname="lastname"type="xs:string"/></xs:complexType></xs:element>选择和顺序组

<xs:elementname="paymentType"> <xs:complexType> <xs:choiceminOccurs="1"maxOccurs="1"> <xs:elementname="Cash"/> <xs:elementname="Check"/> <xs:elementname="CreditCard"/> <xs:elementname="DebitCard"/> </xs:choice> </xs:complexType></xs:element>选择和顺序组...1<xs:elementname="RECORD"> <xs:complexType> <xs:sequence> <xs:elementname="NAME"type="xs:string"/> <xs:elementname="IDNO"type="xs:integer"/> <xs:elementname="SCORE" type="xs:nonNegativeInteger"/> </xs:sequence> </xs:complexType> </xs:element><xs:all>元素<xs:all>

元素可以用来指定哪些子元素可以出现,而不指定它们出现的顺序我们还可以通过指定minOccurs

属性将这些子元素设置为可选的混合内容-xs:all示例

<xs:elementname="EmployeeList"> <xs:complexType> <xs:all> <xs:elementname="FirstName"/> <xs:elementname="MiddleName"minOccurs="0"/> <xs:elementname="LastName"/> </xs:all> </xs:complexType></xs:element><xs:attribute>元素

借助于XML模式的<xs:attribute>

元素,属性的创建和元素一样我们可以创建一个属性组,并将它指向一个元素<!--definitionofa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论