XML基础教程第4章有效的XML文件-Schema第1页第4章有效的XML文件—Schema本章大纲本章概述本章学习目标XML基础教程第4章有效的XML文件-Schema第2页本章大纲4.1Schema概述4.2XMLSchema的基本结构4.3XMLSchema中的数据类型4.4XMLSchema的命名空间4.5XML有效性的验证XML基础教程第4章有效的XML文件-Schema第3页本章概述XMLSchema是用来描述和约束XML文档的一种XML语言,从功能上看,它和DTD非常类似,但是它比DTD更强大。XMLSchema负责定义和描述XML文档的结构和内容模式,不仅可以定义XML文档中元素之间的关系,而且可以定义元素和属性的数据类型。XMLSchema具有强制文档内容和结构的能力,它是XML世界中一种重要且强大的新标准。XML基础教程第4章有效的XML文件-Schema第4页本章学习目标●理解Schema的含义和作用●掌握Schema的基本结构●理解简单类型和复杂类型●理解Schema的命名空间的概念●掌握两种进行xml有效性验证的方法XML基础教程第4章有效的XML文件-Schema第5页Schema概述-1DTD存在的缺陷:(1)DTD是用不同于XML的语言编写的,需要不同的分析器技术。这增加了工具开发商的负担,削减了软件瘦身的可能性,开发人员需要多学一门语言及其语法。(2)DTD不支持名称空间。(3)DTD在支持继承和子类方面存在局限性。(4)DTD没有数据类型的概念,无法对特定元素施加数据类型,对强制性结构化数据无计可施。XML基础教程第4章有效的XML文件-Schema第6页Schema概述-2与DTD相比,XMLSchema具有如下特征:►一致性►完备性►规范性和准确性►面向对象特征►扩展性XML基础教程第4章有效的XML文件-Schema第7页XMLSchema的基本结构XMLSchema文档的基本结构如下:?xmlversion=1.0encoding=gb2312?xsd:schemaname=slschemaxmlns:xsd=……/xsd:schema第一行以XML声明开始,说明这是一个XML文件。W3C规定,XMLSchema文档的根标记必须是“schema”,命名空间必须是。所有内容都添加在根标记schema中。“xsd”是名称空间的前缀,可以任意定义,一般都设置为“xsd”或“xs”。在schema声明中有两个属性:name属性和xmlns(名域)属性。name属性指定schema的名称,是可以省略的。xmlns属性指定schema文档的命名空间(Namespace)。XML基础教程第4章有效的XML文件-Schema第8页描述学生信息的XML文档(4-1.xml)XML基础教程第4章有效的XML文件-Schema第9页4-1.xml对应的XMLSchema文档(4-1.xsd)XML基础教程第4章有效的XML文件-Schema第10页XMLSchema的主要组件类型元素属性组定义注释XML基础教程第4章有效的XML文件-Schema第11页类型►简单类型:不包含任何子元素和属性,只含有文本内容的元素。mobilephone13613891234/mobilephone►复杂类型:带有子元素或使用属性的元素在XMLSchema中属于复杂类型。studentsno2013001/snosname张三/sname……/studentXML基础教程第4章有效的XML文件-Schema第12页元素XMLSchema用元素来约束XML中的标记。elementname=元素名称type=数据类型minOccurs=intmaxOccus=int/►name属性用于指明XML元素的名称。►type属性用于指明XML元素的数据类型,可以选取XML内置的数据类型或用户自定义数据类型。►minOccurs属性用于指明XML元素的最少出现次数,最小值为0,可选属性。►maxOccus属性用于指明XML元素的最多出现次数,最小值为1,最大值为unbounded,表示无限次,是可选属性。►如果XML元素的数据类型为内置的数据类型,且该XML元素不含有其他子元素,则可以直接用上述语句进行声明。XML基础教程第4章有效的XML文件-Schema第13页属性-1属性声明的语法格式如下:elementname=element_nametype=dataTypexsd:complexTypename=dataTypexsd:attributename=attribute_nametype=simple_typeuse=use_methoddefault=valuefixed=value/xsd:attribute/xsd:complexTypeelement_name指对应XML文件中元素名称。attribute_name指属性的名称。simple_type指属性的数据类型,可以是内置的数据类型,也可以是由simple_type元素所定义的自定义数据类型。XML基础教程第4章有效的XML文件-Schema第14页属性-2use_method指明XML元素中属性的实际取值要求,可以是optional、required、prohibited。►optional表示该属性值可有可无,是默认值;►required表示该属性值必须存在,此属性值至少出现一次;►prohibited表示该属性值不可出现,用于在restriction元素中以限制属性的使用。default指属性的默认值。fixed指如果属性存在,则其内容只能是由本属性指定的值,不可更改。注意:声明属性时,一定要设置属性名称(name)与属性类型(type)。XML基础教程第4章有效的XML文件-Schema第15页属性-3【例4-3】属性声明示例xsd:elementname=studenttype=studentTypemaxOccurs=unbounded/…xsd:complexTypename=studentType…xsd:attributename=departmentuse=requiredxsd:simpleTypexsd:restrictionbase=xsd:stringxsd:enumerationvalue=计算机系/xsd:enumerationvalue=数学系//xsd:restriction/xsd:simpleType/xsd:attribute/xsd:complexTypeXML基础教程第4章有效的XML文件-Schema第16页组定义-1元素组指把若干个元素组成一组,声明语法格式如下:xsd:groupname=组名称xsd:sequencexsd:elementname=element1type=datatype/xsd:elementname=element2type=datatype/……/xsd:sequence/xsd:group需要注意的是,元素组必须是schema根元素的直接子元素。若其他类型的元素需将元素组作为子元素时,必须通过引用的形式来实现。XML基础教程第4章有效的XML文件-Schema第17页组定义-2【例4-4】组定义示例?xmlversion=1.0encoding=UTF-8?xsd:schemaxmlns:xsd=:groupname=hourxsd:sequencexsd:elementname=secondtype=xsd:string/xsd:elementname=minutetype=xsd:string//xsd:sequence/xsd:groupxsd:elementname=dayxsd:complexTypexsd:sequencexsd:groupref=hour//xsd:sequence/xsd:complexType/xsd:element/xsd:schema引用该XMLSchema程序代码的XML文档如下:?xmlversion=1.0encoding=UTF-8?dayxmlns:xsi=:noNamespaceSchemaLocation=4-4.xsdsecond60/secondminute60/minute/dayXML基础教程第4章有效的XML文件-Schema第18页注释-1为了便于阅读和理解XMLSchema文档,需要添加注释语句以说明相关内容,XMLSchema支持使用!----注释方式。除此之外,还提供了另一个专门的annotation/元素来添加注释,通过此元素添加的注释具有更好的可读性,还可供其他应用程序读取。annotation/元素含有两个子元素:documentation/:该元素里主要放置适合人阅读的信息。appinfo/:该元素里主要放置针对其他应用程序的信息。就实际应用场景来看,此元素使用不多。annotation/元素里可出现任意多个documentation/和appinfo/子元素,且没有任何顺序要求。XML基础教程第4章有效的XML文件-Schema第19页注释-2【例4-5】注释使用示例。?xmlversion=1.0encoding=UTF-8?xs:schemaxmlns:xs=!--下面的注释用于说明XMLSchema本身--xs:annotationxs:documentation向XML阅读者提供信息/xs:documentationxs:appinfo向其他应用程序提供信息/xs:appinfo/xs:annotationxs:elementname=books!--下面的注释用于说明books元素--xs:annotationxs:appinfo![CDATA[RootElement:books…/]]/xs:appinfoxs:documentation根元素books/xs:documentationxs:documentationbooks根元素/xs:documentationxs:appinfo![CDATA[books…/:RootElement]]/xs:appinfo/xs:annotation/xs:element/xs:schemaXML基础教程第4章有效的XML文件-SchemaXMLSchema中的数据类型简单类型给予了XMLSchema低级类型检查能力,分为两种:►一种是XMLSchema内置的简单数据类型,共40多种,表4-1列举了常用的几种简单数据类型。►一种是用户自定义的简单数据类型。简单类型定义string字符串数据boolean二元类型的True或者Falsedate历法日期,格式是CCYY-MM-DDdateTime历法日期和时间time24小时格式的时间可根据时区调节decimal任意精度和位数的十进制数integer整数float标准的32位浮点数XML基础教程第4章有效的XML文件-Schema第21页自定义数据类型自定义数据类型是指以一个XMLSchema类型为基础,添加一些限制条件,使之