;; $Id$
;;
;; Hacks to let "xmllint --xinclude --dtdvalid rfc2629.dtd" work.  Due
;; to the way XInclude works, we need to allow xml:base attributes
;; everywhere an XIncluded element might appear, and xmlns:xi
;; attributes in any element that might reasonably contain an
;; XInclude.  The latter is not strictly necessary (one can always use
;; the icky form <xi:include href="mumble" xmlns:xi="..."/>) but the
;; XML is a lot more readable if we allow xmlns:xi attributes.
;;
;; Sorry this involves so many DTD changes.  Wish I knew a better way.
;; If you do, tell me so we'll both know.

Index: rfc2629.dtd
--- rfc2629.dtd.orig	Thu Aug  4 04:46:20 2005
+++ rfc2629.dtd	Wed Sep 21 14:04:35 2005
@@ -98,7 +98,8 @@
                                          #IMPLIED
           iprExtract  IDREF              #IMPLIED
           docName     %ATEXT;            #IMPLIED
-          xml:lang    %ATEXT;            "en">
+          xml:lang    %ATEXT;            "en"
+          xml:base    %ATEXT;		 #IMPLIED>
 
 
 <!--
@@ -108,25 +109,36 @@
 
 <!ELEMENT front       (title,author+,date,area*,workgroup*,keyword*,
                        abstract?,note*)>
+<!ATTLIST front
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!-- the "abbrev" attribute is used for headers, etc. -->
 <!ELEMENT title       (%CTEXT;)>
 <!ATTLIST title
-          abbrev      %ATEXT;            #IMPLIED> 
+          abbrev      %ATEXT;            #IMPLIED
+          xml:base    %ATEXT;            #IMPLIED> 
 
 <!ELEMENT author      (organization,address?)>
 <!ATTLIST author
           initials    %ATEXT;            #IMPLIED
           surname     %ATEXT;            #IMPLIED
           fullname    %ATEXT;            #IMPLIED
-          role        (editor)           #IMPLIED>
+          role        (editor)           #IMPLIED
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT organization
                       (%CTEXT;)>
 <!ATTLIST organization
-          abbrev      %ATEXT;            #IMPLIED> 
+          abbrev      %ATEXT;            #IMPLIED
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
  
 <!ELEMENT address     (postal?,phone?,facsimile?,email?,uri?)>
+<!ATTLIST address
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!-- this content model should be more strict:
      at most one of each the city, region, code, and country
@@ -150,13 +162,27 @@
 
 <!-- meta-data... -->
 <!ELEMENT area        (%CTEXT;)>
+<!ATTLIST area
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 <!ELEMENT workgroup   (%CTEXT;)>
+<!ATTLIST workgroup
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 <!ELEMENT keyword     (%CTEXT;)>
+<!ATTLIST keyword
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT abstract    (t)+>
+<!ATTLIST abstract
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 <!ELEMENT note        (t)+>
 <!ATTLIST note
-          title       %ATEXT;            #REQUIRED>
+          title       %ATEXT;            #REQUIRED
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 
 <!--
@@ -166,13 +192,18 @@
 
 <!-- later on, may be (section+,appendix*,section*) -->
 <!ELEMENT middle      (section+)>
+<!ATTLIST middle
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT section     (t|figure|texttable|iref|section)*>
 <!ATTLIST section
           anchor      ID                 #IMPLIED
           title       %ATEXT;            #REQUIRED
           toc         (include|exclude|default)
-                                         "default">
+                                         "default"
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!--
 <!ELEMENT appendix    (t|figure|texttable|iref|appendix)*>
@@ -180,14 +211,18 @@
           anchor      ID                 #IMPLIED
           title       %ATEXT;            #REQUIRED
           toc         (include|exclude|default)
-                                         "default">
+                                         "default"
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
   -->
 
 <!-- use of <figure/> is deprecated... -->
 <!ELEMENT t           (%TEXT;|list|figure|xref|eref|iref|cref|spanx|vspace)*>
 <!ATTLIST t
           anchor      ID                 #IMPLIED
-          hangText    %ATEXT;            #IMPLIED>
+          hangText    %ATEXT;            #IMPLIED
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!-- the value of the style attribute is inherited from the closest 
      parent -->
