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学习笔记(三)相关推荐

  1. ROS学习笔记三:创建ROS软件包

    ,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...

  2. python3常用模块_Python学习笔记三(常用模块)

    Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...

  3. 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 个重要概念 ...

  4. XML学习笔记(1)

    XML学习笔记(1) 陈保权 2006-2-27 定义:XML:可扩展标记语言,可扩展表现在我们可以自已定义标记不像HTML那样只能用人家定义好的标记,另外XML对结构化数据由很好的表现,便于软件分析 ...

  5. Spring框架学习笔记(三)(AOP,事务管理)

    Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...

  6. motan学习笔记 三 motan Demo 分析

    motan学习笔记 一 微博轻量级RPC框架Motan motan学习笔记 二 motan架构分析 motan学习笔记 三 motan Demo 分析 motan学习笔记 四 motan Demo 之 ...

  7. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  8. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  9. Ethernet/IP 学习笔记三

    Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...

  10. XML学习笔记02【xml_解析】

    Java后端 学习路线 笔记汇总表[黑马程序员] XML学习笔记01[xml_基础.xml_约束][day01] XML学习笔记02[xml_解析][day01] 目录 03 xml_解析 xml_解 ...

最新文章

  1. (0086)iOS开发之iPhone 屏幕尺寸、分辨率、ppi以及@2x@3x图
  2. 开发日记-20190816 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 24
  3. webstorm git 怎么断开版本控制 webstorm git for windows 禁止 自动运行
  4. hibernate ——联合主键
  5. oracle----删除数据
  6. 2019刚开年全球天气已“爆表” 多国极端天气打破历史纪录
  7. 高质量发展-协调发展指标体系构建及测算
  8. ios uiswitch 开关_学习iOS开关按钮UISwitch控件的方法
  9. 根据xsd文件逆向生成java类
  10. 2018产品经理都在入驻的平台——汇新云
  11. 用python写1加到100怎么写_python计算1到100的和
  12. 计算机多媒体的发展,计算机多媒体技术的现状及发展前景
  13. pdf文件怎么编辑,如何修改pdf文字
  14. Android 10获取手机相册照片变成白色空白
  15. Dagger2与AndroidInjector
  16. 试述现代计算机系统的多级层次结构,计算机系统结构测验题(一)答案.ppt
  17. 基于python的短视频智能推荐/django的影视网站/视频推荐系统
  18. 飞书二开系列之创建测试企业与企业应用等准备工作(一)
  19. EmguCV-第01讲-EmguCV介绍与安装配置
  20. PID算法控制平衡小车速度

热门文章

  1. senchaTouch 给组件传参的两种方式
  2. 使用Sencha Touch加载服务器端数据。
  3. Golang 的 “omitempty” 关键字略解
  4. 多人视频通讯常用架构Mesh/MCU/SFU
  5. mysql修改字段null为空字符串
  6. 服务端/web+客户端模式配置
  7. Redis命令性能优化及事务使用过程
  8. C语言输入函数换行符赋给变量B,C语言程序设计第3章顺序结构程序设计.pptx-资源下载在线文库www.lddoc.cn...
  9. 【MyBatis框架】mapper配置文件-关于动态sql
  10. 35岁前需要完成的事