XML Schema——笔记整理
什么是 XML Schema?
- 定义可出现在文档中的元素
- 定义可出现在文档中的属性
- 定义哪个元素是子元素
- 定义子元素的次序
- 定义子元素的数目
- 定义元素是否为空,或者是否可包含文本
- 定义元素和属性的数据类型
- 定义元素和属性的默认值以及固定值
优势:
- XML Schema 可针对未来的需求进行扩展
- XML Schema 更完善,功能更强大
- XML Schema 基于 XML 编写
- XML Schema 支持数据类型
- XML Schema 支持命名空间
由 XML 编写 XML Schema 有很多好处:
- 不必学习新的语言
- 可使用 XML 编辑器来编辑 Schema 文件
- 可使用 XML 解析器来解析 Schema 文件
- 可通过 XML DOM 来处理 Schema
- 可通过 XSLT 来转换 Schema
<schema> 元素是每一个 XML Schema 的根元素

<schema> 元素可包含属性。一个 schema 声明往往看上去类似这样:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs
targetNamespace="http://www.w3school.com.cn" 显示被此 schema 定义的元素来自命名空间: "http://www.w3school.com.cn"。
xmlns="http://www.w3school.com.cn" 默认的命名空间是 "http://www.w3school.com.cn"
elementFormDefault="qualified"> 任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定
...
...
</xs:schema>
什么是简易元素?
简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。
定义简易元素的语法:<xs:element name="xxx" type="yyy"/>
常用类型
- xs:string
- xs:decimal
- xs:integer
- xs:boolean
- xs:date
- xs:time
简易元素可拥有指定的默认值或固定值。
当没有其他的值被规定时,默认值就会自动分配给元素,在下面的例子中,缺省值是 "red":<xs:element name="color" type="xs:string" default="red"/>
固定值同样会自动分配给元素,并且您无法规定另外一个值。在下面的例子中,固定值是 "red":<xs:element name="color" type="xs:string" fixed="red"/>
定义属性的语法是:<xs:attribute name="xxx" type="yyy"/>简易元素无法拥有属性,属性本身总是作为简易类型被声明的
常用类型
- xs:string
- xs:decimal
- xs:integer
- xs:boolean
- xs:date
- xs:time
属性可拥有指定的默认值或固定值。
当没有其他的值被规定时,默认值就会自动分配给元素。在下面的例子中,缺省值是 "EN":<xs:attribute name="lang" type="xs:string" default="EN"/>
固定值同样会自动分配给元素,并且您无法规定另外的值。在下面的例子中,固定值是 "EN":<xs:attribute name="lang" type="xs:string" fixed="EN"/>
在缺省的情况下,属性是可选的。如需规定属性为必选,请使用 "use" 属性:<xs:attribute name="lang" type="xs:string" use="required"/>
限定(restriction)用于为 XML 元素或者属性定义可接受的值。对 XML 元素的限定被称为 facet。
数据类型的限定
- enumeration,定义可接受值的一个列表
- fractionDigits,定义所允许的最大的小数位数。必须大于等于0
- length,定义所允许的字符或者列表项目的精确数目。必须大于或等于0
- maxExclusive,定义数值的上限。所允许的值必须小于此值
- maxInclusive,定义数值的上限。所允许的值必须小于或等于此值
- maxLength,定义所允许的字符或者列表项目的最大数目。必须大于或等于0
- minExclusive,定义数值的下限。所允许的值必需大于此值
- minInclusive,定义数值的下限。所允许的值必需大于或等于此值
- minLength,定义所允许的字符或者列表项目的最小数目。必须大于或等于0
- pattern,定义可接受的字符的精确序列
- totalDigits,定义所允许的阿拉伯数字的精确位数。必须大于0
- whiteSpace,定义空白字符(换行、回车、空格以及制表符)的处理方式
复合元素包含了其他的元素及/或属性
有四种类型的复合元素:
- 空元素
- 包含其他元素的元素
- 仅包含文本的元素
- 包含元素和文本的元素
注释:上述元素均可包含属性!
例一:复合元素,"product",是空的:<product pid="1345"/>
例二:复合元素,"employee",仅包含其他元素:<employee><firstname>John</firstname><lastname>Smith</lastname></employee>
例三:复合元素,"food",仅包含文本,<food type="dessert">Ice cream</food>
例四:复合元素,"description",包含元素和文本<description>It happened on <date lang="norwegian">03.03.99</date> ....</description>
在 XML Schema 中,我们有两种方式来定义复合元素
1. 通过命名此元素,可直接对"employee"元素进行声明,就像这样:

2. "employee" 元素可以使用 type 属性,这个属性的作用是引用要使用的复合类型的名称:

