导读:DTD是对XML文档进行有效性验证的方法之一,事实上,继DTD之后,出现了用来规范和描述XML文档的第二代标准:Schema。Schema是DTD的继承,但是也有其不同的地方,它是真正的以独立的文档存在,并且使用语XML文档相同的语法。本篇博客,则系统的介绍Schema文件。

一、DTD的不足

1.1,不遵守XML语法

DTD文件并不是XML,它有着自己特殊的语法,这样,在实际使用XML文档时,需要掌握两种语法,还要两种不兼容的解析器:一套解析XML,一套解析DTD,用解析完了的DTD文档,去验证XML文档是否有效。

1.2,提供的数据类型有限

XML已成为网络语言的主流之一,它的应用越来越广泛,对于数据类型的要求也越来越多。但是,DTD规定的文档内容都是字符型数据,像整形、浮点型、布尔型的数据类型是无法提供的。

1.3,扩展困难

首先,DTD的内容模型是封闭的,扩展的内容是不能随意的,否则将导致文档无法被解析。其次,DTD自身的扩展机制相当的脆弱和复杂,而且并不能清楚的表达相互之间的关系。两个有着完全相同内容的元素,相互间完全独立,无法联系。

1.4,不支持命名空间

XML的命名空间是XML能够广泛应用于网络的基础,它为文档的编写和应用程序的实现提供了相当灵活的机制,但是DTD不支持命名空间。这就导致一个DTD文档可以被多个XML文档引用,但是不同的DTD不能同时对一个XML文档进行规定,对XML的继承性和重用性带来了极大的限制。

二、Schema的优势

Schema的优势,正是弥补了DTD的几个明显的不足。Schema文件使用XML语法、提供多种数据类型、支持命名空间,拥有更为灵活和强大的定义能力,比如:规定XML文档中多个元素出现的先后顺序,规定某个元素出现的次数,规定某个元素或属性的数据类型和取值范围等。

三、XML Schema的特点

3.1,Schema模型

XML Schema一共有两种重要的模型:Microsoft XML Schema和W3C XML Schema。

Microsoft模式结构:

<Schema name="schema-name" xmlns="namespace">

元素声明部分或属性声明部分

</Schema>

W3C模式结构:

<xsd:schema xmlns="namespace">

元素声明部分或属性声明部分

</xsd:schema>

3.2,Schema特点

一致性(使用XML语法)、扩展性(引入了命名空间、数据类型)、互换性(不同的Schema互换实现高层次的数据交换)、规范性(利用元素的内容和属性来定义整体结构)、数据类型多样性。

四、制作Schema文件

4.1,Schema文件

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<!--这是一个简单的Schema文件
xmlns="urn:schemas-microsoft-com:xml-data"表示将引用微软的schema类型定义,
xmlns:dt="urn:schemas-microsoft-com:datatypes"表示将引入微软的schema数据类型定义
xmlns:MyNS="http://www.schema.net\BOOK.XML"一句话表示有可能用到BOOK.XML 文档中的元素-->
<Schema xmlns="urn:schemas-microsoft-com:xml-data">
<description>
注释一:这是测试Schema的文档
</description>
<ElementType name="测试Schema文档">
<element type="基本信息"/>
<element type="其他信息"/>
</ElementType> <description>
注释二:这是基本信息部分,包含基本信息的各个元素和各个子元素
</description>
<ElementType name="基本信息">
<element type="姓名"/>
<element type="性别"/>
<element type="年龄"/>
<element type="爱好"/>
</ElementType>
<ElementType name="姓名"/>
<ElementType name="性别"/>
<ElementType name="年龄"/>
<ElementType name="爱好">
<element type="体育"/>
<element type="其他"/>
</ElementType> <description>
注释三:这是其他信息部分,包含其他信息的各个元素和各个子元素
</description>
<ElementType name="其他信息">
<element type="籍贯"/>
<element type="毕业学校"/>
<element type="毕业时间"/>
<element type="在校表现"/>
</ElementType>
<ElementType name="籍贯"/>
<ElementType name="毕业学校"/>
<ElementType name="毕业时间"/>
<ElementType name="在校表现">
<element type="优"/>
<element type="还行"/>
<element type="合格"/>
</ElementType>
</Schema></span>

4.2,与Schema文件对应的XML文档

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<!--引入Schema文档,对当前XML文档进行有效性验证-->
<测试Schema文档 xmlns="schema.xsd">
<基本信息>
<姓名> 何下下 </姓名>
<性别> 女 </性别>
<年龄> 18 </年龄>
<爱好>
<体育> 篮球 </体育>
<其他> 外国 </其他>
</爱好>
</基本信息> <其他信息>
<籍贯> 中国四川 </籍贯>
<毕业学校> 廊坊师范学院 </毕业学校>
<毕业时间> 马上正要即将毕业 </毕业时间>
<在校表现>
<优> 从不旷课 </优>
<还行> 作业得分比较高 </还行>
<合格> 长相还算是不影响市容 </合格>
</在校表现>
</其他信息>
</测试Schema文档></span>

五、总结

我想说的是,就调试这个Schema文件,昨晚搞到了快凌晨,今早上又搞了半小时。查了查怎样通过Schema文件去验证xml文档的有效性,然后回头去看了看DTD文件的验证。但是我改了好几个地方,它本身按照类型文档的定义,是不能通过验证的,但是它还是显示出来了。不知道为什么?然后就猛然想起,之前总结过的,没有有效性验证的XML文档也是允许的。不知道和这个有没有关系?

