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. iOS-掌握了时间就掌握了一切!

    Demo下载地址 一. NSDate相关知识 1.获取当前时间 [NSDate date]; 注意: 获取的当前时间是世界时间:比我们用的时间慢8个小时. 2.世界时间转化为本地时间 - (void) ...

  2. Windows Server 2008 下解析二级域名的方法

    昨天去了客户那里部署网站,用的是客户那边的windows server 2008. 本文主要以总结问题点的形式来说. 问题1:本机的数据库是SQL SERVER 2008R2,客户那边的数据库是SQL ...

  3. SQL Server 2016里的sys.dm_exec_input_buffer

    在你的DBA职业里,你们谁有用过DBCC INPUTBUFFER命令,来获得已经提交到SQL Server特定会话的最后SQL语句?请举手!大家都用过! 我们都知道DBCC命令有点尴尬,因为你不能在T ...

  4. 使用、支持、帮助Moon.Orm

    1.关于Moon.Orm的说明 1)任何人和组织都可以免费使用该框架;(赞助者提供长期的技术咨询)  微信微信: 2)5.0之前已经全部开源; 3)5.0标准版本目前对参与者开源(看看下面很简单的), ...

  5. NPOI读取Excel帮助类,支持xls与xlsx,实现公式解析,空行的处理

    NPOI读取Excel(2003或者2010)返回DataTable.支持公式解析,空行处理. /// <summary>读取excel /// 默认第一行为表头 /// </sum ...

  6. 固定在网页顶部跟随滚动条滑动而滑动的DIV层

    在一个页面放2个悬浮框,悬浮框随页面的上下滚动有上下波动的效果,最终固定在同一位置 体验效果:http://hovertree.com/texiao/jsstudy/1/ 代码如下: <!DOC ...

  7. javaScript系列:js中获取时间new Date()详细介绍

    var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)m ...

  8. .net源码分析 – List<T>

    通过分析源码可以更好理解List<T>的工作方式,帮助我们写出更稳定的代码. List<T>源码地址: https://github.com/dotnet/corefx/blo ...

  9. jquery html属性和text属性的区别

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. virtualbox 虚拟机Ubuntu 传文件-共享