如果您使用了上面所描述的方法,那么若干元素均可以使用相同的复合类型,比如这样:

您也可以在已有的复合元素之上以某个复合元素为基础,然后添加一些元素,就像这样:

XML Schema——笔记整理的更多相关文章
- XML Schema笔记
XML Schema是为了弥补DTD的不足而开发的一种新的用于约束和规范XML文档的标准 XML Schema作用: 定义可出现在文档中的元素定义可出现在文档中的属性定义哪些元素是子元素定义子元素的次 ...
- XML学习笔记(三) -- Schema
标签(空格分隔): 学习笔记 Schema的格式 XML Schema文档是由元素.属性.命名空间和XML文档中的其他节点构成的. XML Schema有两种重要的Schema模型:Microsoft ...
- XSD(XML Schema Definition)学习笔记
今天学习了XSD相关的知识,为了以后查找的方便,写一些笔记. 一.什么是XSD? 1.XSD全称:XML Schema Definition.XML Schema 的作用是定义 XML 文档的合法构建 ...
- W3C XML Schema 教程
转自:http://www.blogjava.net/sham2k/articles/179825.html W3C XML Schema 教程 XML SCHEMA教程 本教程是笔者学习W3C的&l ...
- Spring:笔记整理(1)——HelloWorld
Spring:笔记整理(1)——HelloWorld 导入JAR包: 核心Jar包 Jar包解释 Spring-core 这个jar 文件包含Spring 框架基本的核心工具类.Spring 其它组件 ...
- XML学习笔记3——XSD简述
现在的语言,如果不有那么一点OO的影子,都不好意思称之为语言了.在XML的语义约束方面,DTD虽然简单,但是功能不够强大,完全是直白的描述,于是又有了替代DTD的XSD(XML Schema Defi ...
- applicationContext.xml简单笔记
applicationContext.xml简单笔记 <?xml version="1.0" encoding="UTF-8"?> <bean ...
- XML学习笔记(二)-- DTD格式规范
标签(空格分隔): 学习笔记 XML的一个主要目的是允许应用程序之间自由交换结构化的数据,因此要求XML文档具有一致的结构.业务逻辑和规则.可以定义一种模式来定义XML文档的结构,并借此验证XML文档 ...
- day0203 XML 学习笔记
day02, 03 1. xml语言和作用 2. xml语法详解 2.1 xml 语法声明 2.1.1 encoding 属性 2.1.2 standalone 属性 2.2 xml 元素(Eleme ...
随机推荐
- php 文件压缩
1.php文件压缩代码: $zip = new ZipArchive;if($zip->open('aaa.zip',ZipArchive::OVERWRITE)===TRUE){ //aaa. ...
- python 小练习 7
有一楼梯共n级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第n级,共有多少种走法? 这其实是fibonacci数列,记走法为f(n),在n-1和n-2时你都可以直接跨上去.因此 f(n) = ...
- 二十三、Spring框架的相关知识点总结
1.Spring的优点: 1.1.Spring在大小和透明性方面是轻量级的,Spring框架大约只有2MB大小. 1.2.控制反转(IOC):使用控制反转技术实现了低耦合,依赖注入(DI)到对象,而不 ...
- 有关String的一些方法的使用
1.String字符串是引用数据类型. 2.String是常量,如果看到给String进行赋值的情况,是说明将该String的地址进行改变了. 3.String的一些常用的方法 toUpperCase ...
- Windows平台dump文件的产生,调试;工程配置pdb文件怎么生成
http://blog.csdn.net/byxdaz/article/details/25872151
- Java Web(八) 事务,安全问题及隔离级别
事务 什么是事务? 事务就是一组原子性的SQL查询,或者说是一个独立的工作单元. 事务的作用 事务在我们平常的CRUD(增删改查)操作当中也许不太常用, 但是如果我们有一种需求,一组操作中必须全部成功 ...
- laravel中的plicy授权方法:
1.用命令新建policy: php artisan make:policy PostPolicy 2.在app/Policies/PostPolicy.php中添加处理文件的权限的方法: //修改: ...
- laravel Eloquent 查询数据库判断获取的内容是否为空
原文地址:https://www.cnblogs.com/love-snow/articles/7205338.html 在使用 Laravel Eloquent 模型时,我们要判断取出的结果集是否为 ...
- learning ddr tRP and tRP tRTP CL tRAS
referce :https://blog.csdn.net/ghostyu/article/details/7728106 tRP(RAS Precharge Time): “内存行地址控制器预充电 ...
- mysql 数据迁移
最近线上系统新挂了一次磁盘,需要将系统磁盘下的 mysql 数据目录迁移到 数据盘上. 经过一番考察,mysql在安装时,使用了预编译的二进制tar.gz包.共有两处配置了 datadir属性 /et ...