【XML学习 三】XML Schema原理及使用

简介: 【XML学习 三】XML Schema原理及使用

经历了第一篇XML入门和第二篇DTD的理解,现在终于可以进入到XML Schema的学习了,正如前边提到的,Schema实际上可以说是DTD的一种扩展,一种替代品,或者可以说是DTD的一种优化。

Schema基础

Schema用途和能力

用途

XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。

能力

比较了下DTD和Schema的能力,我感觉其实二者完成的基本功能差别不大,均是为了定义合法的XML模块,可以说Schema是DTD的plus版本吧,更加易懂,易学,扩展性更好。

  1. 定义可出现在文档中的元素
  2. 定义可出现在文档中的属性
  3. 定义哪个元素是子元素
  4. 定义子元素的次序 ——————————-DTD不能定义无序情况
  5. 定义子元素的数目
  6. 定义元素是否为空,或者是否可包含文本
  7. 定义元素和属性的数据类型——————-Schema支持更多的数据类型
  8. 定义元素和属性的默认值以及固定值

Schema和DTD的比较

Schema显然是DTD的加强版,这里举出两个3C的实例比较,然后根据自己理解将区别特性对应上。依然使用之前的例子:

XML文档

<?xml version="1.0"?>
<note>
  <name>茂神</name>
  <sex>男</sex>
  <age>24</age>
  <describe>茂神最帅了!</describe>
</note>

DTD描述文件note.dtd

