XML学习笔记(三)
1、Schema
1.1、什么是Schema
Schema:原称为XSD(XML Schema Definition),是由微软提出的规范,现成为W3C规范
XML Schema是用一套内置的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式。
XML Schema规定XML文档实例的结构和每个元素/属性的数据类型
1.2、体验dtd和schema的不同之处
首先创建一个xml文档
<?xml version="1.0" encoding="UTF-8"?>
<student><name>貂蝉</name><age>20</age>
</student>
先使用内部的dtd对xml文档做约束
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE student[
<!ELEMENT student (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<student><name>貂蝉</name><age>20</age>
</student>
那么如果采用schema如何来编写呢?
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"><xs:element name="name" type="xs:string"></xs:element><xs:element name="age" type="xs:int"></xs:element><!--定义一个数据类型--><xs:complexType name="stuType"><xs:sequence><xs:element ref="name"></xs:element><xs:element ref="age"></xs:element></xs:sequence></xs:complexType><xs:element name="student" type="stuType"></xs:element>
</xs:schema>
编写一个xml引用此schema
<?xml version="1.0" encoding="UTF-8"?>
<student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\Administrator\Desktop\demo\xsd01.xsd"><name>关羽</name><age>20</age>
</student>
1.3、dtd与Schema的比较
dtd的语法的局限性:
1、dtd使用的是一种语法,而xml使用的是另外一种语法
2、dtd的数据类型是有限的,与我们讲的数据库中数据类型不一致
3、dtd不可以扩展,并且不支持命令空间
Schema的好处:
1、Schema也是遵守xml的语法
2、schema大大扩充了数据类型,也可以自定义自己的数据类型
3、它也支持元素的继承,支持元素组合属性组的概念
4、开发性,多个schema的声明可以应用到一个xml文档中。
1.4、Schema文档的结构
schema文档的结构
引用schema的文档
1.5、Schema中的数据类型(知道即可)
数据类型分类:
简单类型
内置的数据类型(built-in data types)
l基本的数据类型(Primitive Data Types)
l扩展的数据类型(Deriverd Data Types)
用户自定义数据类型(通过simpleType定义)
复杂类型(通过complexType定义)
基本数据类型
数据类型 | 描述 |
---|---|
string | 表示字符串 |
boolean | 布尔型 |
decimal | 代表特定精度的数字 |
float | 表示单精度32位浮点数 |
double | 表示双精度64位浮点数 |
duration | 表示持续时间 |
dateTime | 代表特定的时间 |
time | 代表特定的时间,但是是每天重复的 |
date | 代表日期 |
hexBinary | 代表十六进制数 |
anyURI | 代表一个URI,用来定位文件 |
QName | 代表限定(qualified)名称,即有前缀的字符串 |
扩展的数据类型
数据类型 | 描述 |
---|---|
ID | 用于唯一标识元素 |
IDREF/ IDREFS | 参考ID类型的元素或属性 |
ENTITY/ENTITIES | 实体类型 |
NMTOKEN | NMTOKEN类型 |
NMTOKENS | NMTOKEN类型集 |
long | 表示整型数,大小介于-9223372036854775808 和9223372036854775807之间 |
int | 表示整型数,大小介于-2147483648和 2147483647之间 |
short | 表示整型数,大小介于-32768和32767之间 |
byte | 表示整型数,大小介于-128和127之间 |
NOTATION | 代表 NOTATION类型,QName的派生类型 |
其他数据类型
数据类型 | 描述 |
---|---|
gYear/gYearMonth | 指定格式的日期 |
gMonth/gMonthDay | 指定格式的日期 |
gDay | 指定格式的日期 |
base64Binary | 使用base64-encoded编码的2进制数据 |
language | 语言字符,string的派生 |
Name | 有效的XML字符串,string的派生 |
NCName | Name的派生,字符串中不允许“:” |
negativeInteger | 表示负整数,<= -1 |
positiveInteger | 表示正整数,>=1 |
nonNegativeInteger | >=0,另有nonPositiveInteger表示<=0 |
unsignedLong | 无符号数,还有un…Int、Short、Byte |
数据类型的约束
特性 | 描述 |
---|---|
enumeration | 在指定的数据集中选择,限定用户的选值 |
fractionDigits | 限定最大的小数位,用于控制精度 |
length | 指定数据的长度 |
maxExclusive / minExclusive | 指定数据的最大/小值(小于/大于) |
maxInclusive / minInclusive | 指定数据的最大/小值(小于等于/大于等于) |
maxLength / minLength | 指定长度的最大/小值 |
pattern | 指定数据的显示规范,具体规则见下页 |
whiteSpace | 空白字符的处理:preserve/replace/collapse |
precision | 十进制数据允许的位数 |
scale | 小数部分的位数 |
正则描述
规范 | 描述 |
---|---|
\d | 任意一个数字,如:Chap\dàChap1、Chap9…… |
* | 前的字符任意重复,如:abàb、ab、aaaaab…… |
[ ] | [ ]内的字符集中任意一个,如:[xyz]aàxa、ya、za |
? | ?前的字符出现0或1次 |
+ | + 前的字符至少出现1次 |
- | 指定范围,如:[a-d]yàay、by、cy、dy |
{n} | { }前的字符出现n次,如:a{3}xàaaax |
{min,max} | { }前的字符至少出现min次,至多max次,如:a{1,3}xàax、aax、aaax |
1.5、Schema中的元素类型
•schema、element、attribute、group、attributeGroup
•simpleType
•simpleContent
•complexType
1.5.1、element
案例:xsd02.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--定义元素-->
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="type" type="xs:string"></xs:element>
<!--定义是一个类型-->
<xs:complexType name="heroType"><xs:sequence minOccurs="0" maxOccurs="unbounded"><xs:element ref="name"></xs:element><xs:element ref="type"></xs:element></xs:sequence>
</xs:complexType><xs:element name="hero" type="heroType"></xs:element>
<!--定义了一个类型,这个类型中包含多个hero元素-->
<xs:complexType name="herosType"><xs:sequence maxOccurs="unbounded"><xs:element ref="hero"></xs:element></xs:sequence>
</xs:complexType><xs:element name="heros" type="herosType"></xs:element></xs:schema>
xml文件引用
<?xml version="1.0" encoding="UTF-8"?>
<heros xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\Administrator\Desktop\demo\xsd02.xsd"><hero><name>关羽</name><type>战士</type></hero><hero><name>曹操</name><type>战士</type></hero><hero><name>亚瑟</name><type>战士</type></hero><hero><name>安其拉</name><type>法师</type></hero>
</heros>
1.5.2、group元素
把一组元素声明组合在一起,以便它们能够一起被复合类型应用
案例,使用group组来进行改写代码
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--定义元素-->
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="type" type="xs:string"></xs:element><!--定义一个元素组-->
<xs:group name="myElGroup"><xs:sequence><xs:element ref="name"></xs:element><xs:element ref="type"></xs:element></xs:sequence>
</xs:group>
<!--定义是一个类型-->
<xs:complexType name="heroType"><xs:group ref="myElGroup"></xs:group>
</xs:complexType><xs:element name="hero" type="heroType"></xs:element>
<!--定义了一个类型,这个类型中包含多个hero元素-->
<xs:complexType name="herosType"><xs:sequence maxOccurs="unbounded"><xs:element ref="hero"></xs:element></xs:sequence>
</xs:complexType><xs:element name="heros" type="herosType"></xs:element></xs:schema>
实际上xml文件并不需要发生任何的改变
1.5.3、attribute和attributeGroup
案例1:直接定义属性
<xs:complexType name="heroType"><xs:group ref="myElGroup"></xs:group><xs:attribute name="age" type="xs:int" use="required"></xs:attribute><xs:attribute name="birthday" type="xs:date" use="optional"></xs:attribute><xs:attribute name="addr" type="xs:string" use="prohibited"></xs:attribute>
</xs:complexType>
然后我们在使用attributeGroup来定义属性组
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--定义元素-->
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="type" type="xs:string"></xs:element><!--定义一个元素组-->
<xs:group name="myElGroup"><xs:sequence><xs:element ref="name"></xs:element><xs:element ref="type"></xs:element></xs:sequence>
</xs:group>
<xs:attributeGroup name="myAttrGroup"><xs:attribute name="age" type="xs:int" use="required"></xs:attribute><xs:attribute name="birthday" type="xs:date" use="optional"></xs:attribute><xs:attribute name="addr" type="xs:string" use="prohibited"></xs:attribute>
</xs:attributeGroup>
<!--定义是一个类型-->
<xs:complexType name="heroType"><xs:group ref="myElGroup"></xs:group><xs:attributeGroup ref="myAttrGroup"></xs:attributeGroup>
</xs:complexType><xs:element name="hero" type="heroType"></xs:element>
<!--定义了一个类型,这个类型中包含多个hero元素-->
<xs:complexType name="herosType"><xs:sequence maxOccurs="unbounded"><xs:element ref="hero"></xs:element></xs:sequence>
</xs:complexType>
<xs:element name="heros" type="herosType"></xs:element>
</xs:schema>
1.5.4、simpleType
•作用:定义一个简单类型,它决定了元素和属性值的约束和相关信息
•属性:name
•内容:应用已经存在的简单类型,三种方式:
restriction:限定一个范围
list:从列表中选择
union:包含一个值的结合
案例1:schema文件定义:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"><xs:simpleType name="myAge"><xs:restriction base="xs:int"><xs:minInclusive value="0"></xs:minInclusive><xs:maxInclusive value="100"></xs:maxInclusive></xs:restriction></xs:simpleType><xs:element name="sname" type="xs:string"></xs:element><xs:element name="age" type="myAge"></xs:element><xs:complexType name="stuType"><xs:sequence minOccurs="1" maxOccurs="unbounded"><xs:element ref="sname"></xs:element><xs:element ref="age"></xs:element></xs:sequence></xs:complexType><xs:element name="student" type="stuType"> </xs:element>
</xs:schema>
引用
<?xml version="1.0" encoding="UTF-8"?>
<student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\Administrator\Desktop\demo\xsd03.xsd"><sname>貂蝉</sname><!--此时age中内容必须符合myage的定义要求--><age>100</age>
</student>
案例2:
<xs:simpleType name="mybirthday"><xs:list itemType="xs:date"></xs:list>
</xs:simpleType>
引用
<?xml version="1.0" encoding="UTF-8"?>
<student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\Administrator\Desktop\demo\xsd03.xsd"><sname>貂蝉</sname><!--此时age中内容必须符合myage的定义要求--><age>100</age><birthday>2012-01-22 2018-02-22</birthday>
</student>
案例3:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--定义了一个属性-->
<xs:attribute name="allframesize"><xs:simpleType><!--联合--><xs:union><xs:simpleType><xs:restriction base="roadbikesize"/></xs:simpleType><xs:simpleType><xs:restriction base="mountainbikesize"/></xs:simpleType></xs:union></xs:simpleType>
</xs:attribute><!--定义了一个simpleType类型-->
<xs:simpleType name="roadbikesize"><xs:restriction base="xs:positiveInteger"><xs:enumeration value="16"/><xs:enumeration value="20"/><xs:enumeration value="28"/></xs:restriction>
</xs:simpleType><!--定义了一个simpleType类型-->
<xs:simpleType name="mountainbikesize"><xs:restriction base="xs:string"><xs:enumeration value="small"/><xs:enumeration value="medium"/><xs:enumeration value="large"/></xs:restriction>
</xs:simpleType><xs:element name="name" type="xs:string"></xs:element>
<xs:complexType name="stuType"><xs:sequence minOccurs="1" maxOccurs="5"><xs:element ref="name"></xs:element></xs:sequence><xs:attribute ref="allframesize"></xs:attribute>
</xs:complexType>
<xs:element name="student" type="stuType"></xs:element></xs:schema>
引用文件
<?xml version="1.0" encoding="UTF-8"?>
<!--allframesize的值可以是roadbikesize或者mountainbikesize-->
<student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\Administrator\Desktop\demo\xsd04.xsd" allframesize="small"><name></name>
</student>
1.5.5、complexType和simpleContent元素
complexType:定义一个复合类型,它决定了一组元素和属性值的约束和相关信息
simpleContent:应用于complexType,对它的内容进行约束和扩展。
案例:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"><xs:complexType name="stuType"><xs:simpleContent><!--内容只能放小数--><xs:extension base="xs:decimal"><!--stuType有一个属性sizing--><xs:attribute name="sizing" use="required"><!--属性是基于simpleType类型的--><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="US"/><xs:enumeration value="Euro"/><xs:enumeration value="UK"/></xs:restriction></xs:simpleType></xs:attribute></xs:extension></xs:simpleContent></xs:complexType><xs:element name="student" type="stuType"></xs:element>
</xs:schema>
引用schema文件
<?xml version="1.0" encoding="UTF-8"?>
<student sizing="US" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\Administrator\Desktop\demo\xsd05.xsd">10.1
</student>
总结一下:
SimpleType:基于已有数据类型的扩展
ComplexType:定义一个复合类型
SimpleContent:对ComplexType的内容做限定,这个复合类型没有子元素,只能存在文本或者属性
转载于:https://blog.51cto.com/11230344/2307921
XML学习笔记(三)相关推荐
- ROS学习笔记三:创建ROS软件包
,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...
- python3常用模块_Python学习笔记三(常用模块)
Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...
- K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程
K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...
- XML学习笔记(1)
XML学习笔记(1) 陈保权 2006-2-27 定义:XML:可扩展标记语言,可扩展表现在我们可以自已定义标记不像HTML那样只能用人家定义好的标记,另外XML对结构化数据由很好的表现,便于软件分析 ...
- Spring框架学习笔记(三)(AOP,事务管理)
Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...
- motan学习笔记 三 motan Demo 分析
motan学习笔记 一 微博轻量级RPC框架Motan motan学习笔记 二 motan架构分析 motan学习笔记 三 motan Demo 分析 motan学习笔记 四 motan Demo 之 ...
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- tensorflow学习笔记(三十二):conv2d_transpose (解卷积)
tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...
- Ethernet/IP 学习笔记三
Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...
- XML学习笔记02【xml_解析】
Java后端 学习路线 笔记汇总表[黑马程序员] XML学习笔记01[xml_基础.xml_约束][day01] XML学习笔记02[xml_解析][day01] 目录 03 xml_解析 xml_解 ...
最新文章
- (0086)iOS开发之iPhone 屏幕尺寸、分辨率、ppi以及@2x@3x图
- 开发日记-20190816 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 24
- webstorm git 怎么断开版本控制 webstorm git for windows 禁止 自动运行
- hibernate ——联合主键
- oracle----删除数据
- 2019刚开年全球天气已“爆表” 多国极端天气打破历史纪录
- 高质量发展-协调发展指标体系构建及测算
- ios uiswitch 开关_学习iOS开关按钮UISwitch控件的方法
- 根据xsd文件逆向生成java类
- 2018产品经理都在入驻的平台——汇新云
- 用python写1加到100怎么写_python计算1到100的和
- 计算机多媒体的发展,计算机多媒体技术的现状及发展前景
- pdf文件怎么编辑,如何修改pdf文字
- Android 10获取手机相册照片变成白色空白
- Dagger2与AndroidInjector
- 试述现代计算机系统的多级层次结构,计算机系统结构测验题(一)答案.ppt
- 基于python的短视频智能推荐/django的影视网站/视频推荐系统
- 飞书二开系列之创建测试企业与企业应用等准备工作(一)
- EmguCV-第01讲-EmguCV介绍与安装配置
- PID算法控制平衡小车速度
热门文章
- senchaTouch 给组件传参的两种方式
- 使用Sencha Touch加载服务器端数据。
- Golang 的 “omitempty” 关键字略解
- 多人视频通讯常用架构Mesh/MCU/SFU
- mysql修改字段null为空字符串
- 服务端/web+客户端模式配置
- Redis命令性能优化及事务使用过程
- C语言输入函数换行符赋给变量B,C语言程序设计第3章顺序结构程序设计.pptx-资源下载在线文库www.lddoc.cn...
- 【MyBatis框架】mapper配置文件-关于动态sql
- 35岁前需要完成的事