This is the DTDs generated from the Relax NG Schemas. I've included the various module DTDs directly in the DTD, not sure if that's the right way to do it.
I haven't been able to validate the DTD yet, does anyone know what's wrong here?
This DTD should validate the following snippet as valid XML:
<?xml version="1.0"?> <xoxo> <ol> <li>Test <ol> <li>text..</li> <li> <ul compact="compact"> <li>xoxo</li> </ul> </li> </ol> </li> </ol> <ul> <li>Test <ul> <li>text..</li> </ul> </li> </ul> </xoxo>
<?xml encoding="UTF-8"?> <!-- Datatypes Module --> <!-- Length defined for cellpadding/cellspacing --> <!-- nn for pixels or nn% for percentage length --> <!ENTITY % Length.datatype "#PCDATA"> <!ENTITY % NMTOKENS.datatype "NMTOKENS"> <!-- space-separated list of link types --> <!ENTITY % LinkTypes.datatype "%NMTOKENS.datatype;"> <!-- single or comma-separated list of media descriptors --> <!ENTITY % MediaDesc.datatype "#PCDATA"> <!-- pixel, percentage, or relative --> <!ENTITY % MultiLength.datatype "#PCDATA"> <!-- one or more digits (NUMBER) --> <!ENTITY % Number.datatype "#PCDATA"> <!-- integer representing length in pixels --> <!ENTITY % Pixels.datatype "#PCDATA"> <!-- script expression --> <!ENTITY % Script.datatype "#PCDATA"> <!-- textual content --> <!ENTITY % Text.datatype "#PCDATA"> <!-- Imported Datatypes ................................ --> <!-- a single character from [ISO10646] --> <!ENTITY % Character.datatype "#PCDATA"> <!-- a character encoding, as per [RFC2045] --> <!ENTITY % Charset.datatype "#PCDATA"> <!-- a space separated list of character encodings, as per [RFC2045] --> <!ENTITY % Charsets.datatype "#PCDATA"> <!-- media type, as per [RFC2045] --> <!ENTITY % ContentType.datatype "#PCDATA"> <!-- comma-separated list of media types, as per [RFC2045] --> <!ENTITY % ContentTypes.datatype "#PCDATA"> <!-- date and time information. ISO date format --> <!ENTITY % Datetime.datatype "#PCDATA"> <!-- formal public identifier, as per [ISO8879] --> <!ENTITY % FPI.datatype "#PCDATA"> <!-- a language code, as per [RFC1766] --> <!ENTITY % LanguageCode.datatype "CDATA"> <!-- a Uniform Resource Identifier, see [URI] --> <!ENTITY % URI.datatype "CDATA"> <!-- a space-separated list of Uniform Resource Identifiers, see [URI] --> <!ENTITY % URIs.datatype "#PCDATA"> <!ENTITY % NMTOKEN.datatype "NMTOKEN"> <!ENTITY % ID.datatype "ID"> <!ENTITY % IDREF.datatype "IDREF"> <!ENTITY % IDREFS.datatype "IDREFS"> <!-- Text Module --> <!ELEMENT br EMPTY> <!ATTLIST br %Core.attrib;> <!ENTITY % Inline.class "abbr|acronym|br|cite|code|dfn|em|kbd|q|samp |span|strong|var"> <!ENTITY % Inline.model "(#PCDATA|%Inline.class;)*"> <!ELEMENT span %Inline.model;> <!ATTLIST span %Common.attrib;> <!ELEMENT abbr %Inline.model;> <!ATTLIST abbr %Common.attrib;> <!ELEMENT acronym %Inline.model;> <!ATTLIST acronym %Common.attrib;> <!ELEMENT cite %Inline.model;> <!ATTLIST cite %Common.attrib;> <!ELEMENT code %Inline.model;> <!ATTLIST code %Common.attrib;> <!ELEMENT dfn %Inline.model;> <!ATTLIST dfn %Common.attrib;> <!ELEMENT em %Inline.model;> <!ATTLIST em %Common.attrib;> <!ELEMENT kbd %Inline.model;> <!ATTLIST kbd %Common.attrib;> <!ELEMENT q %Inline.model;> <!ATTLIST q %Common.attrib; cite %URI.datatype; #IMPLIED> <!ELEMENT samp %Inline.model;> <!ATTLIST samp %Common.attrib;> <!ELEMENT strong %Inline.model;> <!ATTLIST strong %Common.attrib;> <!ELEMENT var %Inline.model;> <!ATTLIST var %Common.attrib;> <!ENTITY % Flow.model "(#PCDATA|%Inline.class;|%Block.class;)*"> <!ELEMENT div %Flow.model;> <!ATTLIST div %Common.attrib;> <!ELEMENT p %Inline.model;> <!ATTLIST p %Common.attrib;> <!ELEMENT address %Inline.model;> <!ATTLIST address %Common.attrib;> <!-- This is redefined by the legacy module to include inlines. --> <!ENTITY % Block.mix "%Block.class;"> <!ENTITY % Block.model "(%Block.mix;)+"> <!ELEMENT blockquote (%Block.model;)> <!ATTLIST blockquote %Common.attrib; cite %URI.datatype; #IMPLIED> <!ELEMENT pre %Inline.model;> <!ATTLIST pre %Common.attrib; xml:space (preserve) #IMPLIED> <!ENTITY % Heading.attrib " %Common.attrib;"> <!ENTITY % Heading.content "%Inline.model;"> <!ELEMENT h1 %Heading.content;> <!ATTLIST h1 %Heading.attrib;> <!ELEMENT h2 %Heading.content;> <!ATTLIST h2 %Heading.attrib;> <!ELEMENT h3 %Heading.content;> <!ATTLIST h3 %Heading.attrib;> <!ELEMENT h4 %Heading.content;> <!ATTLIST h4 %Heading.attrib;> <!ELEMENT h5 %Heading.content;> <!ATTLIST h5 %Heading.attrib;> <!ELEMENT h6 %Heading.content;> <!ATTLIST h6 %Heading.attrib;> <!ENTITY % Heading.class "h1|h2|h3|h4|h5|h6"> <!ENTITY % Block.class "address|blockquote|div|p|pre|%Heading.class;"> <!-- Common Attributes Module --> <!ENTITY % id.attrib " id %ID.datatype; #IMPLIED"> <!ENTITY % class.attrib " class %NMTOKENS.datatype; #IMPLIED"> <!ENTITY % title.attrib " title CDATA #IMPLIED"> <!ENTITY % Core.attrib " %id.attrib; %class.attrib; %title.attrib;"> <!ENTITY % lang.attrib " xml:lang %LanguageCode.datatype; #IMPLIED"> <!ENTITY % I18n.attrib " %lang.attrib;"> <!ENTITY % Common.attrib " %Core.attrib; %I18n.attrib; compact (compact) #IMPLIED"> <!ENTITY % CommonIdRequired.attrib " id %ID.datatype; #REQUIRED %class.attrib; %title.attrib; %I18n.attrib;"> <!-- List Module --> <!ELEMENT dl (dt|dd)+> <!ATTLIST dl %Common.attrib;> <!ELEMENT dt %Inline.model;> <!ATTLIST dt %Common.attrib;> <!ELEMENT dd %Flow.model;> <!ATTLIST dd %Common.attrib;> <!ELEMENT ol (li)+> <!ATTLIST ol %Common.attrib;> <!ELEMENT ul (li)+> <!ATTLIST ul %Common.attrib;> <!ELEMENT li %Flow.model;> <!ATTLIST li %Common.attrib;> <!ENTITY % List.class "ul|ol|dl"> <!ENTITY % Block.class "%List.class;"> <!ELEMENT xoxo (dl|ol|ul)+>