XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd,和XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根元素的名称为Schema。
XML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式。 XML Schema规定XML文档实例的结构和每个元素/属性的数据类型。
Schema命名空间:
命名空间的使用在XML中主要有两个目的: 1.用于区分那些名称相同但来自不同schema库,具有不同含义的元素和属性。通过将元素、属性与URL相关联,命名空间能够区分具有相同名称的元素 2.在一个单一的XML应用中,将相关的元素和属性组合起来,使它们可以很容易地被软件包识别,名称空间用一个唯一的URI表示,仅起到唯一标识的作用。
分类: 默认命名空间声明:不带前缀 ,默认命名空间只能有一个
?格式:xmlns=“url”
?例如:xmlns="http://www.w3.org/2001/XMLSchema" 显式命名空间声明:声明时指定前缀
?格式:xmlns: quoteName =“url”
?例如: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 一些概念: 一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。并且根元素schema节点必须来自http://www.w3.org/2001/XMLSchema 命名空间,官方建议使用使用前缀 xs ,及xmlns:xs。Schema相对于DTD的明显好处是,XML Schema文档本身也是XML文档,而不是像DTD一样使用自成一体的语法。
Schema文档中出现的元素标记:
Schema实例:
1)定义一个简单元素:
2)定义含有子元素的元素(子元素有顺序):
3)定义含有子元素的元素(子元素没有顺序):
4)定义含有子元素的元素(任选一个):
5)仅含有属性的空元素 && 仅含有属性的空元素,属性必须写:
6)必须含有属性的非空元素:
7)必须含有属性也包含子元素的元素:
8)元素内容必须在2——5之间的数:
9)包含多个指定元素:
10)将身份证号格式化,自定义类型:
综上所述之后,可以参考下列代码,加深印象:
代码1:
books.xml:
<?xml version="1.0" encoding="UTF-8"?>
<books xmlns="http://www.example.org/books"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/books books.xsd"
>
<!--
在文档关联中,如何确定文件的位置
* 官方规定,* http://www.w3.org/2001/XMLSchema-instance
* 将当前的xml文档实例化
* schemaLocation属性(两个参数空格隔开)
* 第一参数:实例化所需要的schema文档的名称
* 第二参数:schema文档的相对路径URI
-->
<!-- schema引用流程
1.新建schema文件,确定schema名字,即命名空间
2.创建自己的根节点
3.在web project/WebRoot/WEB-INF/web.xml拷贝内容
4.修改根元素、修改命名空间、修改schema位置
-->
</books>
books.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/books"
xmlns:tns="http://www.example.org/books"
elementFormDefault="qualified"
attributeFormDefault="qualified">
<!--
1、当前的文档books.xsd是schema文档
2、targetNamespace
* 为当前的schema文档命名,为自己取一个名字
* 属性值:自定义
* 要求:必须全球唯一
* 一般采用URL,域名
* 例如:www.itcast.cn
http://www.example.org/books
* 命名空间Namespace
3、xmlns --》 xml namespace
* 声明引入指定名称的命名空间,引用已有的命名空间,默认的
* 作用:使用指定命名空间已定义好的所有内容
* 例如:http://www.w3.org/2001/XMLSchema w3c起的名
* 官方为自己的schema文档起的名称
* 格式:xmlns:别名
* xmlns:xs
* 使用:xs:schema,从当前别名xs所代表的schema文档中定义了schema元素
* 格式2:xmlns(默认命名空间引用)
* 好处:防止命名冲突
-->
<!--
elementFormDefault: 一个实例文档中被局部声明的元素是否必须被目标命名空间(targetNamespace)所规范
qualified:任何xml实例文档必须声明其在schema文档中使用的每一个命名空间
unqualified:在XML实例文档“隐藏”该命名空间,因此在实例文档中仅需对目标命名空间进行命名空间声明
attributeFormDefault: 元素用于指定局部属性是否受到该schema指定targetNamespace所指定的名称空间限定
-->
<!-- 定义根元素 element -->
<xs:element name="books"></xs:element>
</xs:schema>
代码2:
books2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<books xmlns="http://www.example.org/books2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/books2 books2.xsd"
>
<ele></ele>
<person>
<name></name>
<age></age>
</person>
<user>
<age></age>
</user>
<worker>
<age></age>
<name></name>
</worker>
<price unit="¥">1234</price>
</books>
books2.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/books2"
xmlns:tns="http://www.example.org/books2"
elementFormDefault="qualified">
<!-- 定义根元素 element -->
<element name="books">
<complexType>
<sequence>
<!-- 1、定义元素
<ele></ele>
-->
<element name="ele"></element>
<!-- 2、定义元素包含子元素 ** 顺序 ** dtd,<person>
<name></name>
<age></age>
</person>
* 当前子元素的类型
* 复合类型 complexType
* 简单类型simpleType
* 子元素的顺序
-->
<element name="person">
<complexType> <!-- 符合类型 -->
<sequence> <!-- 顺序,内部包含的子元素 -->
<element name="name"></element>
<element name="age"></element>
</sequence>
</complexType>
</element>
<!-- 3、定义元素包含子元素 ** 选择 ** dtd |
<user>
<name></name>
<age></age>
</user>
* 当前子元素的类型
* 符合类型 complexType
* 简单类型simpleType
* 子元素的顺序
-->
<element name="user">
<complexType>
<choice><!-- 选择 -->
<element name="name"></element>
<element name="age"></element>
</choice>
</complexType>
</element>
<!-- 4、定义元素包含子元素 ** 没顺序 ** dtd |
<worker>
<name></name>
<age></age>
</worker>
* 当前子元素的类型
* 符合类型 complexType
* 简单类型simpleType
* 子元素的顺序
-->
<element name="worker">
<complexType>
<all>
<element name="name"></element>
<element name="age"></element>
</all>
</complexType>
</element>
<!--
5、包含属性,有内容的元素
<price unit="¥">34</price>
-->
<element name="price">
<complexType>
<simpleContent> <!-- 简单内容 -->
<!-- 扩展,将简单的内容扩展成复杂的类型
base:确定简单内容的类型
-->
<extension base="integer">
<!-- 定义属性
name:确定名称
type:确定类型
use:
* optional 可选
* required 必须
* prohibited 禁用
-->
<attribute name="unit" type="string" use="required">
</attribute>
</extension>
</simpleContent>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
代码3:
books3.xml:
<?xml version="1.0" encoding="UTF-8"?>
<books unit="abc" xmlns="http://www.example.org/books3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/books3 books3.xsd"
>123</books>
books3.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/books3"
xmlns:tns="http://www.example.org/books3"
elementFormDefault="qualified">
<!--
默认官方xmlns="http://www.w3.org/2001/XMLSchema"
使用自定愿意类型,需要引入自定声明的schema文档的名称
-->
<!-- 确定根元素 -->
<element name="books" type="tns:myType">
</element>
<!-- 声明类型 自定义类型
name:定义名称
-->
<complexType name="myType">
<simpleContent> <!-- 简单内容 -->
<extension base="integer">
<attribute name="unit" type="string" use="required"></attribute>
</extension>
</simpleContent>
</complexType>
</schema>
补充:
XML Schema基础概念:
简易元素:仅包含文本的元素。它不会包含任何其他的元素或属性。
复合元素:包含其他元素及/或属性的 XML 元素
?空元素
?包含其他元素的元素
?仅包含文本的元素
?包含元素和文本的元素 预定义类型:
属性相关定义:
attribute元素的use属性来定义是否是必须的属性
required是必须值
optional是可选值
prohibited是无属性值
缺省值如何定义:<attributename="quantity"type="integer"default="1"/>
固定值如何定义:<attribute name=
"name" fixed=
"张三"></attribute>
关于元素和属性出现次数的约束:
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|