在 DTD(Document Type Definition)中,可以通过模块化的方式组织和构建规范,以便更容易维护和复用。以下是一些关于 DTD 模块化构建的概念和技术:

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