单独文件的 DTD
DTD 的定义内容也可以保存在单独的文件中,称为 DTD 文件,一般这类文件的扩展名为 DTD。
例如,上面的例子也可以保存为两个文件
DTD 文件 booklist.dtd
XML 文件 booklist.xml
1234
SYSTEM 后面为 DTD 文件的绝对或者相对路径。
公共的 DTD
有一些公共定义的 DTD 可以直接使用,例如,在 xml 诞生之后,W3C 定义了基于 XML的 xHTML 规范,对 HTML 的书写进行了更为严格的限制,这个限制有两个规范组成。
Strict 为严格的规范 Transitional 为过渡规范
这两个规范都采用 DTD 进行定义。 在使用中,在需要进行检查的网页前声明 DTD 的定义,在 ASP.NET 中,每一个 .ASXP 文件的开头部分都为
上面的声明中,PUBLIC 表示公共定义,后面的 -//W3C//DTD XHTML 1.0 Transitional//EN 为定义的名称。最后一部分为定义的网址。
对于 IE 浏览器,当网页中包含这个定义的时候,工作在标准模式,浏览器的行为会尽可能靠近 W3C 的规范。没有这个定义的时候,工作在怪异模式。也就是 IE 的默认工作方式中。可能与 W3C 的定义不一致。所以我们的网页一定要在开头加上这个定义。
Xml Schema
Xml Schema 为 W3C 专门为 XML 定义的 XML 架构定义语言,提供了比 DTD 更为强大的定义能力。新的 XML 架构定义都已经采用了 Xml Schema 为定义语言。
如何写一个最简单的XML Schema文档呢?
定义简单的 Schema
hello.xml
-------------------
(一个根元素:greeting;且这个元素不含属性,无子元素,内容是字符串。)
hello.xsd
----------
XML Schema文档后缀名是.xsd,完全符合XML语法,根元素是schema,命名空间xmlns:xsd=\,用元素
XML 的命名空间
Xmlns 为 Xml namespace 的简写,即 XML 命名空间。在 XML 中为了保证命名空间的唯一性,使用基于域名的命名空间命名方式。上面的 http://www.w3.org/2001/XMLSchema 即为命名空间的名称,虽然非常类似于网址,但是实际上在此处表示命名空间的名称。
由于命名空间比较长,所以在 XMLSchema 中经常使用命名空间的简写,xmlns:xsd 中的 xsd 就是这个命名空间的简写形式。
简单类型和复杂类型
在 XMLSchema 中,定义的核心概念就是简单类型和复杂类型 简单类型就是既不包含子元素,也不包含属性的类型。 复杂类型是可能包含子元素,或者可能包含属性的类型
假设实例文档是如下的:
customer.xml -----------
No.237, Road Waitan, Shanghai
由于 customer 包含子元素 name 和 address,所以为复杂类型。
name 和 address 既没有包含子元素,又没有包含属性,所以为简单类型。
复杂类型必须使用 complexType 进行说明。并声明其中包含的子元素或者属性。
则可以写出以下的XML Schema文档: customer.xsd ----------------
1:
2:
6:
实例文档customer.xml中,
sequence表示子元素依次出现的顺序。
type 属性用来声明简单元素的类型,在 XMLSchema 中,预定义了多种基本的数据类型,例如:字符串类型xs:string,整数类型xs:integer,布尔类型 xs:Boolean等等。在 XML中没有字符类型。
如果包含更复杂的子类型,则反复使用上面的原则。
这次我们给出一个更加复杂一些的文档:
address.xml ---------------
为此,我们需要一个更加复杂一点的Schema文档:
address.xsd -----------------
1:
2: 4: 7: 23:
通过 ref 简化复杂的 XMLSchema
不过,我们还可以采用ref元素来重新编写这个Schema文档: address2.xsd
----------------------
1:
2: 4: 7: 13: 16: 23:
使用ref元素可以直接将其指向另一个模块,使文档更加具有可读性。