📜  XML DTD(1)

📅  最后修改于: 2023-12-03 14:48:38.423000             🧑  作者: Mango

XML DTD介绍

什么是DTD

DTD(Document Type Definition)文档类型定义,用于定义XML文档中元素的内容和结构。如果一个XML文档预定义了DTD,那么这个文档就可以使用DTD验证器来检查文档的合法性。

DTD用于定义XML文档中可能出现的元素、属性、实体和元素之间的关系。其中,元素的定义包括元素名称、元素内容、元素属性和元素约束。

DTD定义

DTD可以定义在内部(包含在XML文档中)和外部(独立于XML文档,通过文档引用来使用)两种方式。

DTD内部定义

DTD文件可以直接定义在XML文档中,使用 <!DOCTYPE 指令来引用DTD。下面是一个简单的例子:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
    <!ELEMENT note (to,from,heading,body)>
    <!ELEMENT to (#PCDATA)>
    <!ELEMENT from (#PCDATA)>
    <!ELEMENT heading (#PCDATA)>
    <!ELEMENT body (#PCDATA)>
]>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

在上面的例子中,DTD定义了note元素必须包含to、from、heading和body四个子元素,并且to、from、heading和body元素都只包含PCDATA(纯文本)内容。

DTD外部定义

也可以将DTD定义在一个单独的文件中,通过文档引用来使用。下面是一个例子:

定义DTD的文件(note.dtd)如下:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

XML文档(note.xml)使用note.dtd定义:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

跟内部定义的DTD相比,这种方式更加灵活,可以在多个XML文档中共用同一个DTD文件。

DTD元素类型

除了可以定义元素的结构和内容,DTD还可以定义元素的类型。DTD中定义的元素类型如下:

  • EMPTY:空元素,不包含任何内容
  • ANY:任意元素,可以包含任何内容(包括其他元素)
  • #PCDATA:包含纯文本内容
  • 逗号(,):定义多个元素按特定顺序出现,如 (a,b,c) 定义了a、b、c这三个元素必须依次出现
  • 管道符(|):定义多个元素中只能出现其中一个,如 (a|b|c) 定义了a、b、c这三个元素中只能出现一个
  • 问号(?):定义元素可选,如 (a)? 定义了a元素可选,可以出现也可以不出现
  • 星号(*):定义元素可以出现任意次数,包括0次,如 (a)* 定义了a元素可以出现任意次数,也可以不出现
  • 加号(+):定义元素可以出现至少一次,如 (a)+ 定义了a元素至少出现一次
总结

DTD是XML文档的一部分,可用于定义XML文档中元素的结构、内容和类型。通过DTD可以对XML文档进行验证以确保文档的正确性。在DTD定义中,必须指定元素的名称、内容和约束等信息。DTD定义可采用内部和外部方式,灵活使用在多个XML文档中共享。通过DTD定义的元素类型可以为元素指定约束,从而保证XML文档的规范性和有效性。