写XML文档,必须学会自定义标记。因为XML文档没有现成的标记给你使用,必须自己定义一套属于自己的标记。你自己定义的标记,必须声明使用方法。XML文档通过什么办法实现用户自己定义标记?使用DTD的方法,来自己定义标记。
DTD(docment type definition)英文意思是文档类型定义。它可以是一段代码,也可以是一个文件。单独写一个DTD文档,可以大家共享这个DTD中自定义的标记;如果不喜欢共享,也可以干脆把DTD文档内容直接写入XML文档中,不再另外编写DTD文档。
如果单独写一个DTD文档,这个文档就是XML文档的依赖文件。必须在XML文档中声明所依赖的DTD文档名字和位置。此项文章第一篇已经举例说明了。本篇主要讲DTD一些实用部分。
一.DTD文档在XML文档中如何声明
我们举一个网上的XML文档例子进行说明。XML文件名字note.xml
<?XML version=“1.0”encoding=“UTF-8”?>
<!DOCTYPE note SYSTM “note.dtd”>
<note>
<to>张三</to>
<from>李四</from>
<heading>通知</heading>
<body>下周一开会</body>
</note>
这里第二句是DTD文件标记的特有格式。实用“<!>”标记,而没有使用XML文档常用的“<??>”标记,或“< />”标记。他们区别明显。
“<!>”标记,属性值不用等号;“<??>”和“< />”标记,属性值需要使用等号。
二.DTD文档格式举例
我们就直接编写一个给note.xml文档做依赖文件的DTD文档。名字note.dtd
<!DOCTYPEnote [
<!ELEMENT note(to,from,heading,body)>
<!ELEMENT to(#PCDATA)>
<!ELEMENT from(#PCDATA)>
<!ELEMENT heading(#PCDATA)>
<!ELEMENT body(#PCDATA)>
]>
这个文件非常清晰。涉及两个命令:DOCTYPE和ELEMENT还有一个数据类型PCDATA。这里我们简单说明。
DOCTYPE:英文document type的缩写,翻译为文档类型。
ELEMENT:英文element 翻译为元素。
PCDATA:英文parsed character data的缩写,翻译为语法分析字符数据。
文件第一句:“<!DOCTYPE note[ ]>”声明XML文档中根标记为 note 并且按DTD文档要求,把所有你自己定义的标记写在中括号内。开始标记为“<!DOCTYPE note [”结束标记为“]>”
文件第二句:“<!ELEMENT note(to,from,heading,body)>”表明在note这个根标记下有四个自定义标记,分别用写在括号里,用逗号分隔。开始标记为“<!ELEMENT”。结束标记为“>”。 note为自己定义的根元素名,括号内为note根元素下的子元素序列,如:to,from,heading,body。
文件第三句:“<!ELEMENT to(#PCDATA)>”完全与第二句的命令名,开始标记、结束标记一样。to为定义的子元素标记,括号内#PCDATA为标记内使用的数据类型。
文件第四句以下与第三句相同,恕不赘述。编写DTD文档有一个规矩:没有在DTD文档中声明的自定义标记都被禁止,同名的标记只能声明一次。违反这两条,为不合章法,XML文档将不能被解读。
北荒客
2020.2.24