DTD的作用
XML文档是一种元标记语言,即一种定义标记语言的语言。在XML中可以创建新的标记语言,这些新的标记语言(也叫标记集)要通过文档类型定义(DocumentType Definitions,DTD)来定义。DTD文档是这些新的标记语言的法律性文档。如果XML文档的语法符,DTD的定义和规定,那么就称为一个合法的XML文档,否则就是非法的XML文档。合法的XML文档在实际应用中的地位很重要,因为只有合法的XML文档才能被应用软件有效地处理。
DTD定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。其作用主要表现在以下几个方面。
(1) 使用DTD可以提供一种统一的格式。XML的可扩展性为文档的作者提供了很高的灵活性,可有时候需要的是统一,要求某一类文档具有相同的结构。
(2) 使用DTD可以保证数据交流和共享的顺利进行。
(3) DTD使用户能够不依赖具体的数据就知道文档的逻辑结构。在没有XML文档的时候,也可以根据DTD为XML文档编写样式单,编写处理程序,这样可以有效地提高工作效率。
(4) 使用DTD可以验证数据的有效性。DTD对文档的逻辑结构进行了约束,这种约束可以比较宽松,也可以十分严格。可以根据DTD检查数据,以验证其是否符合规定和要求,这可以保证数据的正确和有效。
“#PCDATA”(Parsed Character Data)表示标记的内容是可解析文本,所谓的可解析文本就是非标记文本。用“#PCDATA”规范了的元素不能再包含子元素。例如How do you do是不包含标记的文本,而How do you <list>do</list>就不是可解析的数据类型,因为其中包含有标记<list>和</list>。另外DTD文档中不同元素定义的次序没有先后关系,但文档的语法对大小写敏感。
“#PCDATA”的声明格式:
<!ELEMENTElement_Name (#PCDATA )>
在DTD中,属性的声明格式:
<!ATTLIST Element_name Attribute_name TYPEDefault_value>
其中,<!ATTLIST>为属性声明的关键字,Element_name为元素名,Attribute_name为属性名,TYPE是属性类型,Default_value为没有设定属性值时的默认值。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookinfo[
<!--
<!ELEMENT bookinfo ((author+,title)|(title,author+),publish) ><!--+(表示一个或多个) (a,b)|(b,a)表示a和b的位置任意 -->
<!ELEMENT bookinfo ((author|title)*,publish) >*<表示“有多个”> ?<表示0个或者多个>
<!ELEMENT bookinfo ANY >
-->
<!ELEMENT bookinfo (title,author+,publish,price)>
<!ELEMENT title (#PCDATA) >
<!ELEMENT publish (publisher,ISBN,pubdate)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST author id ID #REQUIRED >
<!ATTLIST publish aa (文艺|自然科学) "文艺">
]>
<bookinfo>
<title>计算机导论</title>
<author id="A001">丁跃潮</author>
<author id="A002">张三</author>
<publish aa="自然科学">
<publisher>高等教育出版社</publisher>
<ISBN>7-04-014768-8</ISBN>
<pubdate>2004.6</pubdate>
</publish>
<price>19.7</price>
</bookinfo>