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):
 <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:element name="student" type="Student"/>
<xs:complexType name="Student">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="gender" type="Gender"/>
<xs:element name="no" type="xs:string"/>
<xs:element name="teliphone" type="Telenum"/>
<xs:element name="age" type="xs:nonNegativeInteger"/>
<xs:element name="gpa" type="xs:int" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="Gender">
<xs:restriction base="xs:string">
<xs:enumeration value="Female"/>
<xs:enumeration value="Male"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Telenum">
<xs:restriction base="xs:string">
<xs:pattern value="(\d{4}-\d{8})|(\d{3}-\d{8})|(\d{4}-\d{7})"/>
</xs:restriction> </xs:simpleType>
</xs:schema>

与Schema建立关联的XML文档:

 <?xml version="1.0" encoding="UTF-8"?>
<student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Student.xsd">
<name>XiaoMing</name>
<gender>Male</gender>
<no>123</no>
<teliphone>011-12345678</teliphone>
<age>20</age>
</student>

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的更多相关文章

  1. XML语言基础1

    这学期选修了XML技术这门课,没有发课本,于是参考了W3school教程,整理一下上课的内容. 1.XML简介 XML是一种标记语言,很类似HTML,它不是对HTML的替代,而是对HTML的补充.在大 ...

  2. XML语言基础2 DTD

    XML DTD 文档类型定义(DTD)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档结构. DTD可被声明于XML文档中,也可以作为一个外部的引用. 内部的DOCTYPE声明 假如D ...

  3. xml之基础了解

    1.简介 1>什么XML语言(eXtensible Markup Language) 可扩展标记语言XML是SGML的子集,其目标是允许普通的SGML在Web上以目前HTML的方式被服务.接受和 ...

  4. 2008技术内幕:T-SQL语言基础

    2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...

  5. 2008技术内幕:T-SQL语言基础 单表查询摘记

    这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLFundamentals2008 ,官网给出的连接是这 ...

  6. T-SQL语言基础(转载)

    本文转自http://www.cnblogs.com/Jolinson/p/3552786.html 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基 ...

  7. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  8. C#语言基础

    第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...

  9. php面试题之三——PHP语言基础(基础部分)

    三.PHP语言基础 1. strlen( )与 mb_strlen( )的作用分别是什么(新浪网技术部) strlen和mb_strlen都是用于获取字符串长度. strlen只针对单字节编码字符,也 ...

随机推荐

  1. C算法编程题(五)“E”的变换

    前言 上一篇<C算法编程题(四)上三角> 插几句话,说说最近自己的状态,人家都说程序员经常失眠什么的,但是这几个月来,我从没有失眠过,当然是过了分手那段时期.每天的工作很忙,一个任务接一个 ...

  2. php教程|php基础知识

    第1章  初识PHP 当前网络技术发展日新月异,各种基于服务端创建动态网站的脚本语言更是层出不穷.其中PHP以其简单.易用.可移植性强等特点,在众多的动态网站语言技术中独树一帜.那么到底什么是PHP, ...

  3. Mac如何删除MySQL,Mac下MySQL卸载方法

    在Mac下安装完MySQL之后,出现了无法启动的问题,多翻尝试依然不能解决问题,最后只能把它删掉. 如何在Mac下删除MySQL呢,只需要在终端执行如下命令就可以把MySQL在Mac下彻底删除干净了. ...

  4. 使用FileSystemWatcher监控文件夹及文件

    引言 这一周主要精力集中学习一个同事开发的本地文件搜索项目上,其中客户端添加共享文件时主要是使用FileSystemWatcher 监控文件,并在各种事件发生时向服务器发送消息. 解决方法 FileS ...

  5. 实用的60个CSS代码片段

    1.垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,可以很优雅的解决这个困惑: .verticalcenter{ position: re ...

  6. 从零开始,搭建博客系统MVC5+EF6搭建框架(3),添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController

    一.回顾系统进度以及本章概要 目前博客系统已经数据库创建.以及依赖注入Autofac集成,接下来就是日志和缓存集成,这里日志用的是Nlog,其实还有其他的日志框架如log4,这些博客园都有很多介绍,这 ...

  7. 30行代码让你理解angular依赖注入:angular 依赖注入原理

    依赖注入(Dependency Injection,简称DI)是像C#,java等典型的面向对象语言框架设计原则控制反转的一种典型的一种实现方式,angular把它引入到js中,介绍angular依赖 ...

  8. React Native系列文章

    React Native版本升级的正确姿势 WebView JS与RN进行通讯 用API网关把API管起来 React-Native 给客户端来个「同音词模糊搜索」 30天React Native从零 ...

  9. 【Win10开发】Toast通知——前台激活

    上篇文章我们将了大体的Toast通知的模板及实例展示,那么,这篇文章就来讲讲Toast的前台激活. 首先是xaml界面,很简单,我们放一个Button和TextBlock,TextBlock用来显示T ...

  10. jQuery获取及设置单选框、多选框、文本框内容

    获取一组radio被选中项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本 var item = $(&qu ...