1.我们经常在项目中看到一些xml配置文件,它们都有着固定的标签写法,那么这些规范是怎么定义的呢,一种方式就是使用dtd来定义。文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
图上为mybatis配置文件xml中引入的规范,文件中用到的标签以及各式都会遵循事先在dtd中写好的模板。
2.dtd申明在xml内部,下图在eclipse工程中进行演示
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT student (name,age,sex,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<student>
<name>abc</name>
<age>10</age>
<sex>男</sex>
<phone>123</phone>
</student>
类型
PCDATA 的意思是被解析的字符数据(parsed character data)。
被申明为此类型的标签内部包含的标签也会被解析识别
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
元素申明
<!ELEMENT 元素名称 类别>
<!ELEMENT 元素名称 (元素内容)>
<!ELEMENT 元素名称 EMPTY> //空元素
<!ELEMENT 元素名称 ANY> //带有任何内容的元素
<!ELEMENT 元素名称 (#PCDATA)> //只有 PCDATA 的元素
//带有子元素(序列)的元素
<!ELEMENT 元素名称 (子元素名称 1)>
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>
使用正则表达式
//声明只出现一次的元素
<!ELEMENT 元素名称 (子元素名称)>
//声明最少出现一次的元素
<!ELEMENT 元素名称 (子元素名称+)>
//声明出现零次或多次的元素
<!ELEMENT 元素名称 (子元素名称*)>
//声明出现零次或一次的元素
<!ELEMENT 元素名称 (子元素名称?)>
//声明“非.../既...”类型的内容
<!ELEMENT note (to,from,header,(message|body))>
声明属性
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">
合法的 XML:
<square width="100" />
3.引入外部dtd
classroom.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT classroom (grade,students)>
<!ATTLIST classroom id ID #REQUIRED>
<!ELEMENT grade (#PCDATA)>
<!ELEMENT students (student)>
<!ELEMENT student (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT age (#PCDATA)>
classroom.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE classroom SYSTEM "classroom.dtd">
<classroom id="c1">
<grade>2011</grade>
<students>
<student>
<id></id>
<name></name>
<age></age>
</student>
</students>
</classroom>