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 "&ndash;">
-
<
:代表”<“符号,可以在XML中表示小于号 -
>
:代表”>“符号,可以在XML中表示大于号 -
"
:代表双引号,可以在XML中表示字符串 -
'
:代表单引号,可以在XML中表示字符串
-
-
外部实体
外部实体定义了XML文档中可以使用的局部或公共实体。它们可以在DTD中内部声明或者使用独立文件来定义外部实体。
<!ENTITY name SYSTEM "filename.dtd">
总结
DTD是XML的一部分,用于定义XML文档的格式和结构。我们可以使用DTD来定义元素、属性、实体等,同时它还可以用于重用代码减少冗余。DTD的内部声明和外部声明两种方式都很常用,具体使用方法根据实际需求选择即可。