@@ -195,44 +230,64 @@
 <!ATTLIST list
           style       %ATEXT;            "empty"
           hangIndent  %NUMBER;           #IMPLIED
-          counter     %ATEXT;            #IMPLIED>
+          counter     %ATEXT;            #IMPLIED
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT xref        (%CTEXT;)>
 <!ATTLIST xref
           target      IDREF              #REQUIRED
           pageno      (true|false)       "false"
           format      (counter|title|none|default)
-                                         "default">
+                                         "default"
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT eref        (%CTEXT;)>
 <!ATTLIST eref
-          target      %URI;              #REQUIRED>
+          target      %URI;              #REQUIRED
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT iref        EMPTY>
 <!ATTLIST iref
           item        %ATEXT;            #REQUIRED
           subitem     %ATEXT;            ""
-          primary    (true|false)       "false">
+          primary    (true|false)       "false"
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT cref        (%CTEXT;)>
 <!ATTLIST cref
           anchor      ID                 #IMPLIED
-          source      %ATEXT;            #IMPLIED>
+          source      %ATEXT;            #IMPLIED
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT spanx       (%CTEXT;)>
 <!ATTLIST spanx
-          style       %ATEXT;            "emph">
+          style       %ATEXT;            "emph"
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT vspace      EMPTY>
 <!ATTLIST vspace
-          blankLines  %NUMBER;           "0">
+          blankLines  %NUMBER;           "0"
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT figure      (preamble?,artwork,postamble?)>
 <!ATTLIST figure
           anchor      ID                 #IMPLIED
-          title       %ATEXT;            "">
+          title       %ATEXT;            ""
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT preamble    (%TEXT;|xref|eref|iref|cref|spanx)*>
+<!ATTLIST preamble
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
+
 <!ELEMENT artwork     (%TEXT;)*>
 <!ATTLIST artwork
           xml:space   (default|preserve) "preserve"
@@ -242,19 +297,31 @@
           align       (left|center|right) "left"
           alt         %ATEXT;            ""
           width       %ATEXT;            ""
-          height      %ATEXT;            "">
+          height      %ATEXT;            ""
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT postamble   (%TEXT;|xref|eref|iref|cref|spanx)*>
+<!ATTLIST postamble
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
     
 <!ELEMENT texttable   (preamble?,ttcol+,c*,postamble?)>
 <!ATTLIST texttable
           anchor      ID                 #IMPLIED
-          title       %ATEXT;            "">
+          title       %ATEXT;            ""
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 <!ELEMENT ttcol       (%CTEXT;)>
 <!ATTLIST ttcol
           width       %ATEXT;           #IMPLIED
-          align       (left|center|right) "left">
+          align       (left|center|right) "left"
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 <!ELEMENT c           (%TEXT;|xref|eref|iref|cref|spanx)*>
+<!ATTLIST c
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 
 <!--
@@ -264,21 +331,34 @@
 
 <!-- sections, if present, are appendices -->
 <!ELEMENT back        (references*,section*)>
+<!ATTLIST back
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 
 <!ELEMENT references  (reference+)>
 <!ATTLIST references
-          title       %ATEXT;            "References">
+          title       %ATEXT;            "References"
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 <!ELEMENT reference   (front,seriesInfo*,format*,annotation*)>
 <!ATTLIST reference
           anchor      ID                 #IMPLIED
-          target      %URI;              #IMPLIED>
+          target      %URI;              #IMPLIED
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 <!ELEMENT seriesInfo  EMPTY>
 <!ATTLIST seriesInfo
           name        %ATEXT;            #REQUIRED
+          xml:base    %ATEXT;            #IMPLIED
           value       %ATEXT;            #REQUIRED>
 <!ELEMENT format      EMPTY>
 <!ATTLIST format
           target      %URI;              #IMPLIED
           type        %ATEXT;            #REQUIRED
-          octets      %NUMBER;           #IMPLIED>
+          octets      %NUMBER;           #IMPLIED
+          xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
 <!ELEMENT annotation  (%TEXT;|xref|eref|iref|cref|spanx)*>
+<!ATTLIST annotation
+	  xml:base    %ATEXT;            #IMPLIED
+          xmlns:xi    %ATEXT;            #IMPLIED>
