1. 实体引用(Entity Reference):
DTD 中的实体引用允许将文本片段定义为实体,然后在其他地方引用这些实体,以提高文档的可读性和可维护性。
<!ENTITY % commonEntities SYSTEM "commonEntities.dtd">
%commonEntities;
<!ELEMENT book (title, author)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
在上述例子中,commonEntities.dtd 可以包含一组通用的实体定义,而 %commonEntities; 则会在当前 DTD 中引入这些实体。
2. 参数实体(Parameter Entity):
参数实体是用于在 DTD 中定义可重用部分的一种机制,与一般实体引用不同,参数实体以 % 开头。
<!ENTITY % commonElements "title, author">
<!ELEMENT book (%commonElements;)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
在上述例子中,%commonElements; 包含了一组通用的元素声明,然后在 <!ELEMENT book ...> 中使用了这个参数实体。
3. 外部 DTD 文件:
可以将 DTD 规范保存在外部文件中,然后通过 SYSTEM 关键字引用这些外部 DTD 文件。
<!DOCTYPE bookstore SYSTEM "bookstore.dtd">
在上述例子中,bookstore.dtd 包含了完整的 DTD 规范,而当前 XML 文档通过 DOCTYPE 声明引用了这个外部 DTD 文件。
4. 模块化和复用:
通过实体引用和参数实体,可以将 DTD 分割成小的、可重用的部分,以提高代码的模块化程度和可维护性。这样,可以在多个文档中重复使用相同的模块。
5. 示例:
考虑下面的例子,分别定义了 commonEntities.dtd 和 bookstore.dtd:
commonEntities.dtd:
<!ENTITY % commonElements "title, author">
<!ENTITY % commonAttributes "category CDATA #IMPLIED">
bookstore.dtd:
<!DOCTYPE bookstore SYSTEM "commonEntities.dtd">
%commonEntities;
<!ELEMENT bookstore (book+)>
<!ELEMENT book (%commonElements;)>
<!ATTLIST book (%commonAttributes;)>
在上述例子中,bookstore.dtd 引用了 commonEntities.dtd,并在定义 book 元素时使用了 %commonElements; 和 %commonAttributes;,实现了 DTD 的模块化构建。
通过这样的模块化构建方式,可以更方便地管理和维护 DTD 规范,同时提高了规范的可重用性。
转载请注明出处:http://www.pingtaimeng.com/article/detail/12192/XML