schema约束介绍:
用于定义和描述xml文档结构与内容的模式语言,其出现是为了克服DTD的局限性Schema与DTD相比:
1、schema符合xml语法结构, dtd语法:<!ELEMENT 元素名称 约束条件>
2、schema对名称空间支持得非常好,一个xml可以有多个schema,多个schema使用名称空间区分(类似于Java中的包名)
3、schema比DTD支持更多的数据类型、并支持用户自定义新的数据类型
4、schema定义约束的能力非常强大,可以对xml实例文档作出细致的语义限制
5、schema不能像DTD一样定义实体,比DTD更复杂,但schema现在已是w3c组织的标准,它正逐步取代DTD
schema的快速入门:
1、创建一个schema文件,文件的后缀名是.xsd必须有一个根节点,根节点是<schema></schema>
2、关键字:
All:表示只能出现一次
Choice:表示只能出现其中一个
Sequence:表示元素按照顺序出现
maxOccurs="unbounded":表示出现次数没有限制
any:表示任意元素
约束属性:
<attribute name="" type="" use=""></attribute>
schema文档编辑
<?xml version="1.0" encoding="UTF-8"?> <!-- xmlns="http://www.w3.org/2001/XMLSchema"这个就表示这个文件是一个约束文档,与被约束文档加以区分 --> <!-- targetNamespace="url路径"表示可以通过targetNamespace中的url路径(路径可以随便写)引入这个schema文件 --> <!-- elementFormDefault="qualified":表示质量良好的 --> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/1" elementFormDefault="qualified"> <!-- 1、看被约束文件有几个元素,有几个元素写几个element --> <!-- 2、区分是简单元素还是复杂元素 --> <!-- person是一个复杂元素 --> <element name="person"> <!-- <complexType>:表示一个复杂类型 --> <complexType> <!-- sequence:表示有序的 --> <sequence> <!-- 这里面放子元素 maxOccurs="unbounded":表示该元素可以出现多次, maxOccurs:表示该元素可以出现几次 --> <element name="name" type="string" maxOccurs="unbounded"></element> <element name="age" type="int"></element> </sequence> <!--all:表示里面定义的元素只能出现一次 --> <!-- <all> <element name="name" type="string"></element> <element name="age" type="int"></element> </all> --> <!-- choice:元素只能出现其中一个 --> <!-- <choice> <element name="name" type="string"></element> <element name="age" type="int"></element> </choice> --> <!-- 约束属性:name:属性的名称 type:属性的数据类性 use="required":表示必须出现 --> <attribute name="id" type="string" use="required"></attribute> </complexType> </element> </schema>
xml的引入
<?xml version="1.0" encoding="UTF-8"?> <!-- 引入约束person.xsd文件 --> <!-- xmlns="http://www.w3.org/2001/XMLSchema-instance":表示这是一个被约束的文件 --> <!-- xmlns="http://www.example.org/1":表示引入targetNamespace中的url路径的方式,引入约束文件 --> <!-- 由于表示被约束文件与约束文件的xmlns会发生冲突,所以要给表示被约束文件的xmlns去一个别名xmlns:xsi --> <!-- xsi:schemaLocation="{namespace} {location}":{namespace}是targetNamespace中的url路径,{location}是约束文件的路径和名称 --> <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.example.org/1" xsi:schemaLocation="http://www.example.org/1 person.xsd" id="123"> <name>zhangsan</name> <age>18</age> </person>