XML Schema中的复杂数据类型complexType 的分析
第5讲Schema高级语法

全局属性实例
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- 定义一个全局属性(属于任何复杂类型),通过type属性指定属性类型 -->
<xs:attribute name="name" type="xs:token"/> </xs:schema>
扩展包含简单内容的复杂类型的实例
extendSimpleContent.xsd <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs=/2001/XMLSchema elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:complexType name="book_Type"> <!-- 定义一个book_Type类型 --> <xs:simpleContent> <xs:extension base="xs:token"> <!-- 从token类型派生出book_Type类型 --> <xs:attribute name="name" type="xs:token" use="required"/> <!-- 增加一个name属性 --> <xs:attribute name="isbn" use="required"> <!-- 增加一个isbn属性 --> <xs:simpleType><!-- 使用simpleType子元素定义isbn属性的类型 --> <xs:restriction base="xs:int"> <xs:totalDigits value="8"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:simpleContent> </xs:complexType>
Schema

什么是XML SchemaXML Schema如同DTD一样是负责定义和描述XML文档的结构和内容模式。
它可以定义XML文档中存在哪些元素和元素之间的关系,并且可以定义元素和属性的数据类型。
XML Schema本身是一个XML文档,它符合XML语法结构。
可以用通用的XML解析器解析它。
为什么要使用Schema我们前面已经使用DTD来定义一个XML的结构和数据类型,那为什么还要Schema呢?因DTD有着不少缺陷:1) DTD是基于正则表达式的,描述能力有限;2) DTD没有数据类型的支持,在大多数应用环境下能力不足;3) DTD的约束定义能力不足,无法对XML实例文档作出更细致的语义限制;4) DTD的结构不够结构化,重用的代价相对较高;5) DTD并非使用XML作为描述手段,而DTD的构建和访问并没有标准的编程接口,无法使用标准的编程方式进行DTD维护。
而XML Schema正是针对这些DTD的缺点而设计的,XML Schema的优点:1) XML Schema基于XML,没有专门的语法2) XML可以象其他XML文件一样解析和处理3) XML Schema支持一系列的数据类型(int、float、Boolean、date等)4) XML Schema提供可扩充的数据模型。
5) XML Schema支持综合命名空间6) XML Schema支持属性组。
一个简单的XML Schema文档在这个Schema里面定义了一个元素:quantity,它的类型是nonNegativeInteger(非负整数),xmlns是Schema的命名空间,这在前面第3章已经叙述过了。
下面的XML片段是合法的:<quantity>5</quantity>下面的XML片段是非法的:<quantity>-4</quantiy><quantity>some</quantity>Schema中的类型Schema中主要包括三种部件:元素(element)、属性(attribute)、注释(notation)。
第4讲 XSD(二)

有子元素的类型
• 使用xsd:sequence , xsd:choice , xsd:all定义 一个子元素列表,对子元素的顺序和出现进行 限定。 xsd:all : 它必须出现在元素内容模型定义的顶 部,其孩子在实例中只能出现一次,出现的次 序可以任意。 • xsd:choice : 只允许它的多个子项目中的一个 出现在XML实例中 xsd:sequence : 允许它的多个子项目顺序的出 现在XML实例中
空元素类型
例2:带文本内容和属性的元素
<xsd:element name="automobile"> <xsd:complexType> 说明automobile的文本内 说明 的文本内 <xsd:simpleContent> 容为positiveInteger 容为 <xsd:extension base="xsd:positiveInteger"> <xsd:attribute name="vin" type="xsd:string"/> <xsd:attribute name="year" type="xsd:string"/> <xsd:attribute name="make" type="xsd:string"/> <xsd:attribute name="model" type="xsd:string"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <automobile vin="SALHV1245SA661555" year="1995" make="Land Rover" model="Range Rover">2</automobile>
利用 XMLPullParser 进行XML 数据解析和处理