<!ELEMENT note (name,sex,age,describe)>    //非XML结构,且子元素顺序是定死的,不支持命名空间
  <!ELEMENT name     (#PCDATA)>             //元素仅能认定为 "#PCDATA" 类型
  <!ELEMENT sex      (#PCDATA)>
  <!ELEMENT age      (#PCDATA)>
  <!ELEMENT describe (#PCDATA)>            //整体文档结构平铺,结构性差,可读性差

Schema描述文件note.xsd

<?xml version="1.0"?>   ==========================================//Schema使用XML的文档结构
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn" ==================== //Schema支持命名空间
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
<xs:element name="note">
    <xs:complexType>
      <xs:sequence>===============================================//Schema支持子元素顺序
    <xs:element name="name" type="xs:string"/>
    <xs:element name="sex" type="xs:string"/>
    <xs:element name="age" type="xs:integer"/>===================//整数型,Schema支持详细类型
    <xs:element name="describe " type="xs:string"/>==============//字符串型,Schema支持详细类型
      </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

Schema 基于 XML 编写

Schema本身也是XML文档,DTD定义跟XML没有什么关系,Schema在理解和实际应用有很多的好处。Schema是XML文档,而DTD有自己的特殊语法这样,只需要懂得XML的语法规则就可以编写Schema,无须学习其他的语法规则;

Schema 文档结构直观

DTD文档的结构是“平铺型”的,如果定义复杂的XML文档,很难把握各元素之间的嵌套关系;Schema文档结构性强,各元素之间的嵌套关系非常直观。

Schema 支持更多元素类型

DTD只能指定元素含有文本,不能定义元素文本的具体类型,如字符型、整型、日期型、自定义类型等。Schema在这方面比DTD强大。

Schema支持元素节点顺序描述

Schema支持元素节点顺序的描述,DTD没有提供无序情况的描述(子元素均需按顺序),要定义无序必需穷举排列的所有情况。Schema可以利用xs:all来表示无序的情况。

Schema支持命名空间

对命名空间的支持。DTD无法利用XML的命名空间,Schema很好满足命名空间。并且,Schema还提供了include和import两种引用命名空间的方法。

Schema使用

XML引入Schema

上篇博客已经详细解释过DTD是怎么被引入到XML中的:主要通过:<!DOCTYPE 根元素 SYSTEM "文件名">的方式引入,传送门https://blog.csdn.net/sinat_33087001/article/details/80877507,上例中的XML要想引入DTD,那么只需要在XML中加一句:

<!DOCTYPE note SYSTEM "http://www.w3school.com.cn/dtd/note.dtd">

那么XML引入XSD呢,需要如下代码:

<?xml version="1.0"?>
<note
xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
<note>
  <name>茂神</name>
  <sex>男</sex>
  <age>24</age>
  <describe>茂神最帅了!</describe>
</note>

对上边三句解释如下:

  1. xmlns=”http://www.w3school.com.cn” 规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 “http://www.w3school.com.cn” 这个命名空间。
  2. 一旦拥有了可用的 XML Schema 实例命名空间:xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” 就可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间(也就是Schmea能发挥作用必须引入的实例这里讲的是Schema结构需要的哦)。第二个值是供命名空间使用的 XML schema 的位置这里讲的是Schema被用于的XML文档实际的命名空间哦:xsi:schemaLocation=”http://www.w3school.com.cn note.xsd”

Schema结构详解

继续拿上边3C举例的Schema来讨论Schema的各个结构:

<?xml version="1.0"?>   ===================================//Schema使用XML的文档结构,所以需要xml声明
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn" ==================== //Schema支持命名空间
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
<xs:element name="note">
    <xs:complexType>
      <xs:sequence>===============================================//Schema支持子元素顺序
    <xs:element name="name" type="xs:string"/>
    <xs:element name="sex" type="xs:string"/>
    <xs:element name="age" type="xs:integer"/>===================//整数型,Schema支持详细类型
    <xs:element name="describe " type="xs:string"/>==============//字符串型,Schema支持详细类型
      </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

首先,<schema> 元素是每一个 XML Schema 的根元素,而且<schema> 的声明往往如下所示

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
...
...
</xs:schema>

其中四句头部声明内容解释如下:

  1. xmlns:xs=”http://www.w3.org/2001/XMLSchema”表示 schema 中用到的元素和数据类型(这里讲的是Schema结构的元素和数据类型哦)来自命名空间 “http://www.w3.org/2001/XMLSchema“。同时它还规定了来自命名空间 “http://www.w3.org/2001/XMLSchema” 的元素和数据类型应该使用前缀 xs:。这个地址应该就是国际标准制定日期/名词
  2. targetNamespace=”http://www.w3school.com.cn” 显示被此 schema 定义的元素 (note,name, sex, age, describe) (这里讲的是XML文档实际上用的元素和数据类型哦)来自命名空间: “http://www.w3school.com.cn“。
  3. xmlns=”http://www.w3school.com.cn” 指出默认的命名空间是 “http://www.w3school.com.cn“。
  4. elementFormDefault=”qualified” 指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定
相关文章
|
6月前
|
XML SQL 数据处理
学习 XQuery:XML数据查询的关键
XQuery是用于查询XML数据的语言,类似SQL对数据库的操作。它基于XPath构建,用于从XML文档中提取和排序元素。FLWOR表达式(For, Let, Where, Order by, Return)是其核心,用于处理和过滤数据。例如,示例代码展示了如何选取&quot;books.xml&quot;中价格大于30的书籍并按标题排序。XQuery还可用于Web服务、生成报告、XML到XHTML转换及搜索文档等场景。了解XPath能帮助更好地掌握XQuery,两者有相似的数据模型和函数。
103 0
|
6月前
|
XML 存储 JSON
Python学习 -- 常用数据交换格式(CSV、XML、JSON)
Python学习 -- 常用数据交换格式(CSV、XML、JSON)
88 0
|
2月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
47 1
|
23天前
|
XML 前端开发 Java
XML基本概念入门学习指南
XML(eXtensible Markup Language)是一种可扩展的标记语言,和HTML语言语法类似,同属于标记语言。
|
5月前
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
47 1
|
1月前
|
XML Java 应用服务中间件
tomcat学习一:tomcat 目录及配置文件学习 server.xml 等
这篇文章是关于Apache Tomcat服务器的目录结构、配置文件(特别是server.xml)的详细介绍和学习指南。
58 0
tomcat学习一:tomcat 目录及配置文件学习 server.xml 等
|
3月前
|
XML 数据格式
DTD和XML Schema之间的区别?
【8月更文挑战第22天】
67 0
|
6月前
|
XML 网络协议 Java
XML Web 服务技术解析:WSDL 与 SOAP 原理、应用案例一览
XML Web服务是基于WSDL、SOAP、RDF和RSS等标准的网络应用程序组件技术。WSDL描述服务接口和消息格式,SOAP用于结构化信息交换,RDF描述网络资源,RSS则用于发布网站更新。Web服务特点是自包含、自描述,基于开放协议,可重用且能连接现有软件。WSDL文档包含`types`、`message`、`portType`和`binding`元素,定义服务操作和协议。SOAP协议规定消息格式,通过HTTP等传输。
555 1
|
6月前
|
XML 数据格式
XML Schema 复杂元素类型详解:定义及示例解析
在XML Schema(XSD)中,复杂元素包含其他元素和/或属性,分为4类:空元素、仅含元素、仅含文本和既含元素也含文本。定义复杂元素可通过直接声明或引用预定义的复杂类型。复杂空元素仅含属性,而仅含元素的类型则只包含其他子元素。XSD提供了`&lt;xs:sequence&gt;`、`&lt;xs:all&gt;`、`&lt;xs:choice&gt;`等指示器来规定元素顺序和出现次数,以及`&lt;xs:attributeGroup&gt;`和`&lt;xs:group&gt;`来组织元素和属性。
235 7
|
6月前
|
XML 数据格式
XML Schema 字符串数据类型及约束详解
XML中的字符串数据类型表示字符序列,包括换行、回车和制表符。处理器不修改值。`normalizedString`去除这些特殊字符,`token`则进一步移除前导和尾随空格及多余空格。字符串类型可使用枚举、长度等限制。`date`和`dateTime`数据类型表示日期和时间,`duration`表示时间间隔。数值类型如`decimal`和`integer`用于数值,布尔型表示真或假。还有如`base64Binary`和`anyURI`等其他数据类型。元素和数据类型可以有各种约束,如最大值、最小值和模式匹配。
91 0