一、DTD?
(1)DTD的例子
<?xml version ="1.0" ?>
<!DOCTYPE 员工[
<!ELEMENT 员工 (姓名,性别,出生日期)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 性别 (#PCDATA)>
<!ELEMENT 出生日期 (#PCDATA)>
]>
<员工>
<姓名>李亮</姓名>
<性别>男</性别>
<出生日期>1978.2.5</出生日期>
</员工>
(2)为什么要用到DTD?
- 有了DTD,每个XML文件可以携带一个自身格式的描述。
- 有了DTD,不同组织的人可以使用一个通用DTD用来交换数据。
- 应用程序可以使用一个标准DTD校验从外部世界接受来的XML数据是否有效。
- 可以使用DTD校验自己的XML数据。
(3)DTD检查的内容包括有?
- 检查XML文档中所有的标记是否相符;
- 是否还包含有其他未定义的子标记等;
- 并对各个标记的属性做检查,检查这些属性是否与DTD中的定义相符。
二、XML Schema(n.纲要)?
(1)Schema基本思想就是为XML文档制定一种模式。
从本质上说,DTD与XML Schema的作用是相同的,它们以各自不同的方式来帮助XML的开发者来描述XML文档的结构和数据,都用于XML文档的有效性验证。
(2)Schema与DTD的关系
- Schema与DTD的作用相同,它们各自以不同的方式来描述XML文档结构,都用于文档验证。
- Schema囊括了DTD文件所能实现的全部功能,同时它也是一个完全规范的XML文档。Schema正在逐步取代DTD成为验证XML文档合法性的新标准。
(3)Schema与DTD的比较
- DTD使用EBNF语法,Schema基于XML语法。Schema可以像其他XML文档一样被解析和处理;
- DTD描述的是XML文件的结构,而非元素内容,因此DTD不能进行数据有效性检查;例如:<price>文字</price>;
- Schema大大扩充了数据类型,可以自定义数据类型;
- Schema提供一个可扩充的内容模式,而DTD扩展性相对较差;
- Schema可对整个XML文档或文档局部进行验证,而DTD缺乏这种灵活性;
- Schema支持名称空间,DTD不支持命名空间。
- XML Schema文档本身就是XML文档,因此遵守XML的语法规则;
- XML Schema是用一套预先规定的XML元素和属性创建的
(4)在XML Schema需要完成的任务:
- 定义可以出现在文档中的元素;
- 定义可以出现在文档中的属性;
- 定义元素下的子元素及子元素的顺序、数量;
- 定义元素和属性的数据类型;
(5)XML Schema的两种模式
XDR:
- Microsoft版本的XML schema叫做XDR(XML Data Reduced),它基于XML标准提议中的简化集合,XDR是一个专有规范,但它被相当广泛的采用。
XSD:
- W3C的XML Schema叫XSD(XML Schema Definition Language),它是一个比XDR更广泛的规范,并且它有不可否认的非专有的优点。
三、Schema命名空间?
(1)背景问题:
当我们在一个XML文档中使用他人的或者多个schema文件,就会出现这样的矛盾:因为XML中标识都是自己创建的,在不同的schema文件中,标识名可能相同但表示的含义不同,这就可能引起数据混乱。
例如:在一个文档<table>wood table</table>中
<table>表示桌子
而在另一个文档<table>namelist</table>中
<table>表示表格
如果我需要同时处理这两个文档,就会发生名字冲突。
(2)定义:
- XML命名空间是XML解决元素多义性和名字冲突问题的方案。
- W3C组织的推荐用书对XML命名空间的解释是:“XML命名空间是命名的汇集,它由URI(统一资源标识)确定,在XML文件中作为元素标识和属性名使用”。
- 命名空间是名称上相关的一组名称的汇集,在同一空间中每一个名称都必须唯一。
- 命名空间表示了名称的来源和使用范围。通过命名空间可以区分来自不同的XML应用但具有相同名称的标识,可以把来自某种XML应用的相关元素和属性集合在一起,以方便软件识别和处理。
(3)命名空间的声明:
- namespaces通过给标识名称加一个URL定位的方法来区别这些名称相同的标识。
- 命名空间一般用属性xmlns来声明,声明的语法如下:
- xmlns:命名空间属性名,声明命名空间必需的属性。
- prefix:命名空间的前缀,它的值不能为XML。在引用此命名空间中的名称时,需要在名称前加″prefix:″。
- URI:统一资源标示符,一个标识网络资源的字符串,包括URL统一资源定位符,和URN通用资源名字。
<?xml version="1.0"?>
<xs:schema xmlns(属性名):xs(前缀)="http://www.w3.org/2001/XMLSchema(统一资源定位符)">
<!--元素声明部分和属性声明部分-->
</xs:schema>
(4)命名空间的引用:
引用此名空间中的元素、属性的方法:
前缀名:元素名 或 前缀名:属性名
声明时若前缀名省略,则声明的是缺省的空间,引用缺省名空间中的元素、属性时可不加前缀名;缺省的命名空间的声明语法格式为:
<元素名 xmlns="URI">
<?xml version="1.0"?>
<xs(前缀):schema(元素名) xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!--元素声明部分和属性声明部分-->
</xs:schema>
(5)例子:
<?xml version="1.0"?>
<nsElement xmlns="http://www.w3.org"(在根元素处定义名空间属性
)
xmlns:old="http://zhjnc.edu.cn"
xmlns:new="http://lingnan.edu.cn">
<myelement>
<aa>(使用缺省名空间)
this is element use default namespace prefix
</aa>
<old:aa>(使用指定名空间)
this is element use old namespace prefix
</old:aa>(使用指定名空间)
<new:aa>(使用指定名空间)
this is element use new namespace prefix
</new:aa>
</myelement>
</nsElement>
(6)XML Schema总结:
问:XML命名空间设计的目的是什么?
答:解决XML中元素多义性和名字冲突问题的一种方案
问:命名空间的声明中<elementName xmlns:prefix=′URL′>, prefix是指什么?
答:prefix是指命名空间的前缀
问:XML默认的xs前缀命名空间的URL是什么?
答:http://www.w3.org/2001/XMLSchema