利用 XMLPullParser 进行XML 数据解析和处理使用XMLPullParser进行XML数据解析和处理XMLPullParser是一种在Android平台上常用的用于解析和处理XML数据的工具。
它具有快速、高效的特点,能够准确地解析XML 文档,并提供了灵活的API来处理解析结果。
本文将介绍如何利用XMLPullParser进行XML数据解析和处理。
一、XML数据解析的概念和原理XML数据解析是指将XML文档中的数据提取出来并进行处理的过程。
XML文档是一种标记语言,用于描述结构化的数据。
XML数据解析的过程可以分为以下几个步骤:1. 创建XMLPullParser对象:首先,需要创建一个XMLPullParser 对象,用于解析XML文档。
2. 设置输入源:在进行XML数据解析之前,需要设置XMLPullParser的输入源。
输入源可以是一个文件、一个输入流或者一个URL。
3. 解析XML文档:通过调用XMLPullParser对象的相应方法,可以逐行解析XML文档,获取XML文档中的节点信息和数据。
4. 处理解析结果:根据XML数据的结构和需要,可以使用条件语句、循环结构等方式对解析结果进行处理,提取所需的数据,并进行后续的操作。
二、利用XMLPullParser进行XML数据解析的步骤下面逐步介绍如何使用XMLPullParser进行XML数据解析和处理的具体步骤。
步骤1:导入相关的类和包在使用XMLPullParser进行XML数据解析之前,需要导入相应的类和包。
具体的导入语句如下:import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import java.io.InputStream;步骤2:创建XMLPullParser对象需要通过XmlPullParserFactory类的newInstance()方法创建XmlPullParserFactory对象,并通过XmlPullParserFactory对象的newPullParser()方法创建XMLPullParser对象,示例代码如下:XmlPullParserFactory factory = XmlPullParserFactory.newInstance();XmlPullParser parser = factory.newPullParser();步骤3:设置输入源设置XMLPullParser对象的输入源,可以是一个输入流、一个文件或者一个URL。
继承 xml schema

继承 xml schema继承 XML SchemaXML(可扩展标记语言)是一种用于描述数据的标记语言,它被广泛应用于数据交换和信息传递领域。
XML Schema是一种用于定义XML 文档结构和内容的语言。
本文将重点介绍继承XML Schema的概念及其应用。
继承是面向对象编程中一种重要的特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。
在XML Schema中,继承可以用于定义和扩展已有的XML结构,使得XML文档的定义更加灵活和可复用。
XML Schema中的继承通过使用<xs:extension>元素实现。
该元素用于定义一个新的扩展类型,并指定其基类型。
基类型可以是一个已有的复杂类型或简单类型。
通过继承,子类型可以继承父类型的所有属性和元素,并可以添加或覆盖这些属性和元素。
例如,假设我们有一个XML Schema定义了一个名为Person的复杂类型,其中包含了姓名、年龄和性别三个元素。
现在我们希望定义一个新的类型Employee,它继承了Person类型,并额外添加了一个工号元素和一个部门元素。
我们可以使用<xs:extension>元素来实现这个继承关系,如下所示:```<xs:complexType name="Person"><xs:sequence><xs:element name="name" type="xs:string"/><xs:element name="age" type="xs:int"/><xs:element name="gender" type="xs:string"/></xs:sequence></xs:complexType><xs:complexType name="Employee"><xs:complexContent><xs:extension base="Person"><xs:sequence><xs:element name="employeeId" type="xs:int"/><xs:element name="department" type="xs:string"/></xs:sequence></xs:extension></xs:complexContent></xs:complexType>```在上述示例中,Employee类型通过<xs:extension>元素继承了Person类型,并添加了employeeId和department两个元素。
Schema的基本语法

