第3章《XML Schema》

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

3XML模式语言XMLSchema文档类型定义DTD是面向SGML语言的规范,在描述XML数据模式时不可避免地存在很多限制(比如缺少数据类型和命名空间的支持、语法规则过于简单以至描述能力有限、使用了非XML的格式等等)。本章将介绍专门用于XML数据建模的语言规范(以下称为XML模式语言)。3.1XML模式语言XML模式语言是指用来描述XML结构、数据内容、相关约束等方面特征的语言。XML模式语言的种类很多:ISOSchematronXDR(XML-DATAReduced)XMLSchemaRELAXNG一种非常独特的XML模式语言,无论是结合其他模式语言或者单独使用都具有强大的功能。Schematron语言允许直接表达规则,而不需要创建完整的语法基础设施。是由Microsoft公司提出的XML简化模式语言,作为W3C在讨论XMLSchema工作草案过程中提出的一种过渡性Schema语言,XDR已经被业界普遍认可,得到许多产品(例如,MS-BiztalkServer、MS-SQLServer、MS-Office)的广泛支持。W3C的正式推荐标准,提供了XML模式声明的完整语法、丰富的数据结构等,目前已成为应用最广泛的XML模式语言。一种基于语法的XML模式语言,可用于描述、定义和限制XML词汇表。它以简洁性和表达能力著称,并且具有良好的可扩展性。XMLSchema的特征1与DTD相比,XMLSchema具有特征:一致性:XMLSchema利用XML的基本语法规则来定义其文档结构,从而使XML的模式和实例定义达到统一;继承了XML的自描述性和可扩展性,使其更具有可读性和灵活性。完备性:XMLSchema对DTD进行了扩充,引入了数据类型、命名空间,并且支持对其他XMLSchema的引用,从而使其具备较强的模块性;规范性和准确性:XMLSchema提供了更加规范和完备的机制来约束XML文档。XMLSchema的语义更加准确,可以完成一些DTD不能完成的定义,如对元素出现次数的约束等。XMLSchema的特征2面向对象特征:XMLSchema中引入了许多成熟的面向对象机制(比如继承性和多态性),使得数据模式在应用中更加灵活。扩展性:DTD所描述的文档结构是非常严格的(closed),没有显式声明的内容绝不允许在XML实例数据中出现;而XMLSchema则提供了一些扩展机制(open),允许在事先无法准确描述数据模式的情况下,在XML实例数据中根据需要添加相关的数据。3.1.2XMLSchema的一个简单示例student.xsdXMLSchema文件的后缀名通常为.xsdXMLSchema文件是一个特殊的XML文件。注意根元素及命名空间。实例XML文档?xmlversion=1.0encoding=UTF-8?studentnameXiaoWang/namegender男/genderno123/notelephone010-12345678/telephonegpa80/gpa/student?xmlversion=1.0encoding=UTF-8?studentxsi:noNamespaceSchemaLocation=student.xsdxmlns:xsi=中的“注释”元素在W3CXMLSchema文件中,推荐使用xsd:annotation元素来增加注释内容,xsd:annotation元素可以包含两个子元素xs:appinfo和xs:documentation。前者用于表示计算机应用程序处理的注释,而后者则表示供开发人员阅读的注释。这两个子元素是W3CXMLSchema中唯一的混合内容模型的元素,其中可以包含任何文本和子元素。3.2XMLSchema中的数据类型元素是其中最为重要的组成部分,一个XML文档中可能不包含任何属性或者文本数据,但是必须包含元素(至少包含一个根元素)。XMLSchema中的数据类型实际上主要是针对XML元素而言的,换句话说,是针对各种元素的内容及其结构的。productpid=1345/foodtype=dessertIcecream/foodlastnameJack/lastnamedescription/元素的类型在W3C的XMLSchema规范中,将元素分为两类:简单类型:不包含任何子元素和属性的元素。换句话说,简单类型的元素只能包含文本内容,或者为不包含属性的空元素(文本内容为空)。复杂类型:包含子元素和/或属性的元素(其中属性的声明包含在元素的复杂类型定义中)。有关元素类型的说明简单类型元素只能包含文本内容,而复杂类型元素除了包含子元素和/或属性之外,也可以包含文本内容。“文本内容”并不是指的字符串数据类型,在XMLSchema规范中定义了44种简单数据类型,“文本内容”可以是这些简单数据类型中的任何一种(甚至还可以是派生的简单数据类型)。比如:xsd:elementname=“orderid”type=“xsd:integer”/。orderid1032/orderid正确orderidabc/orderid错误•anySimpleType是所有简单数据类型的基础类型。•anySimpleType也是一种实际的、可用的数据类型,它是所有简单数据类型的根节点,与anyType不同的是,它只能表示标量数据。•比如:elementname=Currencytype=anySimpleType/CurrencyUSD/CurrencyCurrencydollars100/dollars/Currency•anyType是XMLSchema中所有数据类型(包括简单类型和复杂类型、内置数据类型和用户定义数据类型)的基础类型,如果拿Java语言来做个类比,那么xsd:anyType类似于Java中的java.lang.Object。•anyType分为“简单类型”和“复杂类型”。•anyType是一种实际的、可用的数据类型,而不仅仅只是在XMLSchema数据类型层次结构中作为抽象的根节点。比如:elementname=Currencytype=anyType/CurrencyUSD/CurrencyCurrencydollars100/dollars/Currency3.2.1XMLSchema的内置数据类型•内置基本数据类型(PrimitiveDatatype):这些类型是独立存在的,而不是在其他数据类型的基础上定义的。比如数学上的十进制数,定义为decimal。•在XMLSchema规范中,一共定义了19中内置的基本数据类型,它们可以单独使用、或者作为其他派生数据类型(包括内置派生数据类型和用户派生数据类型)的基础类型。•内置派生数据类型(DerivedDatetype):这些内置类型的定义依赖于其他的数据类型(即内置基本数据类型)。•比如decimal和nonNegativeInteger,可以将后者理解为满足某种条件(非负整数)的decimal,实际上,decimal是XMLSchema中所有十进制数值类型的基础类型。常用数据类型(字符串类型)字符串类型stringstring数据类型的取值可以是任意字符串,其中可以包含空格、LF、CR和制表符等空白字符。对于string数据类型,XML解析器将不会修改其内容。normalizedStringnormalizedString数据类型派生于string数据类型。normalizedString数据类型的值可以包含任意字符,但是XML解析器将删除其中的LF、CR和制表符等空白字符;换句话说,normalizedString数据类型是不包含上述特殊字符的字符串。tokentoken数据类型也是string数据类型的派生类型,其中可以包含任意字符,但是XML解析器将删除其中的LF、CR和制表符等空白字符、开头和结尾的空格、以及连续的空格。language包含合法语言id的字符串。Name包含合法XML名称的字符串,可以包含命名空间前缀。NCName包含合法XML名称的字符串,不可以包含命名空间前缀。ID、IDREFS、NMTOKEN等这些数据类型来自于DTD,在XMLSchema中保留了这些数据类型,并且与DTD中的使用方式相同,这些类型只能用于元素的属性。......常用数据类型(数值类型)数值类型floatIEEE的单精度32位浮点数。decimal可以使用十进制数字表示的实数。integer派生于decimal,限制条件是十进制整数。long派生于integer,限制条件是最大值为9223372036854775807、最小值为-9223372036854775808。int派生于long,限制条件是最大值为2147483647、最小值为-2147483648。nonPositiveInteger派生于integer,限制条件是最大值为0。......常用数据类型(日期、时间和其他类型)日期、时间类型date用于指定一个日期,具体格式为:YYYY-MM-DD,其中:YYYY表示年;MM表示月;DD表示日。假如xsd:elementname=starttype=xsd:date/,那么该元素可以为start2002-09-24/start。time用于指定一个时间,具体格式为:hh:mm:ss,其中:hh表示时;mm表示分;ss表示秒。假如xsd:elementname=starttype=xsd:time/,那么该元素可以为start09:00:00/start。datetime用于指定一个日期和时间,具体格式为:YYYY-MM-DDThh:mm:ss。假如xsd:elementname=startdatetype=xsd:dateTime/,那么该元素可以为startdate2002-05-30T09:00:00/startdate。duration指定一个时间间隔,具体格式为:PnYnMnDTnHnMnS,其中:P表示时间间隔(必需的);nY表示年数;nM表示月数;依次类推。其他类型boolean用于指定true或者false。合法的取值包括:true、false、1(表示true)、0(表示false)。base64Binary、hexBinary用于表示二进制格式的数据,base64Binary表示Base64编码的二进制数据,hexBinary表示十六进制编码的二进制数据。anyURI用于表示一个URI,如果其中包括空格,必须使用%20进行替换。3.2.2XMLSchema中的派生简单数据类型仅使用44种基本数据类型仍然是不够的。比如,假设希望定义一个email数据类型、或者telephone数据类型,用于约束合法的email和telephone数据,那又该怎么做呢?XMLSchema为此提供了自定义简单数据类型、复杂数据类型的机制,以便用户在需要的时候对XMLSchema类型系统进行扩充。可以通过几种不同的方法(通过限制、列表、或者组合)自定义简单数据类型。1.通过限制(restriction)派生简单数据类型通过限制的方式派生简单数据类型的语法格式如下所示,下面的两种形式分别声明了一个无名的、以及一个命名的(名为SimpleTypeName)简单数据类型:xsd:simpleTypexsd:restrictionbase=BaseType...facetsdescriptions.../xsd:restriction/xsd:simpleType或者:xsd:simpleTypename=SimpleTy

1 / 77
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功