我们的文档将信函元素类型或者格式元素类型作为它们的根元素。不同的地方在于缺省的空白大小和是否生成信头。下面就是定义过程:
<!ELEMENT letter ANY><!ELEMENT form ANY><!ATTLIST
form
dest CDATA #IMPLIED
top CDATA "0"
bottom CDATA "0"
left CDATA "0"
right CDATA "0"
logo_x CDATA "0"
logo_y CDATA "0"
orient ( land | port ) "port">
要注意的是只有格式元素允许我们指定空白大小、起始位置和标识的位置。这些值对于信函来说是固定的。回头再看一下,我们本可以将固定值指定为DTD的一部分。这是个将所有缺省值归档到一个地方的好方法,它让分析程序可以为你做更多的事:
<!ATTLIST letter
top CDATA #FIXED "12"
bottom CDATA #FIXED "6"
left CDATA #FIXED "15"
right CDATA #FIXED "15"
logo_x CDATA #FIXED "6.25"
logo_y CDATA #FIXED "2"
orient CDATA #FIXED "port">
#FIXED所指定的值表示一个给定的属性必须具有这些指定值。一般来说,文档不会提供这些属性,但是会接受缺省的值。
我们下面将要考虑的元素是被严格用来格式化信函文本的。这包括黑体的<b>,斜体的<i>和固定字体的<tt>。以下是对元素的定义:
<!ELEMENT i ANY>
<!ELEMENT b ANY>
<!ELEMENT tt ANY>
要注意这些标记符使用的名字和语义和在HTML中的相同,但是没有任何属性;这是从传统的编程借用过来的好的惯例。如果现存的语法能满足你的需要,不要犹豫,“偷”过来,甚至在你认为它能做得更好时。例如,许多人会争论<tt>的确不是个安在“定长字体”(即使你知道“tt”代表“打字机(typewriter)”头上的好名字。这不是关键。它是个好名字的原因是一种广为人知的语言在使用它。