XML的Schema约束
XML的DTD和Schema约束区别:
- DTD 的局限性
- DTD不遵守XML语法(写XML文档实例时候用一种语法,写DTD的时候用另外一种语法)
- DTD数据类型有限(与数据库数据类型不一致)
- DTD不可扩展
- DTD不支持命名空间(命名冲突)
- Schema的新特性
- Schema基于XML语法
- Schema可以用能处理XML文档的工具处理
- Schema大大扩充了数据类型,可以自定义数据类型
- Schema支持元素的继承
- Schema支持属性组
- Schema支持命名空间
XSD文档至少要包含:schema根元素和XML模式命名空间的定义、元素定义。需要注意的是XSD中必须定义一个且只能定义一个schema根元素,根元素中包括模式的约束,XML模式命名空间的定义,其他命名空间的定义、版本信息、语言信息和其他一些信息。
1、schema根元素定义:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
</xsd:schema>
2、普通元素定义:
<xsd:element name="user" type="xsd:string" />
XSD中元素是利用element标识符来声明,在上面的示例中name属性是元素的名字,type属性是元素值的类型,可以使XML Schema中内置的数据类型或其他类型。
全部元素如下:
| 元素 | 说明 |
| name | 元素的名称 |
| type | 元素值的类型 |
| minOccurs | 该元素在父元素中最少出现的次数(默认为1,必须大于等于0) |
| maxOccurs | 该元素在父元素中最多出现的次数(默认为1,必须大于等于0),当设置为unbounded表示不限制。 |
2.1 元素引用:避免在文档中多次定义同一个元素,可以使用元素的引用:
<xsd:element name="user" type="xsd:string" />
<xsd:sequence>
<xsd:element ref="user" /> <!--当前元素就是user元素-->
</xsd:sequence>
2.2 元素别名:先定义
<xsd:element name="user" type="xsd:string" substitutionGroup="yonghu" />
后使用
<yonghu>admin</yonghu>
<user>admin</user>
2.3 默认值与固定值
通过default属性的设置,可以在XML文档中没有对city定义时赋予默认值,而是用fixed属性,可以给元素country设定一个固定的值china,并且不允许改变。
<xsd:element name="city" type="xsd:string" default="xian" />
<xsd:element name="country" type="xsd:string" fixed="china" />
2.4 组合器
sequence组合器,定义了一列元素必须按照模式中指定的顺序显示(如果是可选的,也可以不显示)。
<xsd:sequence>
<xsd:element name="first" type="xsd:string" />
<xsd:element name="middle" type="xsd:string" />
<xsd:element name="last" type="xsd:string" />
</xsd:sequence>
all组合器,允许所定义的元素可以按照任意顺序显示,all元素的子元素在默认情况下是必须的,而且每次最多显示一次。
<xsd:all minOccurs="">
<xsd:element name="first" type="xsd:string" />
<xsd:element name="middle" type="xsd:string" />
<xsd:element name="last" type="xsd:string" />
</xsd:all>
choice组合器,允许指定多组声明中的一个,用于互斥情况。
<xsd:choice>
<xsd:element name="first" type="xsd:string" />
<xsd:element name="middle" type="xsd:string" />
<xsd:element name="last" type="xsd:string" />
</xsd:choice>
3、定义属性
在XML Schema文档中可以按照定义元素的方法定义属性,但受限制程度较高。可以应用在attribute元素定义中的属性如下表所示。
| 属性 | 含义 |
| defalt | 初始默认值 |
| fixed | 不能修改和覆盖的固定属性值 |
| name | 属性的名称 |
| ref | 对前一个属性定义的引用 |
| type | 该属性的XSD类型或者简单类型 |
| use | 如何使用属性 optional(可选属性,即属性不是必须的,默认是这个)、prohibited(禁止使用)或者required(强制必须)。 |
| form | 确定attributeFormDefault的本地址 |
| id | 模式文档中属性唯一的ID |
创建属性
<xsd:attribute name="age" type="xsd:integer" />
该语句定义了一个名为age的属性,它的值必须为整数。把它添加到模式中时,它必须是schema元素,complexType元素或者attributeGroup元素的子元素。
<xsd:element name="name">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="first" type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="age" type="xsd:integer" use="optional" /> <!--将属性添加到元素name属性中-->
</xsd:complexType>
</xsd:element>
以上文档对应有效的XML文档如下:
<?xml version="1.0"?>
<name age="">
<first>string</first>
</name>
本文摘自:逆心的XML Schema <第三篇>

