XML的中阶知识巩固之XML Schema其一

用过 XML 的人都知道可用 DTD(Document Type Definition) 来验证语法,不过微软主导了新一代验证语法的 XML Schema,并且风头正劲,大有一统江湖之势。看看我们身边的几个变化就明白了。

web.xml 从 web-app_2_3.dtd 到 web-app_2_4.xsd

spring 配置文件从 spring-beans.dtd 到 spring-beans-2.0.dtd 到 spring-beans-2.0.xsd,直至灵活的自定义 Schema

quartz_jobs.xml 配置文件从 job_scheduling_data_1_5.dtd 到 job_scheduling_data_1_5.xsd

XML Schema 简介

XML Schema 是一个比 DTD 具有更细致描述语法功能的验证技术,并且它本身也是一个 XML 文件,不像 DTD 用是是独有的语法。既然 XML Schema 和 DTD 都是用来验证 XML 的,并能大抢风头,固然有它值得称道的地方。所以先说说 DTD 的的不足和 XML Schema 的特点。

1)DTD 使用自有语法,XML Schema 本身就为 XML 件,避免了学习新的语法。

2)DTD 对数据类型支持极有限,也就 #PCDATA,而 XML Schema 可支持字符串、整数、浮点数;布尔值、时间、日期等。

3)DTD 所支持的结构定义灵活性过低,可以表示 ?(零个或一个),*(零个或多个),+(一个或多个),但对于像正则表达式的 {m,n} 无能为力;而 XML Schema 有了 minOccur 和 maxOccur 达到控制子元素出现 的次数的目的。

4)DTD 属于封闭式架构,也就是所有 XML 文件中所要用的标记与属性都必须先在 DTD 中声明才能被使用。而 XML Schema 采用开放式架构,不要求 XML 中所有的元素与属性必须先声明再使用。

5)一个 XML 的 DTD 将会作用于整份 XML 文件,而无法将 XML 文件的某部分指定另外的 DTD。而 XML Schema 可针对个别元素指定不同的 Schema,最小的切割单位可以是一个标记。

这就是我们看到应用 DTD 的 web.xml 要在最前面写上 <!DOCTYPE web-app PUBLIC ......web-app_2_3.dtd">,它作用与整份文档。

注意到应用 XML Shema 的 web.xml,Shema 是指定为 web-app 的属性,<web-app xsi:schemaLocation="......web-app_2_4.xsd">,其他元素可单独指定 XML Schema。

6)XML Schema 由于是一个 XML 文件,所以可通过 DOM 动态修改语法规则,而 DTD 做不到。除此之外,XML Schema Extension 还允许新增一些额外的信息以辅助描述数据。

7)XML Schema 使用的是命名空间,因此具有可扩展性。这一点在 spring 2.x 的配置文件中身手大显,支持自定的 XML Schema,如引入 spring-aop-2.0.xsd 和 spring-tx-2.0.xsd,分别用 <aop:config> 和 <tx:advice> 等。

XML Schema 的基础

XML Schema 虽然是由微软首先提出,也已被 W3C 接受并审查,但仍然衍生出两个标准来,MS 的和 W3C 的。微软的 XML Schema 版本称为 XDR(XML Data Reduced),Schema 扩展名为 "xml";而 W3C 的 XML Schema 版本则称为 XSD(XML Schema Definition) 或 XSDL(XML Schema Definition Language),扩展名为 "xsd"。而本人主要守在 Java 阵营,基本使用的都是 XSD,看我们的新式 web.xml 和 spring 配置文件就用的 xsd 文件,因此以 W3C 标准来介绍 XML Schema 的使用。

XML 都可以在内部或外面使用 DTD 或 Schema,但对于外部的 DTD 用的是 <!DOCTYPE> 指定,而外部的 Schema,XML 要借助于命名空间。如

<programming_team xmlns="x-schema:schema1.xml">
<programmer>Fred Samson</programmer>
</programming_team>

时间: 2024-10-07 09:32:36

XML的中阶知识巩固之XML Schema其一的相关文章

使用qt5操作xml文件,删除xml文件中的节点和修改xml文件节点的数据值

问题描述 使用qt5操作xml文件,删除xml文件中的节点和修改xml文件节点的数据值 使用qt5操作xml文件,删除xml文件中的节点和修改xml文件中节点的数据值. 那位大神知道,如果有代码就更好了. 谢谢 解决方案 QT XML文件 修改节点修改XML文件的节点属性值

详细讲解XML数据库中几个容易混淆的概念

