📅  最后修改于: 2023-12-03 14:48:38.423000             🧑  作者: Mango
DTD(Document Type Definition)文档类型定义,用于定义XML文档中元素的内容和结构。如果一个XML文档预定义了DTD,那么这个文档就可以使用DTD验证器来检查文档的合法性。
DTD用于定义XML文档中可能出现的元素、属性、实体和元素之间的关系。其中,元素的定义包括元素名称、元素内容、元素属性和元素约束。
DTD可以定义在内部(包含在XML文档中)和外部(独立于XML文档,通过文档引用来使用)两种方式。
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的文件(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中定义的元素类型如下:
(a,b,c)
定义了a、b、c这三个元素必须依次出现(a|b|c)
定义了a、b、c这三个元素中只能出现一个(a)?
定义了a元素可选,可以出现也可以不出现(a)*
定义了a元素可以出现任意次数,也可以不出现(a)+
定义了a元素至少出现一次DTD是XML文档的一部分,可用于定义XML文档中元素的结构、内容和类型。通过DTD可以对XML文档进行验证以确保文档的正确性。在DTD定义中,必须指定元素的名称、内容和约束等信息。DTD定义可采用内部和外部方式,灵活使用在多个XML文档中共享。通过DTD定义的元素类型可以为元素指定约束,从而保证XML文档的规范性和有效性。