教程关键词 - 加入收藏 - 网站地图 教程吧为你提供最全最好的教程!!!
当前位置:主页 > 编程入门 > XML教程 > 正文

文档类型定义(DTD)

 
在XML中,由于用户可以随意定义自己的标记,这种自由性会造成XML文档的不统一。例如在定义书籍信息的XML中,一个喜欢用<bookinfo>标记来定义自己的XML文档的根本元素,而另一个人喜欢使用<book>标记,两个人风格的不统一还表现在定义的文档层次结构也不尽相同。这样一来就会造成对同一信息有不通的XML文档描述,文档的不统一在使用上造成了很大的障碍,因此需要一种方法对XML文档信息的具体结构进行规范,这样才能保证XML处理程序的通用性。
 
   目前有两种方法对XML文档定义进行有效的规范和约束,他们是DTD(DOcument Type Defination)和XML Schema。
    DTD是一套标记的语法规则,它定义了可以在XML文档中出现的元素、子元素、属性以及这些元素出现的次序,还定义了他们如何相互嵌套以及XML文档结构的其他详细信息。DTD主要对文档中出现的元素进行规定,即元素声明。元素声明的语法格式如下:
 
    <!ELEMENT 元素名称 内容声明>
 
    "<!ELEMENT"表示元素声明的开始,“ELEMENT”关键字必须大写;“元素名称”为XML文档中元素的名称,其命名应该遵循XML中元素命名的规则;“内容声明”定义该元素所包含的具体内容。
 
1.实例——剖析DTD的语法结构
 
  下面用一个示例来说明文档类型定义的语法结构。
<!-- address.dtd -->
<!ELEMENT address  (name, street, city, state, postal-code)>
<!ELEMENT name (title? first-name, last-name)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT first-name (#PCDATA)>
<!ELEMENT last-name (#PCDATA)>
<!ELEMENT street (#PCDATA)>
<!ELEMENT  city (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT postal-code (#PCDATA)>
 
该DTD定义了XML文档中使用的所有元素,它定义了以下3个元素。
 
(1)<adress>元素包含一个<name>元素、一个<street>元素、一个<city>元素、一个<state>元素和一个<postal-code>元素,所有定义的元素必须出现,而且必须以上述顺序出现。
(2)<name>元素包含一个可选的<title>元素(问号表示title这个元素是可选的),后面跟一个<first-name>元素和一个<last-name>元素。
(3)所有其他包含文本的元素。“#PCDATA”代表已解析的字符数据;不能在这些元素中包含另一个元素。
 
      尽管DTD相当简单,但他清楚地说明了什么样的元素组合是合乎规则的:<postal-code>元素在<state>元素之前的地址文档是不合乎规则的,没有<last-name> 元素的文档也不合乎规则。
DTD中有几个符号用于指出某元素在XML文档中可能会出现多少次(或是否出现)。下面是一些示例及其含义。
 
   (1)示例1
   <!ELEMENT address (name, city, state)>
   上述语句表明<address>元素必须包含符合上述次序的一个<name>元素,一个<city>元素和一个<state>元素,所有的元素都是必需的。
(2)示例2
<!ELEMENT  name (title?, first-name, last-name)>
上述语句表明<name>元素包含一个可选的<title>元素,后面必须跟有一个<first-name>元素和一个<last-name>元素。问号表示这一项是可选的,它表明<title>元素可以出现一次或根本不出现。
(3)示例3
<!ELEMENT addressbook (address+)>
  上述语句表明<addressbook>元素包含一个或多个<adress>元素。加号表示这一项必须至少出现一次,但可出现任意次。
(4)示例4
<!ELEMENT private-addresses (address*)>
   上述语句表明<private-address>元素可以包含零个或多个<adress>元素。星号表示这一项可以出现任意次,包括零次。
(5)示例5
<!ELEMENT name(title?, first-name, (middle-initial | middle-name)?, last-name)>
上述语句表明<name>元素包含一个可选的<title>元素,后面跟有一个<first-name>元素,随后可能跟一个<middle-initial>元素或<middle-name>元素,然后跟有一个<last-name>元素。竖线符号表示选择列表,这表明<middle-initial>元素和<middle-name>元素都是可选的,但是只能从列表中选择一项。
 
DTD元素内容的类型有如下4种。
 
(1)EMPTY。EMPTY关键词表示没有任何内容,元素为空,仅可以使用属性来表示此参数,例如:
<!ELEMENT chapter EMPTY>
(2)ANY。ANY关键词表示元素可以使用任何的内容类型,如字符串、CDATA等。+
(3)子元素内容。子元素内容关键词规定元素只能包含子元素,此时的内容声明应该用圆括号括起来。
(4)混合内容。混合内容允许元素内容包含两种情形:一种是包含字符串数据,另一种允许同时包含字符串数据和子元素。
 
只包含字符串数据的格式定义如下:
  <!ELEMENT 元素名称 (#PCDATA)>
同时包含字符数据和子元素的格式定义如下:
<!ELEMENT 元素名称 (#PCDATA| 子元素一| 子元素二...)>

上一篇:XML属性
下一篇:DTD的引入
推荐教程