说明: xsi:schemaLocation 指定的命名空间对应的验证文件,用来定义xml schema的地址,也就是xml书写时需要遵循的语法,用于声明了目标命名空间的模式文档。 xmlns:xsi="" 是xsi中的元素的的约束规范。
XML的Schema约束的更多相关文章
- xml语法、DTD约束xml、Schema约束xml、DOM解析xml
今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...
- xml的schema约束(Java)
1.schema约束 *dtd语法:<!ELEMENT 元素名称 约束> schema符合xml的语法,是xml语句. 一个xml文件中可以有多个schema,多个schema使用名称空间 ...
- Spring学习----- Spring配置文件xml文档的schema约束
1.配置文件示例. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="htt ...
- 关于Spring配置文件xml文档的schema约束
最开始使用spring框架的时候,对于其配置文件xml,只是网上得知其使用方法,而不明其意.最近想着寻根问底的探究一下.以下是本文主要内容: 1.配置文件示例. <?xml version=&q ...
- XML DTD跟SCHEMA约束 语法了解
dtd语法 元素: <!Element 元素名称 数据类型|包含内容> 数据类型: #PCDATA:普通文本 使用的时候一般用()引起来 包含内容: 该元素下可以出现哪些元素, 用()引起 ...
- Spring中xml文档的schema约束
最开始使用Spring框架的时候,对于其配置文件xml,只是网上得知其使用方法,而不明其意.最近想着寻根问底的探究一下.以下是本文主要内容: 1.配置文件示例. <?xml version= ...
- XML约束——Schema约束
XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性 XML Schema VS DTD: •XML Schema符合XML语法结构. • ...
- Dom4J配合XPath解析schema约束的xml配置文件问题
如果一个xml文件没有引入约束,或者引入的是DTD约束时,那么使用dom4j和xpath是可以正常解析的,不引入约束的情况本文不再展示. 引入DTD约束的情况 mybook.dtd: <?xml ...
- xml初步,DTD和Schema约束
XML 可扩展的标记语言(!!!可扩展) 作用 1.存放数据 2.配置文件 语法 文档声明 <?xml version="1.0" encoding="UTF-8& ...
随机推荐
- FSG压缩壳和ImportREC的使用 - 脱壳篇05
FSG压缩壳和ImportREC的使用 - 脱壳篇05 让编程改变世界 Change the world by program FSG这个壳可以说是有点儿不守妇道,尼玛你说你一个压缩壳就实现压缩功能得 ...
- 使用Spring Boot和Gradle创建AngularJS项目
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的 ...
- nginx中配置跨域支持功能
vi /etc/nginx/nginx.conf 加入如下代码 http { ###start#### add_header Access-Control-Allow-Origin *; add ...
- keil C51 指针总结
变量就是一种在程序执行过程中其值能不断变化的量.要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间.定义一个变量的格式如下: [存储种 ...
- Redis应用场景-整理
1. MySql+Memcached架构的问题 Memcached采用客户端-服务器的架构,客户端和服务器端的通讯使用自定义的协议标准,只要满足协议格式要求,客户端Library可以用任何语言实现. ...
- UVA_埃及分数(Hard Version) UVA 12588
Problem EEg[y]ptian Fractions (HARD version)Given a fraction a/b, write it as a sum of different Egy ...
- U盘启动盘的制作与U盘重装系统
网上有各种各样的装系统的方法,也有各种不同的操作系统版本. 本文介绍如何有UtraISO将U盘制作成系统启动盘,本文用于制作的系统是纯净的32位win7旗舰版. 可到http://itellyou.c ...
- tr转换或删除字符
字符处理命令:tr —— 转换或删除字符 逐个字符处理而不是处理单词的tr [OPTION]... SET1 [SET2] -d: 删除出现在字符集中的所有字符 tr ab AB
- PHP 表单验证 - 验证 E-mail 和 URL
----------------------------------------------------------------------------- 本节展示如何验证名字.电邮和 URL. -- ...
- swift中通知的使用
1.发通知.(以这条通知为例,通知名字:gameOverNotification.通知参数:title) NSNotificationCenter.defaultCenter().postNotifi ...