xml|概念|数据|数据库     当开发人员谈及XML数据库时,他们往往指的是两个概念:存储XML数据的数据库,利用XML数据库的DBMS.绝大多数主要的DBMS产品允许你无需改变现有的数据库就可以集成XML数据到程序中.现在让我们讨论一下XML数据库并探讨其特性. 原始的XML数据库 一个原始的XML数据库(NXD)可以是很简单,也可以是很复杂.我这样定义一个数据库的概念:永久稳定数据的集合.在这样的定义下,一个NXD能在逻辑上存储一个XML文档.当XML:DBinitiative对一个NX

C#中如何使用 XmlReader 读取XML文件_C#教程

XmlReader通过向前读取文档并识别读取到的元素,为我们提供了一种消耗资源最少的方式来解析XML数据.很多时候我们都是利用XmlReader来对XML文件的数据有效性进行验证(使用XmlReader实例的Read()方法依次读取所有节点,以此判断是否与符合指定的模式).使用这种非缓存.只读.只向前的方式,每次读取只将很少的数据放入内存,对内存的占用量较小,对于读取内容较大的XML文件不失为一种最佳的选择. 让我们看看XmlReader类读取XML文件的步骤: 1.使用XmlReader类的C

java实现利用String类的简单方法读取xml文件中某个标签中的内容_java

1.利用String类提供的indexOf()和substring()快速的获得某个文件中的特定内容 public static void main(String[] args) { // 测试某个词出现的位置 String reqMessage = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" + "<in>" + "<head&g

Android应用中使用DOM方式解析XML格式数据的基本方法_Android

DOM比SAX更容易掌握,因为她没有涉及回调和复杂的状态管理,然而,DOM的实现常常将所有的XML节点保存在内存中,这样使的处理较大的文档效率低. XML基本的节点类型 node - DOM基本的数据类型 Element - 最主要处理的对象是Element Attr - 元素的属性 Text - 一个Element 或者Attr的实际内容 Document - 代表整个XML文档,一个Document对象通常也称为一颗DOM树   1.在src目录下新建一个android.xml <?xml

快速从一个XML文件中查找信息

在网络时代,XML文件起到了一个保存和传输数据的作用.Soap协议通过Xml交流信息,数据库通过Xml文件存取等等.那么怎样快速的从一个XML文件中取得所需的信息呢? 我们知道,JAVA的JAXP中和Microsoft.Net都有Xml分析器,Microsoft.Net是边读边分析,而JAXP是读到内存中然后才进行分析(还有一种是事件机制去读),总而言之,是不利于快速读取.基于此,Microsoft.Net 和JAXP都提供了XPATH机制,来快速定位到XML文件中所需的节点. 例如有一个XML

怎样快速从一个XML文件中查找信息

xml 在网络时代,XML文件起到了一个保存和传输数据的作用.Soap协议通过Xml交流信息,数据库通过Xml文件存取等等.那么怎样快速的从一个XML文件中取得所需的信息呢? 我们知道,JAVA的JAXP中和Microsoft.Net都有Xml分析器,Microsoft.Net是边读边分析,而JAXP是读到内存中然后才进行分析(还有一种是事件机制去读),总而言之,是不利于快速读取.基于此,Microsoft.Net 和JAXP都提供了XPATH机制,来快速定位到XML文件中所需的节点. 例如有一

XML数据库中几个容易混淆的概念

xml|概念|数据|数据库   当开发人员谈及XML数据库时,他们往往指的是两个概念:存储XML数据的数据库,利用XML数据库的DBMS.绝大多数主要的DBMS产品允许你无需改变现有的数据库就可以集成XML数据到程序中.现在让我们讨论一下XML数据库并探讨其特性. 原始的XML数据库 一个原始的XML数据库(NXD)可以是很简单,也可以是很复杂.我这样定义一个数据库的概念:永久稳定数据的集合.在这样的定义下,一个NXD能在逻辑上存储一个XML文档.当XML:DB initiative对一个NXD

InfoPath开发实战(2):获取XML文件中的数据

本节的内容: 如何在InfoPath中使用数据连接来从XML文件中获取数据 如何通过代码来修改数据连接中的XML文件路径 打开Visual Studio 2008,以"InfoPath 2007表单模板"为项目模板新建一个项目. 项目创建完后,就会看到一个空空如也的mainifest.xsf文件,这就是InfoPath表单的设计区域,我们可以使用"工具箱"和"版式"面板来设计表单. 我们先不急于设计表单,而是添加一个数据连接.为了让示例更加有趣,