高级高级WbWb技术技术高级高级WebWeb技术技术WebWeb上的数据标准上的数据标准XMLXMLWebWeb上的数据标准上的数据标准XMLXML——SchemaSchema本次课程内容本次课程内容SchemaSchemaSchema简介模式文档和实例文档模式文档和实例文档模式文档元素定义Sh简介Schema简介XMLSchema是W3C的推荐标准,于2001年5月正式XMLSchema是W3C的推荐标准,于2001年5月正式发布XMLSchema同DTD一样是负责定义和描述XML文档的结构和内容模式它可以定义XML文档中存在哪些元素和元素之间的关系,并且可以定义元素和属性的数据类型。XMLSchema本身是一个XML文档,它符合XML语法结构可以用通用的XML解析器解析它结构。可以用通用的XML解析器解析它它使用XML名称空间而不是DOCTYPESh简介Schema简介DTD的缺陷:DTD的缺陷:DTD是基于正则表达式的,描述能力有限DTD没有数据类型的支持,在大多数应用环境下能力不足DTD的约束定义能力不足,无法对XML实例文档作出更细致的语义限制DTD的结构不够结构化重用的代价相对较高DTD的结构不够结构化,重用的代价相对较高DTD并非使用XML作为描述手段,而DTD的构建和访问并没有标准的编程接口,无法使用标准的编程方式进行DTD维护。DTD不直接支持命名空间Sh简介Schema简介XMLSchema的优点:XMLSchema的优点:XMLSchema基于XML,没有专门的语法XMLSchema可以象其他XML文件一样解析和处理可以象其他文件样解析和处XMLSchema支持一系列的数据类型(int、float、Boolean、date等)XMLSchema提供可扩充的数据模型XMLSchema支持综合命名空间支持属性组XMLSchema支持属性组XMLSchema支持继承和扩充,类似面向对象思想Sh简介Schema简介XMLSchema语言定义成以下三个部分:XMLSchema语言定义成以下三个部分:入门位于w3.org/TR/xmlschema-0,它介绍了XML模式文档及其设计用途;文档结构的标准位于w3.org/TR/xmlschema-1,它说明了如何定义XML文档的结构;数据类型的标准位于w3org/TR/xmlschema2它定数据类型的标准位于w3.org/TR/xmlschema-2,它定义了一些常用数据类型以及创建新类型的规则Sh简介Schema简介XMLSchema的软件以及工具支持情况XMLSchema的软件以及工具支持情况Apache的XercesXML解析器Ref:XMLSpy的支持情况:Ref:其他软件实现:其他软件实现:Ref:(包括将DTD转换成Schema的工具)l用于两个h间的映射以及将AltovaMapForce™用于两个schema间的映射,以及将符合某一schema的XML文件转换为符合另一个schema的XML文件AltovaXMLSPLY可以实现数据库表结构到schema的转换模式文档和实例文档模式文档和实例文档模式文档是包含结构的文档,以.xsd作为后缀名;而实例模式文档是包含结构的文档以作为后缀名;而实例文档是包含实际的XML数据的文档通过名称空间联系模式文档和实例文档Schema文件中没有给出目标命名空间在schema文件中的根元素schema中给出名称为xsd的名称空间,用它来限制所有XMLpg用来限制所有Schema的元素和属性xsd:schemaxmlns:xsd=…/xsd:schemaSchema1.xsd文件模式文档和实例文档模式文档和实例文档通过名称空间联系模式文档和实例文档名称间联系模式文档和实例文档在实例文档中:将xmlns:xsi指向所有XML实例文件符合的名称空间,URI为://xsd:noNamespaceSchemaLocation属性给出了URI对应的xmlschema文件的位置?xmlversion=1.0?memoriesxmlns:xsi=:noNamespaceSchemaLocation=schema2.xsd…/memories用来校验该实例文档的schema文档sampleschema文档schema2.xsdschema2.xsdschemaInstance2.xml模式文档和实例文档模式文档和实例文档通过名称空间联系模式文档和实例文档名称间联系模式文档和实例文档Schema文件中给出目标命名空间模式文档可以被看做一个类型定义和元素声明的集合(词汇表),他们的名字被归属于个指定的命名空间这个命名空间称为他们的名字被归属于一个指定的命名空间,这个命名空间称为目标命名空间目标命名空间使我们能够从不同的词汇表中区分定义以及声明通过属性设置目标名称空间的值通过属性targetNamespace设置目标名称空间的值XML实例文件中通过指定XMLSchema的位置并且定义名称空间来引用XMLSchema的定义称间来引用的定义通过属性schemaLocation指明XMLSchema的位置模式文档和实例文档模式文档和实例文档模式文档和实例文档模式文档和实例文档模式文档和实例文档模式文档和实例文档模式文档只是一个XML文档,它的预定义的元素和属性描述另一个XML文档的结构模式文档由一个schema元素和一系列子元素组成,大多数子元素模式文档由个schema元素和系列子元素组成,大多数子元素为element,complexType,和simpleType,这些决定了在实例文档中的元素的表现方式和内容通过出现在h元素中的命名空间声明通过出现在schema元素中的命名空间声明xmlns:xsd=“”,在模式文档中的每一个元素都有一个与XMLSchema命名空间相联系的命名空间前缀前缀被约定用表示联系的命名空间前缀“xsd:”。前缀“xsd:”被约定用于表示XMLSchema命名空间,而不是模式文档作者自己的词汇表模式文档元素定义模式文档元素定义在一个模式文档中定义元素就是给这个元素命名并给它分配一个类型,类型可以分为复合类型和简单类型。复合类型:元素如果包含子元素或者是带有属性则被称为复合类型合类型简单类型:元素如果仅仅包含数字、字符串或者其他数据等,但不包含任何子元素则称为简单类型。属性值通常是简单类但不包含任何子元素则称为简单类型。属性值通常是简单类型,因为属性值不能包含任何结构在实例文档中复合类型(通过xsd:complexType)和一简单类模中些简单类型(通过xsd:simpleType)在模式文档中定义。而其他一些标准的简单类型则是作为XMLSchema内置的简单类型的指令表的一部分定义的简单类型的指令表的部分定义的模式文档元素定义内建简单类型模式文档元素定义-内建简单类型内建简单类型内建简单类型W3CXMLSchema建议书中包括了42种简单类型的定义,其中包括string、int、date、decimal、boolean、timeDuration和uriReference等为了在XMLSchema和XML10DTD之间保持兼uriReference等。为了在XMLSchema和XML1.0DTD之间保持兼容,简单类型ID、IDREF、IDREFS、ENTITY、ENTITIES、NOTATION、NMTOKEN、NMTOKENS只能用在属性定义中使用模式内建的这些类型时必须在前面加上W3C模式前缀通常使用模式内建的这些类型时,必须在前面加上W3C模式前缀,通常是“xsd:”xsd:elementname=subdatetype=xsd:date/xsd:elementname=donortype=xsd:string/xsd:elementname=subjecttype=xsd:string/xsd:elementname=descriptiontype=xsd:string/xsd:elementname=placetype=xsd:string/模式文档元素定义创建新的简单类型模式文档元素定义-创建新的简单类型使用层面(facets)创建简单类型使用层面(facets)创建简单类型使用层面可以对简单类型存储的数据加以限制几个常用的层面:几个常用的层面:minInclusive,maxInclusive限定下限值和上限值enumeration允许建立一个值列表pattern指定一个正规表达式,要求文本符合该格式xsd:simpleTypename=“idNumber”base=“xsd:integer”xsd:simpleTypename=idNumberbase=“xsd:integer”xsd:patternvalue=\d{3}-\d{4}-\d{3}//xsd:simpleType可以取“123-4567-890”模式文档元素定义创建新的简单类型模式文档元素定义-创建新的简单类型标准定义格式xsd:simpleTypename=nameStrrestrictionbase=sourcefacetvalue=value/facetvalue=value/…/restriction/xsd:simpleType其中:自定义的数据类型的名字name:自定义的数据类型的名字source:基础的数据类型,如xsd:string等ft平面不同的数据类型有不同的层面如字符串类型的层面有facet:平面。不同的数据类型有不同的层面,如字符串类型的层面有:模式(patten);枚举(enumeration);长度(length);最小长度(minLength);最大长度(maxLength)等。模式文档元素定义创建新的简单类型模式文档元素定义-创建新的简单类型有限制的值使用base属性声明基于内有限制的值dilTidNb使用base属性声明基于内建的简单类型xsd:simpleTypename=idNumberxsd:restrictionbase=xsd:integerxsd:minInclusivevalue=1/xsd:maxInclusivevalue=100000/xsd:maxInclusivevalue=100000//xsd:restriction/xsd:simpleType把值限制在1到100000之间的整数模式文档元素定义创建新的简单类型模式文档元素定义-创建新的简单类型枚举枚举enumeration限制简单类型的值为一系列不同的枚举值能够被用于约束除boolean类型之外的几乎每一个简单类型xsd:simpleTypename=USStatexsd:restrictionbase=xsd:string使用enumeration来xsd:restrictionbase=xsd:stringxsd:enumerationvalue=AK/xsd:enumer