XML语言基础3--Schema

Posted 沐一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML语言基础3--Schema相关的知识,希望对你有一定的参考价值。

1.什么是Schema

XML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式。

XML Schema规定XML文档实例的结构和每个元素/属性的数据类型。

 

2.为什么需要Schema

弥补DTD的局限性

Schema的新特性

一致性:XML Schema 基于XML基本语法规则定义其文档结构;继承了XML的自描述性和可扩展性。

完备性:引入了数据类型(并可自定义数据类型)、命名空间,支持对其他 XML Schema 的引用,具备较强的模块性;

规范性和准确性:XML Schema提供了更加规范和完备的机制来约束XML文档。

面向对象特征:XML Schema中引入了许多成熟的面向对象机制(比如继承性和多态性)。

扩展性:XML Schema 提供了一些扩展机制,允许在事先无法准确描述数据模式的情况下,在XML实例数据中根据需要添加相关的数据。

 

3.Schema的文档结构

XML Schema 文件的后缀名通常为 .xsd

XML Schema 文件是一个特殊的 XML 文件

?所有Schema文档使用schema作为其根元素
?用于构造Schema的元素和数据类型来自命名空间http://www.w3.org/2001/XMLSchema,前缀一般使用 xs 或 xsd
示例(保存为Student.xsd):
技术分享
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
 3     <xs:element name="student" type="Student"/>
 4         <xs:complexType name="Student">
 5         <xs:sequence>
 6         <xs:element name="name" type="xs:string"/>
 7         <xs:element name="gender" type="Gender"/>
 8         <xs:element name="no" type="xs:string"/>
 9         <xs:element name="teliphone" type="Telenum"/>
10         <xs:element name="age" type="xs:nonNegativeInteger"/>
11         <xs:element name="gpa" type="xs:int" minOccurs="0"/>
12         </xs:sequence>
13         </xs:complexType>
14         <xs:simpleType name="Gender">
15             <xs:restriction base="xs:string">
16             <xs:enumeration value="Female"/>
17             <xs:enumeration value="Male"/>
18             </xs:restriction>
19         </xs:simpleType>
20         <xs:simpleType name="Telenum">
21             <xs:restriction base="xs:string">
22             <xs:pattern value="(\d{4}-\d{8})|(\d{3}-\d{8})|(\d{4}-\d{7})"/>
23             </xs:restriction>
24         
25         </xs:simpleType>
26 </xs:schema>
View Code

与Schema建立关联的XML文档:

技术分享
1 <?xml version="1.0" encoding="UTF-8"?>
2 <student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Student.xsd">
3     <name>XiaoMing</name>
4     <gender>Male</gender>
5     <no>123</no>
6     <teliphone>011-12345678</teliphone>
7     <age>20</age>
8 </student>
View Code

 

4.Schema的数据结构

XML Schema 中的数据类型主要是针对XML元素而言的。

 

简单类型:不包含任何子元素和属性的元素,只能包含文本内容或是不包含文本的空元素

--内置数据类型

基本数据类型 Primitive Datatype

派生数据类型 Drived Datatype

--用户自定义的数据类型(通过simpleType定义)

复杂类型:包含子元素和/或属性的元素,也可包含文本内容(通过complexType定义)。

 

 

4.1 XML Schema 中用户自定义的简单数据类型

a) 通过限制(restriction)派生简单数据类型

b) 

通过限制(restriction)派生简单数据类型

c) 通过合并派生简单数据类型

 

4.2 复杂数据类型

复杂数据类型的几种情况

① 空元素(只包含属性、不包含子元素和文本内容)

−对于包含属性的空元素,只需定义所需的属性及其数据类型。

② 只包含子元素,不包含文本内容(可能包含属性)

子元素的声明必须放在某个容器中,而不能直接出现在 xs:complexType 元素中,即使是只有一个子元素。

如果有属性,属性声明必须放在所有子元素声明之后。
?xs:sequence  表示序列,元素必须按照声明的顺序出现。
?xs:choice   表示从所包含的内容中选择其一。
?xs:all 表示其中所包含的内容不分先后顺序。

③ 只包含文本内容和属性,不包含子元素

对于这种类型的元素,只包含简单内容(文本和属性),声明时,XML Schema中引入了一个新的元素simpleContent(用于表示“文本”、或者“文本+属性”)。

④ 同时包含子元素和文本(可能包含属性)

定义这种复杂数据类型,要使用complexType的mixed属性。

如果有属性,属性声明必须放在所有子元素声明之后。

 

以上是关于XML语言基础3--Schema的主要内容,如果未能解决你的问题,请参考以下文章

XML基础

dtd与xsd去区别

xml模块

XML配置文件相关

SQL基础之XML

xml schema数据类型