XML技术里,可以编写一个文档来约束另一个XML文档的书写规范,这称之为XML约束。
需要这个XML约束技术,因为框架的作者一般要用XML配置文件规定XML的书写规范,否则可能影响程序运行。
常用的约束技术有两个:
XML DTD
XML Schema
一、DTD
DTD(Document Type Definition,文档类型定义)
比如,在一个XML文档之前的文档声明里有这样的语句:
<!DOCTYPE 书架 SYSTEM "book.dtd">
这里规定了文档类型定义来自名为book.dtd的文件。
假设book.dtd:
<!ELEMENT 书架(书+)>
<!ELEMENT 书(书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)>
这里面ELEMENT(元素/标签)规定了一个标签叫书架的标签,里面可以放一本或多本书,所以是(书+),书里面可以放(书名、作者、售价),PCDATA意思是parse character data,可解析的字符,即是字符串,也就是规定了这个书名、作者、售价标签里面的元素只能是字符串了。
因此在实际的一个XML文档里:
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>java</书名>
<作者>哈哈</作者>
<售价>20</售价>
</书>
</书架>
这样写就是符合了book.dtd的规定。
二、DTD校验
但是如果不按照book.dtd的规定,多写进其他元素,用浏览器也会正常打开,也就是说那句规定DOCTYPE是自己定义的某个文件的声明语句,被忽视了。
那么如果我们想要检查XML文档是不是正确按照固定书写了,怎么办?
可以编程来进行校验,IE5以上浏览器内置了XML解析工具,Microsoft.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。(几乎不用了,因为太麻烦)
我们在用eclipse进行开发的时候,就可以对XML进行DTD校验,把dtd文件和XML文件都放到workspace里,如果不符合规定,本身就会报错。
三、编写DTD约束(写框架时用)
一般情况下,是不会用到编写DTD的,只有在自己写一个框架的时候才会需要约束其他XML文档的内容。(这部分之后再看,在方立勋的web教程day2-3的4-5视频)