XML Shcema中的简单类型、复杂类型解析
- 格式:docx
- 大小:212.21 KB
- 文档页数:5
XML Schema中的复杂数据类型complexType 的分析先来对比:simpleType:定义了一个简单类型它决定了元素和属性值的约束和相关信息(一个type不但要定义元素的类型还要定义这个元素的属性的值的类型和约束的)complexType:定义了一个复合类型决定了一组元素和属性值的约束和相关信息已经知道complexType 里面可以放attruibuteattruibuteGroupgroupsequencesimpleContentcomplexContentchoicesimpleContent1.应用于complexType 对complexType的内容进行约束和扩展注意主要是对内容进行约束和扩展对于属性的定义虽然放在simpleContent里面但其实跟simpleContent没什么关系的该怎么写还是怎么写的2.用了simpleContent 是限定了元素中间的内容的值既然是限定具体内容的那么子元素自然是不会有了所以simpleContect里面是没有子元素的但是一定有属性的不然就是个simpleType了但是属性还是可以有的因为属性不受约束3以前用simpleType 就是没有子元素没有属性用complexType 可以实现没有子元素没属性。
但是complexType对于有属性没有子元素的这种情况值的内容没有办法做约束所以就有了simpleContect看例子:<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="/2001/XMLSchema"elementFormDefault="qualified" attributeFormDefault="unqualified"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"><xs:attribute name="carType"><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="B MW 530"/><xs:enumeration value="B MW 740"/><xs:enumeration value="B MW 318i"/><xs:enumeration value="B MW M118"/></xs:restriction></xs:simpleType></xs:attribute></xs:extension></xs:simpleContent></xs:complexType></xs:element></xs:schema>所以为了能够让complexType也用上内置数据类型我们用<xs:extension base="xs:string"></xs:extension>-->choicechoice 允许唯一的一个元素从一个组中被选出具有属性:minOccurs / maxOccurs 表示的是这个choice组整体出现的次数看例子:<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="/2001/XMLSchema"elementFormDefault="qualified"attribute FormDefault="unqualified"><xs:element name="car"><xs:complexType><xs:choice maxOccurs="2"minOccurs="1"><xs:element name="BMW"type="xs:string"></xs:element><xs:element name="VW"><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="santana"/><xs:enumeration value="jetta"/><xs:enumeration value="golf"/></xs:restriction></xs:simpleType></xs:element></xs:choice><xs:attribute name="price"><!--attribute 里面只能是内置类型或者simpleType 不可能是复杂类型的--><xs:simpleType><xs:restriction base="xs:decimal"><xs:enumeration value="350.2"/><xs:enumeration value="123.2"/><xs:enumeration value="26.2"/></xs:restriction></xs:simpleType></xs:attribute></xs:complexType></xs:element></xs:schema>XML实例:sequence属性:minOccurs maxOccurs。
XMLSchema介绍XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML ⽂档的结构。
XML Schema 语⾔也称作 XML Schema 定义(XML Schema Definition,XSD)。
什么是 XML Schema?XML Schema 的作⽤是定义 XML ⽂档的合法构建模块,类似 DTD。
XML Schema:定义可出现在⽂档中的元素定义可出现在⽂档中的属性定义哪个元素是⼦元素定义⼦元素的次序定义⼦元素的数⽬定义元素是否为空,或者是否可包含⽂本定义元素和属性的数据类型定义元素和属性的默认值以及固定值XML Schema 是 DTD 的继任者我们认为 XML Schema 很快会在⼤部分⽹络应⽤程序中取代 DTD。
理由如下:XML Schema 可针对未来的需求进⾏扩展XML Schema 更完善,功能更强⼤XML Schema 基于 XML 编写XML Schema ⽀持数据类型XML Schema ⽀持命名空间XML Schema ⽀持数据类型XML Schema 最重要的能⼒之⼀就是对数据类型的⽀持。
通过对数据类型的⽀持:可更容易地描述允许的⽂档内容可更容易地验证数据的正确性可更容易地与来⾃数据库的数据⼀并⼯作可更容易地定义数据约束(data facets)可更容易地定义数据模型(或称数据格式)可更容易地在不同的数据类型间转换数据编者注:数据约束,或称 facets,是 XML Schema 原型中的⼀个术语,中⽂可译为“⾯”,⽤来约束数据类型的容许值。
XML Schema 使⽤ XML 语法另⼀个关于 XML Schema 的重要特性是,它们由 XML 编写。
由 XML 编写 XML Schema 有很多好处:不必学习新的语⾔可使⽤ XML 编辑器来编辑 Schema ⽂件可使⽤ XML 解析器来解析 Schema ⽂件可通过 XML DOM 来处理 Schema可通过 XSLT 来转换 Schema简单例⼦:XML ⽂档可对 DTD 或 XML Schema 进⾏引⽤。
xml文件解析方法XML文件解析方法引言:XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有良好的可读性和灵活性,被广泛应用于数据交换和配置文件等领域。
在处理XML文件时,解析是必不可少的环节。
本文将介绍几种常用的XML文件解析方法,包括DOM、SAX和StAX。
一、DOM解析方法DOM(文档对象模型)是一种将整个XML文件以树形结构加载到内存中的解析方法。
DOM解析器将XML文件解析为一个树状结构,通过遍历节点来获取和操作XML文件中的数据。
DOM解析方法的优点是易于理解和使用,可以随机访问XML文件中的任意节点,但缺点是占用内存较大,不适用于大型XML文件的解析。
1. 创建DOM解析器对象:使用标准的Java API,可以通过DocumentBuilderFactory类来创建DOM解析器对象。
2. 加载XML文件:通过DOM解析器对象的parse()方法加载XML文件,将其转化为一个树形结构。
3. 遍历节点:使用DOM解析器对象提供的方法,如getElementsByTagName()、getChildNodes()等,可以遍历XML文件中的各个节点,获取节点的名称、属性和文本内容等信息。
4. 获取节点数据:通过节点对象提供的方法,如getNodeName()、getTextContent()等,可以获取节点的名称和文本内容。
二、SAX解析方法SAX(简单API for XML)是一种基于事件驱动的XML解析方法。
在SAX解析过程中,解析器顺序读取XML文件,当遇到节点开始、节点结束或节点文本等事件时,会触发相应的回调方法。
相比于DOM 解析方法,SAX解析方法具有内存占用小、解析速度快的优点,但缺点是无法随机访问XML文件中的节点。
1. 创建SAX解析器对象:使用标准的Java API,可以通过SAXParserFactory类来创建SAX解析器对象。
2. 实现事件处理器:自定义一个事件处理器,实现SAX解析器提供的DefaultHandler类,并重写相应的回调方法,如startElement()、endElement()和characters()等。
XML Schema学习总结简单类型1、简单元素:指只能包含文本内容,不能够包含子元素,也没有属性的元素。
格式:<xs:element name="xxx" type="yyy"/>例子:<xs:element name="name" type="xs:string"/><xs:element name="age" type="xs:integer"/><xs:element name="gender" type="xs:boolean"/>2、属性:所有的元素属性均被声明为简单类型。
只有复杂类型的元素才可以拥有属性。
格式:<xs:attribute name="xxx" type="yyy"/>例子:<xs:attribute name="lang" type="xs:string"/>所有的属性默认都是可选的,我们可以通过使用use关键字明确的指出是可选或是必需:<xs:attribute name="lang" type="xs:string" use="optional"/><xs:attribute name="lang" type="xs:string" use="required"/>我们可以通过使用default或fixed为简单类型(简单元素、属性)指定默认值或固定值,如下:<xs:element name="color" type="xs:string" default="red"/><xs:attribute name="lang" type="xs:string" fixed="CN"/>对简单类型值的约束约束含义enumeration 定义允许值的枚举fractionDigits 指定最多允许的小数位数(必须大于或等于零)length 精确指定允许的最大字符长度maxExclusive 指定允许的最大数值,必须小于该值maxInclusive 指定允许的最大数值,必须小于或等于该值maxLength 指定允许的最大字符长度(必须大于等于零)minExclusive 指定允许的最小数值,必须大于该值minInclusive 指定允许的最小数值,必须大于或等于该值minLength 指定允许的最小字符长度pattern 指定允许值的模式,类似正则表达式totalDigits 精确指定数字个数whiteSpace 处理空白(保留:preserve;替换:replace;合并:collapse)复杂类型复杂类型指包含其他元素/属性的元素类型。
xmlschema数据类型1.简单数据类型(1)内置简单数据类型schema中定义了⼀些简单数据类型,包括primitive原始数据类型和derived派⽣数据类型,这些类型都是schema中使⽤的最基本的数据类型,我们可以⽤他们⾃定义简单数据类型表:primitive原始数据类型数据类型描述string字符串Boolean布尔值decimal⼗进制数字float32位浮点数double64位浮点数timeDuration标识持续时间datetime特定时间timedateanyURI代表URI,⽤来定位⽂件recurring Duration派⽣数据类型数据类型描述integerlong[-263,263-1]nonNegativeInteger⼤于等于零的整数positiveInteger⼤于零的整数int[-231,231-1]time sdate(2)⾃定义简单数据类型<xs:simpleType name="phoneno"> <xs:restriction base="xs:string"> <xs:length value="3"/> <xs:pattern value="\d{4}-\d{3}"/> </xs:restriction></xs:simpleType>simpleType元素常⽤⼦元素⼦元素作⽤enumeration枚举类型,供⽤户选择fractionDigits限定最⼤的⼩数位,⽤户控制精度length⾃定数据的长度maxExclusive指定数据的最⼤值(⼩于)maxInclusive指定数据的最⼤值(⼩于等于)maxLength指定长度的最⼤值minExclusive指定最⼩值(⼤于)minExclusive指定最⼩值(⼤于)minInclusive指定最⼩值(⼩于等于)minLength指定最⼩长度pattern正则e.g.<xs:simpleType name="gender"> <xs:restriction base="xs:string"> <xs:enumeration value="男"/> <xs:enumeration vlaue="⼥"/> </xs:restriction></xs:simpleType>2.复杂数据类型<xs:complexType name=""> <内容模板定义(包括⼦元素和属性的声明)</xs:complexType>e.g.1<xs:complexType name="address">2 <xs:sequence>3 <xs:element name="street" type="xs:string"/>4 <xs:element name="city" type="xs:string"/>5 <xs:element name="state" type="xs:string"/>6 <xs:element name="zip" type="xs:decimal"/>7 </xs:sequence>8</xs:complexType>复杂数据类型。
XMLSchema复杂类型复杂类型分2种:包含简单内容的复杂类型——内容是简单类型值,并包含属性;包含复杂内容的复杂类型——包含子元素、空元素或混合内容的元素,不管是否包含属性。
复杂类型定义使用,其可接受如下两种子元素::用于定义包含简单内容的复杂类型。
:用于定义包含复杂内容的复杂类型复杂类型的派生方式::限制派生(或的子元素);:扩展派生(或的子元素);包含简单内容的复杂类型可由扩展简单类型、扩展复杂类型或限制包含简单内容的复杂类型而来。
即:扩展简单类型—>包含简单内容的复杂类型扩展复杂类型—>包含简单内容的复杂类型限制复杂类型—>包含简单内容的复杂类型限制包含简单内容的复杂类型派生方式:1:为元素内容或属性增加进一步的约束;2:删除某些属性。
包含复杂内容的复杂类型可有限制anyType派生新类型、扩展简单类型或扩展复杂类型Schema有这么一个约定:如果某个复杂类型是由现在anyType派生出来的,那么在定义该复杂类型时可以省略和元素,而直接在元素内使用、、和来定义元素和属性。
Schema的复杂类型可由复杂类型进一步派生而来。
以限制派生方式来派生新类型时,Schema对基类型中的子元素和属性的属性的处理方式是不一样的:派生类型默认会删除基类型中的所有子元素定义,但会保留其中的所有属性定义。
所以派生新类型是如果需要保留基类型的子元素,必须重新定义这些子元素,如果要删除指定属性,则定义该属性是使用use="prohibited"。
扩展包含子元素的类型时派生出来的新类型不可以是混合内容类型。
基类型中使用定义子元素时,其通过扩展派生出来的新类型无法添加新的子元素;即使基类型中没有使用元素的定义子元素,在通过扩展派生新类型时也不能添加由元素包含的子元素。
扩展混合内容类型派生出来的新类型必须也是混合内容类型。
XML_Schema学习总结1 XML_Schema 简介XML_Schema是W3C的推荐标准,于2001年5月正式发布。
其作用在于定义和描述XML文档的结构和内容模式,主要包括XML文档中存在哪些元素和元素间的关系,并可以定义元素和属性的数据类型。
XML_Schema的特点在于: XML Schema基于XML,没有专门的语法,因此可象其他XML文件一样进行解析和处理XML Schema支持一系列的数据类型(int、float、boolean、date)以及可扩充的数据类型XML Schema支持命名空间XML Schema支持属性组XML Schema支持继承和扩充2 例子12.1 xml+xsd一篇简单的XML文档,名为:note.xml一篇XML_Schema文件,名为”note.xsd”,它定义了note.xml中的元素该xsd文件定义了一个复合类型的元素note,包括了to、from、heading、body 四个简易类型的子元素。
2.2 例子解析1.<schema>元素是每一个XML Schema的根元素,根元素也可包含属性。
2.xmlns:xs=http://www.w/2001/XMLSchema :声明了一个命名空间/2001/XMLSchema,并规定了来自于该命名空间的元素和数据类型应该使用前缀xs:。
3.targetNamespace="" :定义了一个命名空间,并规定本xsd文件中定义的元素均属于该命名空间。
4.xmlns="" :声明了一个默认的命名空间,表示如果下面的元素若没有前缀,表示该元素来自于该命名空间。
5.elementFormDefault="qualified" :elementFormDefault属性的值必须是qualified、unqualified。
默认值为unqualified。
XML Schema数据类型W3C XML Schema数据类型分为简单类型和复杂类型两种。
1.简单类型XML Schema中定义了一些内置数据类型,这些类型可以用来描述元素的内容和属性值。
一个元素中如果仅仅包含数字、字符串或其他文本数据,但不包括子元素,那么这种元素被称为简单类型。
文本可以是在XML Schema中定义的其中一种类型(boolean、string、date等等),也可以是自定义类型。
简单类型分为原子类型、列表类型和联合类型三种。
原子类型的数值是不可分割的数值。
系统内建类型都属于原子类型。
W3C XML Schema内置简单类型有44种,常用的如表3-4所示。
列表类型的数值是用空格隔开的原子值列表。
联合类型的数值可以是原子值,也可以是列表值。
联合类型可以包含了多个原子类型或者列表类型。
2.复杂类型复杂类型的元素拥有子元素和属性,也可以有字符内容。
复杂类型有四种不同的内容类型:简单类型、纯元素类型、混合类型及空类型。
复杂类型子元素的顺序和结构称为它的内容模型。
所有的复杂类型都会包含一个内容定义类型,其主要功能是定义类型能包含的内容模型。
在复杂类型元素下可以创建的内容模型有:●simpleContentsimpleContent用于从简单类型派生复杂类型。
适用于包含字符内容和属性但不包含子元素的元素。
●complexContent可以使用它从一个复杂类型派生出新的复杂类型。
适用于包含属性和子元素但不包含字符数据(字符数据包含在子元素中)的元素。
●group、all、choice和sequencegroup、all、choice和sequence用于定义一种非派生于特定类型的复杂类型。
它们允许把子元素声明或引用组合起来,从而构建更有意义的内容模型。
group元素是将若干元素声明归为一组,以便将它们当作一个组并入复杂类型定义。
all元素表示符合元素声明的所有元素都应该出现(以任何顺序)且只能出现一次。
1.所有Schema文档的根元素都是Schema2.命名空间:为什么使用命名空间:避免元素名冲突命名空间的语法定义:xmlns:[prefix]="URL"元素和属性都可以应用命名空间3.XML Schema是用一套预先规定的XML元素和属性创建的, 这些元素和属性定义了XML文档的结构和内容模式,规定XML文档实例结构和每个元素/属性的数据类型4.为何要Schema:①Schema基于XML语法②Schema可以用能处理XMl文档的工具处理③Schema大大扩充了数据类型,可以自定义数据类型④Schema支持元素的继承-Object-Oriented⑤Schema支持属性组.5.Schema的数据类型:stringbooleandecimalfloatdoubledurationdateTimedatehexBinaryanyURINOTATION扩展的数据类型:IDIDREFENTITYNMTOKENNMTOKENSlongintshortbyte数据类型的特性enumerationfractionDigitslengthmaxExclusivemaxInclusivemaxLengthminExclusiveminInclusiveminLengthPattern6.Schema的数据类型:简单的数据类型:内置的数据类型(built-in data types)①基本的数据类型②扩展的数据类型用户自定义的数据类型(通过simpleType定义) 复杂数据类型(通过complexType定义)7.Schema的元素类型:schemaelementattributegroupattributeGroupsimpleTypesimpeContentcomplexType8.schema元素:作用:包含已经定义的schema用法:属性:xmlnstargetNamespace9.element元素:属性:nametyperefminOccursmaxOccurssubstitutionGroupfixeddefault10.attribute元素:作用:声明一个属性属性:name/type/ref/use11.attributeGroup元素:作用:把一组属性组合在一起,以便可以被符合类型应用属性: name/ref12.simpleType(元素):作用:定义一个简单类型,它决定了元素和属性的约束和相关信息属性:name内容:应用已经存在的简单类型,三种方式:--restrict 限定一个范围--list 从列表中选择--union 包含一个值的结合子元素为从一个特定数据类型的集合中选择定义一个简单的类型元素子元素为:从一个特定简单的数据类型的集合中选择定义一个简单类型元素plexType元素:作用:定义一个符合类型,它决定了一组元素和属性的约束和相关信息属性:nameplexType和simpleType区别(重要)simpleType类型的元素中不能包含元素或者属性当需要声明一个元素子元素或属性时,用complexType当需要机遇内置的基本数据类型定义一个新的数据类型的时,用simpleType15.simpleContent元素:作用:应用于complexType,对它的内容进行约束和扩展.表示该complexType需要有属性,否则它就成为了simpleType了16.choice元素:作用:允许唯一的一个元素从一个组中被选择属性:minOccurs/maxOccurs17.sequence元素:作用:给一组元素一个特定的序列18.用schema的数据类型及元素类型声明XML文档的元素和属性声明元素:声明属性19.通过DOCTYPE可以明确指定根元素,因为DOCTYPE后面跟的元素就是文档的根元素;通过Schema是没法指定目标XML文档的根元素,XMLSPY是通过推断哪个元素包含了其他元素来选择包含其他元素最多的那个元素作为文档的根,但我们可以明确指定文档的根而不必按照xmlspy的生成来做.20.简单工厂模式:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式. 简单工厂模式是由一个工厂对象决定创建出那一种产品类的实例. 通常它根据自变量的不同返回不同的类的实例.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建出哪一个产品类的实例.21.简单工厂模式的构成:工厂(Creator)角色:担任这个角色的是简单工厂模式的核心, 含有与应用紧密相关的商业逻辑. 工厂类在客户端的直接调用下创建产品对象, 它往往由一个具体类实现.抽象产品(Product)角色:担任这个角色的类是简单工厂模式所创建的对象的父类. 或他们共同拥有的接口. 抽象产品角色可以用一个接口或抽象类实现.具体产品(Concrete Product)角色:简单工厂模式所创建的任何对象都是这个角色的实例, 具体产品角色由一个具体类实现.22.Dom:Document Object Model(文档对象模型)23.对于XML应用开发来说,DOM就是一个对象化的XML数据接口,一个与语言无关,与平台无关的标准接口规范.24.要严格区分XML文档树中的根节点与根文档节点:根节点(Document)代表XML文档本身,是我们解析XML文档的入口,根元素节点则表示XML文档的根元素,它对应于XML文档的Root.25.最常见的节点类型:元素:元素是XML的基本构件. 典型地, 元素可以有其他元素, 文本节点或者两者都有来作为其子节点. 元素节点还是可以有属性的唯一类型节点.属性: 属性节点是包含关于元素节点的信息, 但实际上, 不认为它是元素的子节点.文本: 确切来讲, 文本节点是:文本. 它可以包含许多信息或仅仅是空白.文档(根节点): 文档节点是整个文档中所有其他节点的父节点.(根节点不等于根元素节点.)较不常见的节点类型: CDATA,注释, 处理指令.26.Node:27.常见的使用DOM解析xml文件的过程:①获得dom解析器工厂(工作的作用是用于创建具体的解析器)②获得具体的DOM解析器③解析一个xml文档,获得document对象(根节点)④获得节点的集合⑤对每个元素经行访问.28. JAXP(Java API for XML Parsing):用于XML解析的Java API29.DocumentBuilderFactory与DocumentBuilder之间的关系:30.特别注意: 对于XML文件,空格也是子节点.31.SAX的全称是Simple APIs for XML, 面向XML的简单APIs32. 使用DOM解析XML时,首先将XML文档加载到内存中, 然后可以通过随机的方式访问内存中的DOM树; SAX是基于事件而且是顺序执行的,一旦经过了某个元素, 我们就没有办法再去访问它了,SAX不必实现将整个XML文档加载到内存中, 因此它占据内存要比DOM小, 对于大型的XML文档来说, 通常会使用SAX而不是DOM经行解析.。
XML Shcema中的元素和属性的类型定义
1.<attribute …/>和<element…/>元素一些重要属性
(1) <attribute …/>元素(属性定义元素)
属性定义<xs:attribute 。
>
重要属性:
fixed属性为该元素指定一个固定值
default属性为该元素指定一个默认值
注意:不能再一个<attribute …/>元素中同时出现。
ref属性引用一个全局定义的属性
注意:在全局声明(元素或者属性声明)中不能使用ref属性。
ref属性不能与name、type属性(用于定义)同时出现。
use属性用于指定该复杂类型对改属性的要求
支持如下几个属性值:
optional:指定该属性是可选的,可有可无的。
默认是这种情况。
prohibited:指定该属性是禁止的,表示不能出现。
required:指定该属性是必需的。
<attribute …/>元素指定use属性的情况:(不能再全局属性定义的时候使用)
1.<attribute …/>元素中指定了ref属性。
2.采用<attribute …/>局部定义的时候。
(2)<element…/>(元素定义元素)
fixed属性为该属性指定一个固定值
default属性为该属性指定一个默认值
nillable属性该属性值只能是true和false。
该属性只对元素内容有效,二队元素属性无效。
默认值为false。
(不明白!!!)
ref属性引用一个全局定义的属性
注意:在全局声明(元素或者属性声明)中不能使用ref属性。
ref属性不能与name、type属性(用于定义)同时出现。
use属性用于指定该复杂类型对改属性的要求
支持如下几个属性值:(不明白!!)
optional:指定该属性是可选的,可有可无的。
默认是这种情况。
prohibited:指定该属性是禁止的,表示不能出现。
required:指定该属性是必需的。
<element …/>元素指定use属性的情况:(不能再全局元素定义的时候使用)
1.< element…/>元素中指定了ref属性。
2.采用< element…/>局部定义的时候
minOccurs属性:最少出现次数,大于等于0
maxOccurs属性:最大出现次数,大于等于minOccurs,可以为unbounded 注意:<sequence../>元素、<choice../>元素、<all../>元素也有该属性,注意<all../>属性的区别,其属性只能是1或0。
2.全局声明和局部声明
分为全局元素属性/元素声明和局部属性/元素声明。
全局声明:将<element../>、<attribute../>定义直接放在<schema../ >元素的根元素下。
局部声明:将<element../>定义放在<sequence../>元素、<choice../>元素、<all../>元素下。
将<attribute../>元素定义放在<complexType../>定义中。
注意:
1.全局声明可以通过ref属性来引用。
2.全局声明的元素和属性的名称在模式中必须唯一。
3.全局声明中不能使用ref属性。
4.全局什么的元素在实例文档中可以作为根元素出现。
局部声明具有更好的内聚性,全局声明具有更好的重用性。
如果子元素定义比较简单,而且只在指定类型内使用,那么使用局部定义子元素;反之,使用全局声明定义。
属性通常是附属于元素的,因此将属性声明为全局的意义不大,除非多个元素要使用相同的属性。
3.简单类型和复杂类型的派生
简单类型:既可以作为XML元素的类型,也可以作为XML属性的类型;
复杂类型:只能作为XML元素的类型。
简单类型(simpleType)的派生:
1.限制派生:
<xs:simpleType name=”anyType”>
<xs:restriction base=” any SimpleType”>
//anySimpleType可以是任意简单类型
……面
</xs:restiction>
</xs:simpleType>
简单类型只有限制派生。
准确的说限制派生后的类型依然是简单类型,扩展派生后的类型就可能是复杂类型了。
12种约束(面)。
2.<list../>
必须是同种简单类型。
内置派生类型就是通过list派生的:IDREFS,NMTOKENS,ENTITYS
3.<union../>
可以将多个已有的数据类型(简单类型)联合在一起。
注意:list和union可以嵌套,但是list中不能包含list或者包含list的union类型。
1.含简单内容的复杂类型simpleContent
含简单内容的复杂类型的定义:一般是通过对简单类型扩展派生而来(对简单类型限制派生还是简单类型)。
<complexType>
<simpleContent>
<extension base=”type”>或者<restriction base=”type”>
//base属性必需要有,而且type类型只能是简单类型或者含简单类容的复杂类型。
即不能是含复杂类容的复杂类型。
……
</extension >或者</restriction base=”type”>
</simpleContent>
</complexType>
(1)当base=”简单类型”
扩展派生得到简单类容的复杂类型。
(2)当base=”简单类容的复杂类型”
扩展派生:只能添加属性
限制派生:对元素内容进行约束,对属性进行进一步约束,删除某些属性(use 属性值设为prohibited)
2. 含复杂内容的复杂类型complexContent
一般包括含子元素的类型、空元素、混合内容。
含复杂类容的复杂类型的定义:从anyType通过<sequence../>,<choice../>,<all../>进行限制派生而来。
空元素类型就是anyType中无<sequence../>,<choice../>,<all../>定义的子元素,
即内容为空,但是可以有属性定义。
含混合类容的类型定义就是在含子元素的类型类型定义上加上mixed=”true”;
(1)base=”anyType”时
通过限制派生,生成含复杂内容的复杂类型。
anyType表示任意类型,所以不存在扩展派生。
<complexType>
<complexContent>
<restriction base=”anyType”>
<sequence../> //包含的子元素按顺序出现(次数自定义,默认一次)
<choice../> //包含的子元素只能出现一个
<all../> //包含的子元素随机出现,一个子元素最多只能出现一次</restriction>
</complexContent>
</complexType>
注意:
如上情况中,对anyType进行限制派生时,<complexContent>、<restriction base=”anyType”>可以省略;
<sequence../>,<choice../>可以相互嵌套,但是<all../>不可以。
(这样导致扩展派生时,不能扩展含有<all../>定义的复杂类型);
<sequence../>,<choice../>属性maxOccurs/minOccurs范围从0-unbounded,而<all../>该属性只能是0或1。
(2)base=”含复杂类容的复杂类型”
限制派生:
对指定属性进行进一步约束
对指定元素进行进一步约束
删除指定属性
删除指定元素
注意:
派生类型默认删除基类型中的所有子元素定义,但保留其中所有的属性定义;
对指定属性/元素进一步约束必须在基类型的约束范围之内,不可以超出原约束范围;
删除元素的本质是将该属性的minOccurs和maxOccurs属性值同时设为0,;
删除属性的本质是将use属性的值设为prohibited。
扩展派生:
增加新元素/属性。