首页 > 代码库 > XML(二)
XML(二)
前面简单介绍了如何定义一个XML.想想如果没有一个规范来对XML文档进行一个格式等的限制,那么一个XML文档可能只能被定义这个XML文档的人读懂.DTD就是一种对XML文档约束的模式语言.
DTD介绍:
DTD,Document Type Definition.是文本格式文件,后缀名会.dtd.一个DTD文件中可以包含元素与元素之间的关系的定义,元素的属性定义,以及实体和符号的定义.通过比较DTD文件与XML文档,就可以判断XML文档是否符合某种约束规范,以及其中的元素和标签使用是否正确.
DTD的定义:
.dtd文件是一个非常简单的文件,<!ELEMENT 元素名称 使用规则>为其通用的语法规则.它定义每一个元素.例如:<!ELEMENT 书架(书名,作者,售价)>中"书架"为元素名称,"(书名,作者,售价)"为使用规则.使用规则定义了元素中包含的组成成分,以及每种组成成分出现的次数,次序.例如下面这个DTD文件:
1 <!ELEMENT 书架 (书+)>2 <!ELEMENT 书(书名,作者,售价)>3 <!ELEMENT 书名(#PCDATA)>4 <!ELEMENT 售价(#PCDATA)>5 <!ELEMENT 作者(#PCDATA)>
#PCDATA表示元素中嵌套的内容为纯文本字符串,(书名,作者,售价)用户表示元素要嵌套的子元素,并且这些子元素要按顺序依次出现.(书+)中+表示他修饰的成分必须出现一次或者多次.
外部引入DTD文件:
DOCTYPE的声明语句要紧跟在XML文档声明语句之后.有两种格式:
1.<!DOCTYPE 文档类型名称 SYSTEM "DTD文件的URL">
2.<!DOCTYPE 文档类型名称 PUBLIC "DTD名称" "DTD文件的URL">
文档类型名称由XML文档的编写者自己定义.一般是XML文档的根元素名称.关键字SYSTEM表明XML文档所遵循的是一个本地的DTD文件.PUBLIC表明XML文档遵循的是一个权威机构制定的DTD文件.
例子演示
book.xml文件如下:
1 <?xml version="1.0" encoding="gb2312" ?> 2 <!-- 3 导入css样式, 4 --> 5 <?xml-stylesheet type="text/css" href="http://www.mamicode.com/book.css"?> 6 7 <!-- 8 在XML文件中导入外部的DTD文件.DTD(Document Type Definition) 9 -->10 <!DOCTYPE book SYSTEM "book.dtd">11 12 <!--13 在XML文件中直接定义DTD,如下14 15 <!DOCTYPE 书架[16 <!ELEMENT 书架 (书+)>17 <!ELEMENT 书(书名,作者,售价)>18 <!ELEMENT 书名(#PCDATA)>19 <!ELEMENT 作者(#PCDATA)>20 <!ELEMENT 售价(#PCDATA)>21 ]>22 -->23 24 <书架>25 <书>26 <书名>基于J2EE的AJAX宝典</书名>27 <作者>李刚</作者>28 <售价>58元</售价>29 </书>30 <书>31 <书名>JAVA_WEB开发核心内幕</书名>32 <作者>李大刚</作者>33 <售价>60元</售价>34 </书>35 <书>36 <书名>锋利的JQUERY</书名>37 <作者>李小刚</作者>38 <售价>70元</售价>39 </书>40 </书架>
而在与book.xml文件的同一目录中定义book.dtd,如下:
1 <!ELEMENT 书架 (书+)>2 <!ELEMENT 书(书名,作者,售价)>3 <!ELEMENT 书名(#PCDATA)>4 <!ELEMENT 售价(#PCDATA)>5 <!ELEMENT 作者(#PCDATA)>
之后在浏览器中可以看到效果如下:
在XML文档内部直接嵌入DTD
可以在XML文档里直接嵌入DTD.格式如下:<!DOCTYPE 根元素名[DTD定义语句]>.在上面的代码中也有演示.
在XML文档内部引入CSS
使用<?xml-stylesheet type="text/css" href="" ?>可以将指定的CSS样式导入.由于CSS不支持中文命名,所以在用css进行美化时,要将XML文档中的元素命名为英文.
例如person.xml如下:
1 <?xml version="1.0" encoding="gb2312" ?>2 <?xml-stylesheet type="text/css" href="http://www.mamicode.com/books.css" ?>3 4 <person>5 <name>张三</name>6 </person>
person.css如下:
<?xml version="1.0" encoding="gb2312"?>name{ color:red; font-size:20px; font-family:"黑体"}