diff --git a/doc/ZConfig/schema.dtd b/doc/ZConfig/schema.dtd
new file mode 100644
index 0000000000000000000000000000000000000000..b9c26ca2ecdb31f81da55f4edb291c20df4ecb87
--- /dev/null
+++ b/doc/ZConfig/schema.dtd
@@ -0,0 +1,65 @@
+<!-- DTD for ZConfig schema documents. -->
+
+<!ELEMENT schema (description?, metadefault?, example?,
+                  import*,
+                  (sectiontype | sectiongroup)*,
+                  (section | key | multisection | multikey)*)>
+<!ATTLIST schema
+          prefix     NMTOKEN  #IMPLIED
+          handler    NMTOKEN  #IMPLIED
+          keytype    NMTOKEN  #IMPLIED
+          datatype   NMTOKEN  #IMPLIED>
+
+<!ELEMENT import EMPTY>
+<!ATTLIST import
+          src        CDATA    #REQUIRED>
+
+<!ELEMENT description (#PCDATA)*>
+<!ELEMENT metadefault (#PCDATA)*>
+<!ELEMENT example     (#PCDATA)*>
+
+<!ELEMENT key (description?, metadefault?, example?)>
+<!ATTLIST key
+          name       NMTOKEN  #REQUIRED
+          attribute  NMTOKEN  #IMPLIED
+          datatype   NMTOKEN  #IMPLIED
+          handler    NMTOKEN  #IMPLIED
+          required   (yes|no) "no"
+          default    CDATA    #IMPLIED>
+
+<!ELEMENT multikey (description?, metadefault?, example?, default*)>
+<!ATTLIST multikey
+          name       NMTOKEN  #REQUIRED
+          attribute  NMTOKEN  #IMPLIED
+          datatype   NMTOKEN  #IMPLIED
+          handler    NMTOKEN  #IMPLIED
+          required   (yes|no) "no">
+
+<!ELEMENT sectiontype (description?, (section | key)*)>
+<!ATTLIST sectiontype
+          type       NMTOKEN  #REQUIRED
+          prefix     NMTOKEN  #IMPLIED
+          keytype    NMTOKEN  #IMPLIED
+          datatype   NMTOKEN  #IMPLIED>
+
+<!ELEMENT sectiongroup (description?, sectiontype+)>
+<!ATTLIST sectiongroup
+          type       NMTOKEN  #REQUIRED
+          prefix     NMTOKEN  #IMPLIED>
+
+<!ELEMENT section (description?)>
+<!ATTLIST section
+          name       NMTOKEN  #REQUIRED
+          attribute  NMTOKEN  #IMPLIED
+          type       NMTOKEN  #REQUIRED
+          handler    NMTOKEN  #IMPLIED
+          minOccurs  NMTOKEN  #IMPLIED
+          maxOccurs  NMTOKEN  #IMPLIED>
+
+<!ELEMENT multisection (description?)>
+<!ATTLIST multisection
+          name       NMTOKEN  #REQUIRED
+          attribute  NMTOKEN  #IMPLIED
+          type       NMTOKEN  #REQUIRED
+          handler    NMTOKEN  #IMPLIED
+          required   (yes|no) "no">