Schema的基本语法XSDL(XML Schema定义语言)由元素、属性、命名空间和XML文档种的其他节点构成的。
一、XSD中的元素XSD文档至少要包含:schema根元素和XML模式命名空间的定义、元素定义。
1、schema根元素语法如下:<xsd:schema xmlns:xsd=“/2001/XMLSchema”>…</xsd:schema>在XSD中必须定义一个且只能定义一个schema根元素。
根元素中包括模式的约束、XML 模式命名空间的定义,其他命名空间的定义、版本信息、语言信息和其他一些属性。
2、元素语法如下:<xsd:element name=”user” type=”xsd:string” />XSD中的元素是利用element标识符来声明的。
其中name属性是元素的名字,type属性是元素值的类型,在这里可以是XML Schema中内置的数据类型或其他类型。
例子:<xsd:schema xmlns:xsd=“/2001/XMLSchema”><x sd:element name=”user” type=”xsd:string” /></xsd:schema>以上文档对应的有效XML文档如下:<?xml version=”1.0”?><user>string</user>在元素的定义中还有2个属性:minOccurs和maxOccurs。
其中minOccurs定义了该元素在父元素中出现的最少次数(默认为1,值为大于等于0的整数),maxOccurs定义了该元素在父元素中出现的最多次数(默认为1,值为大于等于0的整数)。
在maxOccurs中可以把值设置为unbounded,表示对元素出现的最多次数没有限制。
例子:<xsd:schema xmlns:xsd=/2001/XMLSchema><xsd:element name=”user” type=”xsd:string” minOccurs=”0” maxOccurs=”unbounded” /></xsd:schema>表示为元素user的类型为string,出现的次数最少为0(也就是可选),最多不限制。
W3C XML Schema基础

这两个属性的缺省值均为1 minOccurs的值必须小于等于maxOccurs的值 maxOccurs的值可以是unbounded表示不限
示例
<xs:complexType> <xs:sequence> <xs:element name="first" type="addr:nameComponent"/> <xs:element name="middle" type="addr:nameComponent" minOccurs="0"/> <xs:element name="last" type="addr:nameComponent"/> </xs:sequence> </xs:complexType>
属性声明(1)
一般形式
元素名: 元素名:xs:attribute 属性名: 属性名:name, type 属性值: 属性值:
name的值是合法的 的值是合法的XML名 的值是合法的 名 type的值只能是简单类型 的值只能是简单类型
示例
<?xml version="1.0"?> <xs:schema xmlns:xs="/2001/XMLSchema"> … <xs:attribute name=“age" type="xs:integer"/> … </xs:schema>返回元素声明(3)
缺省值和固定值
属性名: 属性名:default, fixed 属性值: 属性值:
第3章之Schema-

内建类型
定义
string
字符串数据,如”online book shop”
boolean
二元类型的true或者false。
date
表示日期,格式是CCYY-MM-DD。
positiveInteger 正整数,不限制大小
integer
整数,如34
float
标准的32位浮点数,如11.87
属性的命名空间
如果需要属性的命名空间与其所属的元素的命名空间不同的话,就需要 显示的指出属性的命名空间前缀 。 <employee:姓名 employee:类型=”职工姓名”>张晓迪</employee:姓名>
<employee:性别 customer:类型=”职工性别”>女</employee:性别>
…… </xsd:schema>
3.1.6 xml文件中引用模式文件
如何使xml文件与模式文件关联,从而让模式文件 约束xml文件?xml文件应具有如下形式: <根元素标记名 xmlns:xsi=“/2019/XMLSchema-instance” xsi:noNamespaceSchemaLocation=“模式文件 名”>
3.3 复杂元素的定义
对于XML文件中有子元素的元素,XML Schema模 式使用“复杂类型”元素来给予约束。XML Schema中“复杂类型”元素的格式为: <xsd:element name=“元素名“ type=“复杂类型名” /> <xsd:complexType name=“复杂类型名”>
命名空间的定义
命名空间是一组保持唯一的名称。例如, 可以将我的所有孩子的姓名视为一个命名 空间,就像加利福尼亚州的公司的名称或 Internet 域名。命名空间就是在逻辑上相 关的任何一组名称,而且每个名称都必须 唯一。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XML Schema中的复杂数据类型complexType 的分析
先来对比:
simpleType:定义了一个简单类型它决定了元素和属性值的约束和相关信息(一个type不但要定义元素的类型还要定义这个元素的属性的值的类型和约束的)
complexType:定义了一个复合类型决定了一组元素和属性值的约束和相关信息
已经知道complexType 里面可以放
attruibute
attruibuteGroup
group
sequence
simpleContent
complexContent
choice
simpleContent
1.应用于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>
-->
choice
choice 允许唯一的一个元素从一个组中被选出
具有属性: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。