DTD 教程


DTD(Document Type Definition)是XML文档类型定义,是一种XML的语法定义方式,用于定义XML文档的格式,其可以定义XML元素的名称、属性、元素类型和实体等。

DTD使用方法

DTD可以使用内部声明和外部声明两种方法进行声明。

内部声明

内部DTD声明直接在XML文档中进行,DTD放在XML文件的头部。下面是一个内部DTD声明的例子:

<?xml version="1.0"?>
<!DOCTYPE catalog [
<!ELEMENT catalog (book)*>
<!ELEMENT book (title, author, price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST book
          id CDATA #IMPLIED>
]>
<catalog>
  <book id="bk101">
    <title>The Great Gatsby<</title>
    <author>F. Scott Fitzgerald</author>
    <price>19.99</price>
  </book>
  <book id="bk102">
    <title>To Kill a Mockingbird</title>
    <author>Harper Lee</author>
    <price>29.99</price>
  </book>
</catalog>

上述例子中,DTD部分包含了对XML元素的定义,其中:

  • 定义了元素的名字和组成
  • 定义了属性的名字和类型

外部声明

外部DTD声明则是在XML文件中引用DTD文件。在一个XML文档中,我们可以使用DOCTYPE来引用DTD文件,像这样:

<?xml version="1.0"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
<catalog>
  <book id="bk101">
    <title>The Great Gatsby</title>
    <author>F. Scott Fitzgerald</author>
    <price>19.99</price>
  </book>
  <book id="bk102">
    <title>To Kill a Mockingbird</title>
    <author>Harper Lee</author>
    <price>29.99</price>
  </book>
</catalog>

在上述XML文档中,<!DOCTYPE>声明指向了外部DTD文档catalog.dtd

DTD语法

DTD的语法规则如下:

  • <!DOCTYPE>:用于定义文档类型及其名称和格式

    例如:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    
  • <!ELEMENT>:用于定义元素及其内容的结构

    例如:

    <!ELEMENT name (#PCDATA)>
    
  • <!ATTLIST>:用于定义元素属性及其值的结构

    例如:

    <!ATTLIST employee id ID #REQUIRED>
    
  • <?xml version="1.0"?>:用于指定XML文档使用的XML版本

    例如:

    <?xml version="1.0"?>
    
  • <!-- ... -->:用于添加注释

    例如:

    <!-- This is a comment -->
    

DTD元素类型

DTD中的元素类型定义了我们可以在XML文档中使用哪些元素以及每个元素所包含的内容。

  • EMPTY:代表元素为空

    例如:

    <!ELEMENT br EMPTY>
    
  • ANY:代表元素包含任何内容

    例如:

    <!ELEMENT body ANY>
    
  • (#PCDATA):代表元素只能包含文本数据

    例如:

    <!ELEMENT name (#PCDATA)>
    
  • (element1 | element2):代表元素可以包含element1或element2其中一种元素

    例如:

    <!ELEMENT choice (yes | no)>
    
  • (element1, element2):代表元素必须包含element1和element2两种元素

    例如:

    <!ELEMENT book (title, author, price)>
    

DTD实体

DTD实体可以在XML文档中定义常量和实现代码的重用。DTD中有两种实体:内置实体和外部实体。

  • 内置实体

    内置实体是XML语言中预定义的实体,分为五种:

    • &:代表"&“符号,可以用来避免特殊字符的语法冲突

      例如:

      <!ENTITY ndash "&amp;ndash;">
      
    • <:代表”<“符号,可以在XML中表示小于号

    • >:代表”>“符号,可以在XML中表示大于号

    • ":代表双引号,可以在XML中表示字符串

    • ':代表单引号,可以在XML中表示字符串

  • 外部实体

    外部实体定义了XML文档中可以使用的局部或公共实体。它们可以在DTD中内部声明或者使用独立文件来定义外部实体。

    <!ENTITY name SYSTEM "filename.dtd">
    

总结

DTD是XML的一部分,用于定义XML文档的格式和结构。我们可以使用DTD来定义元素、属性、实体等,同时它还可以用于重用代码减少冗余。DTD的内部声明和外部声明两种方式都很常用,具体使用方法根据实际需求选择即可。