然后,在DTD中,只要引入了一个dtd文档类型文件,就可以验证xml文档,设置顺序和格式,这些一旦修改就是会报错的。但是在Schema验证的过程中,都没有。我查了一下资料,我现在都怀疑,我只是将这个Schema文件和这个XMl文档关联上了,但是并未开始真正的验证。因为Schema和xml文档,都是一个正常编写的xml文件,所以就想着能够正常显示也算正常。

现在会基本的编写Schema文件和xml文档,对于XSL的应用不是很熟练,但是,我上网查了一些xml、Schema、xsl、dtd等文件,我现在是能够看得明白,然后也能根据xml文档写Schema文件等,我想这还是达到了我最开始的目的的。接下来,可能就是当前阶段总结xml的最后一篇博客:HTML和XML的混合使用了。以后还会总结xml文档中的导航语言XPath,还有XML和HTML以及本身的快速转换。

【HTML/XML 10】XML文档中的Schema文件的更多相关文章

  1. Aspose.Words提取word文档中的图片文件

    /// <summary> /// 提取word中的图片 /// </summary> /// <param name="filePath">w ...

  2. 如何在word文档中添加mathtype加载项

    MathType是强大的数学公式编辑器,通常与office一起使用,mathtype安装完成后,正常情况下会在word文档中的菜单中自动添加mathtype加载项,但有时也会出现小意外,mathtyp ...

  3. XML文档中的xmlns、xmlns:xsi和xsi:schemaLocation

    文章转载自:https://yq.aliyun.com/articles/40353 相信很多人和我一样,在编写Spring或者Maven或者其他需要用到XML文档的程序时,通常都是将这些XML文档头 ...

  4. 从多个XML文档中读取数据用于显示webapi帮助文档

    前言: 你先得知道HelpPageConfig文件,不知道说明你现在不需要这个,所以下文就不用看了,等知道了再看也不急.当然如果你很知道这个,下文也不用看了,因为你会了. 方法一: new XmlDo ...

  5. 详解xml文件描述,读取方法以及将对象存放到xml文档中,并按照指定的特征寻找的方案

    主要的几个功能: 1.完成多条Emp信息的XML描述2.读取XML文档解析Emp信息3.将Emp(存放在List中)对象转换为XML文档4.在XML文档中查找指定特征的Emp信息 dom4j,jaxe ...

  6. 五个在XML文档中预定义好的实体

    下面是五个在XML文档中预定义好的实体: < < 小于号 > > 大于号 & & 和 &apos; ' 单引号 " " 双引号 实体 ...

  7. shell之实战应用一(查找xml文档中的关键字段)

      前几天同事问我一个问题,说如下的文档中,如何把name后面的字段(红色框中的字段)单独打印出来?

  8. dom4j解析xml报"文档中根元素后面的标记格式必须正确"

    今天,在写个批量启动报盘机的自动化应用,为了简化起见,将配置信息存储在xml中,格式如下: <?xml version="1.0" encoding="UTF-8& ...

  9. 删除XML文档中某节点

    前几天Insus.NET在写了一系列XML文档进行操作.创建 <怎样创建XML文档> http://www.cnblogs.com/insus/p/3276944.html       & ...

随机推荐

  1. RedisCacheTool参考其中的文件读写功能

    package com.jr.market.tool; import java.io.BufferedReader; import java.io.File; import java.io.FileI ...

  2. NeHe OpenGL教程 第三十一课:加载模型

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. git(4)如何在windows上安装git

    windows版本git(1.9.2)下载:点击下载 下完之后点击双击安装: 我安装的是默认的目录:一路next,最后就安装完成了,中间步骤中也有unix下安装的选项: 我的安装目录是在:C:\Pro ...

  4. linux命令(5)文件操作:ls命令、显示文件总个数

    一:ls命令是最常用的linux命令了:下面是ls --help里面的用法 在提示符下输入ls --help ,屏幕会显示该命令的使用格式及参数信息: 先介绍一下ls命令的主要参数: -a 列出目录下 ...

  5. 转-TabHost组件(一)(实现底部菜单导航)

    http://www.cnblogs.com/lichenwei/p/3974009.html 什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用wind ...

  6. Error: L6218E: Undefined symbol TIM_ARRPreloadConfig (referred from pwm_output.o).

    出错原因:模板FWLIB中没有添加stm32f10x_tim.c文件.添加即可 一般利用库开发,将ppp.c(ppp.c又调用了库stm32f10x_xx.h)写好之后的调用步骤: 1 将ppp.c和 ...

  7. Coding.net 代码管理快速入门

    当项目创建好了之后,我们该如何上传代码到 coding 上呢? Coding 网站使用“ Git 仓库”(类似 github )来管理代码. 其操作原理在于:利用 git 服务,将本地的项目目录下的文 ...

  8. English Notes

    1. Thanks for stopping by.慢走不送. 2. I don't like to judge a book by it's cover.我不喜欢以貌取人. 3. Rush hour ...

  9. linux下安装nginx、pcre、zlib、openssl

    1.安装nginx之前需要安装PCRE库的安装  最新下载地址   ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ tar –zxvf p ...

  10. 服务器压力测试 ab

    1.ab命令原理 Apache自带的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力(测试其它服务器时需单独下载ab压力测试工具 ...