<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
 * Copyright 2004 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->
<!-- 
     XSLT (WD-19990813) DTD and HTML 4.0 Strict (REC-HTML40-19980424) DTD
     This DTD defines a XSLT stylesheet with a result-ns of html

     Credits:
       Original XSLT DTD from W3C XSLT WD-19990813
       Original XML  DTD for HTML 4.0 Strict by
         TAMURA, Kent <kent@trl.ibm.co.jp>, for IBM's XML4J package
       Minor fixes to XSLT & HTML DTDs by 
         Scott Boag <scott_boag@lotus.com>
         Henrique M. Holschuh <henriqmh@dca.fee.unicamp.br>
       HTML/XSLT composite DTD by
         Henrique M. Holschuh <henriqmh@dca.fee.unicamp.br>

     Caveats: It is possible to generate invalid XSLT and HTML documents 
       using this DTD, as the result-ns elements (HTML) must allow all 
       possible xsl elements as content, and all result-ns elements had 
       to be relaxed on their element content rules.

     TODO:
       - A XSLT/XHTML1.0 Strict DTD to use instead of this one. Lowercase
         element names allow for better compression ratios, at least in
         English documents.
       - Update to HTML 4.01

     $Id$
-->

<!-- Predefined XML (REC-XML-19980210) entities -->
<!ENTITY lt     "&#38;#60;">
<!ENTITY gt     "&#62;">
<!ENTITY amp    "&#38;#38;">
<!ENTITY apos   "&#39;">
<!ENTITY quot   "&#34;">

<!-- 
  Result elements allowed (inside xsl elements). These are actually
  all of the HTML40 Strict elements. 
-->

<!ENTITY % result-elements "
  | TT
  | I
  | B
  | BIG
  | SMALL
  | EM
  | STRONG
  | DFN
  | CODE
  | SAMP
  | KBD
  | VAR
  | CITE
  | ABBR
  | ACRONYM
  | SUP
  | SUB
  | SPAN
  | BDO
  | BR
  | BODY
  | ADDRESS
  | DIV
  | A
  | MAP
  | AREA
  | LINK
  | IMG
  | OBJECT
  | PARAM
  | HR
  | P
  | H1
  | H2
  | H3
  | H4
  | H5
  | H6
  | PRE
  | Q
  | BLOCKQUOTE
  | INS
  | DEL
  | DL
  | DT
  | DD
  | OL
  | UL
  | LI
  | FORM
  | LABEL
  | INPUT
  | SELECT
  | OPTGROUP
  | OPTION
  | TEXTAREA
  | FIELDSET
  | LEGEND
  | BUTTON
  | TABLE
  | CAPTION
  | THEAD
  | TFOOT
  | TBODY
  | COLGROUP
  | COL
  | TR
  | TH
  | TD
  | HEAD
  | TITLE
  | BASE
  | META
  | STYLE
  | SCRIPT
  | NOSCRIPT
  | HTML
">

<!-- begin XSLT DTD, patched -->

<!ENTITY % char-instructions "
 | xsl:apply-templates
 | xsl:call-template
 | xsl:apply-imports
 | xsl:for-each
 | xsl:value-of
 | xsl:copy-of
 | xsl:number
 | xsl:choose
 | xsl:if
 | xsl:text
 | xsl:copy
 | xsl:variable
 | xsl:message
">

<!ENTITY % instructions "
 %char-instructions;
 | xsl:processing-instruction
 | xsl:comment
 | xsl:element
 | xsl:attribute
">

<!ENTITY % char-template "
(#PCDATA
 %char-instructions;)*
">

<!ENTITY % template "
(#PCDATA
 %instructions;
 %result-elements;)*
">

<!-- Used for the type of an attribute value that is a URI reference.-->
<!ENTITY % URI "CDATA">

<!-- Used for the type of an attribute value that is a pattern.-->
<!ENTITY % pattern "CDATA">

<!-- Used for the type of an attribute value that is an
    attribute value template.-->
<!ENTITY % avt "CDATA">

<!-- Used for the type of an attribute value that is a QName; the prefix
    gets expanded by the XSLT processor. -->
<!ENTITY % qname "NMTOKEN">

<!-- Like qname but a whitespace-separated list of QNames. -->
<!ENTITY % qnames "NMTOKENS">

<!-- Used for the type of an attribute value that is an expression.-->
<!ENTITY % expr "CDATA">

<!-- Used for the type of an attribute value that consists
    of a single character.-->
<!ENTITY % char "CDATA">

<!-- Used for the type of an attribute value that is a priority. -->
<!ENTITY % priority "NMTOKEN">

<!ENTITY % space-att "xml:space (default|preserve) #IMPLIED">

<!-- This may be overridden to customize the set of elements allowed
at the top-level. -->

<!ENTITY % non-xsl-top-level "">

<!ENTITY % top-level "
(xsl:import*,
 (xsl:include
 | xsl:strip-space
 | xsl:preserve-space
 | xsl:output
 | xsl:key
 | xsl:locale
 | xsl:attribute-set
 | xsl:variable
 | xsl:param
 | xsl:template
 %non-xsl-top-level;)*)
">

<!-- added xmlns attribute suitable for this DTD -->
<!ENTITY % top-level-atts '
 extension-element-prefixes CDATA #IMPLIED
 id ID #IMPLIED
 xmlns:xsl CDATA #FIXED "http://www.w3.org/XSL/1999/Transform"
 xmlns CDATA #FIXED "http://www.w3.org/TR/REC-html40"
 %space-att;
'>

<!-- This entity is defined for use in the ATTLIST declaration
for result elements. -->

<!ENTITY % result-element-atts '
 xsl:extension-element-prefixes CDATA #IMPLIED
 xsl:use-attribute-sets %qnames; #IMPLIED
'>

<!ELEMENT xsl:stylesheet %top-level;>
<!ATTLIST xsl:stylesheet %top-level-atts;>

<!ELEMENT xsl:transform %top-level;>
<!ATTLIST xsl:transform %top-level-atts;>

<!ELEMENT xsl:import EMPTY>
<!ATTLIST xsl:import href %URI; #REQUIRED>

<!ELEMENT xsl:include EMPTY>
<!ATTLIST xsl:include href %URI; #REQUIRED>

<!ELEMENT xsl:strip-space EMPTY>
<!ATTLIST xsl:strip-space elements CDATA #REQUIRED>

<!ELEMENT xsl:preserve-space EMPTY>
<!ATTLIST xsl:preserve-space elements CDATA #REQUIRED>

<!ELEMENT xsl:output EMPTY>
<!ATTLIST xsl:output
 method %qname; #IMPLIED
 version NMTOKEN #IMPLIED
 encoding NMTOKEN #IMPLIED
 xml-declaration (yes|no) #IMPLIED
 standalone (yes|no) #IMPLIED
 doctype-public CDATA #IMPLIED
 doctype-system CDATA #IMPLIED
 cdata-section-elements %qnames; #IMPLIED
 indent (yes|no) #IMPLIED
 media-type CDATA #IMPLIED
>

<!ELEMENT xsl:key EMPTY>
<!ATTLIST xsl:key
 name %qname; #REQUIRED
 match %pattern; #REQUIRED
 use %expr; #REQUIRED
>

<!ELEMENT xsl:locale EMPTY>
<!ATTLIST xsl:locale
 name %qname; #IMPLIED
 decimal-separator %char; "."
 grouping-separator %char; ","
 infinity CDATA "&#x221E;"
 minus-sign %char; "-"
 NaN CDATA "&#xFFFD;"
 percent %char; "%"
 per-mille %char; "&#x2030;"
 zero-digit %char; "0"
 digit %char; "#"
 pattern-separator %char; ";"
>

<!ELEMENT xsl:template
(#PCDATA
 %instructions;
 %result-elements;
 | xsl:param)*
>

<!ATTLIST xsl:template
 match %pattern; #IMPLIED
 name %qname; #IMPLIED
 priority %priority; #IMPLIED
 mode %qname; #IMPLIED
 %space-att;
>

<!ELEMENT xsl:value-of EMPTY>
<!ATTLIST xsl:value-of
 select %expr; #REQUIRED
 disable-output-escaping (yes|no) "no"
>

<!ELEMENT xsl:copy-of EMPTY>
<!ATTLIST xsl:copy-of select %expr; #REQUIRED>

<!ELEMENT xsl:number EMPTY>
<!ATTLIST xsl:number
  level (single|multiple|any) "single"
  count %pattern; #IMPLIED
  from %pattern; #IMPLIED
  value %expr; #IMPLIED
  format %avt; '1'
  lang %avt; #IMPLIED
  letter-value %avt; #IMPLIED
  grouping-separator%avt; #IMPLIED
  grouping-size %avt; #IMPLIED
>

<!ELEMENT xsl:apply-templates (xsl:sort|xsl:with-param)*>
<!ATTLIST xsl:apply-templates
 select %expr; "node()"
 mode %qname; #IMPLIED
>

<!ELEMENT xsl:apply-imports EMPTY>

<!-- xsl:sort cannot occur after any other elements or
any non-whitespace character -->

<!ELEMENT xsl:for-each
(#PCDATA
 %instructions;
 %result-elements;
 | xsl:sort)*
>

<!ATTLIST xsl:for-each
 select %expr; #REQUIRED
 %space-att;
>

<!ELEMENT xsl:sort EMPTY>
<!ATTLIST xsl:sort
 select %expr; "."
 lang %avt; #IMPLIED
 data-type %avt; "text"
 order %avt; "ascending"
 case-order %avt; #IMPLIED
>

<!ELEMENT xsl:if %template;>
<!ATTLIST xsl:if
 test %expr; #REQUIRED
 %space-att;
>

<!ELEMENT xsl:choose (xsl:when+, xsl:otherwise?)>
<!ATTLIST xsl:choose %space-att;>

<!ELEMENT xsl:when %template;>
<!ATTLIST xsl:when
 test %expr; #REQUIRED
 %space-att;
>

<!ELEMENT xsl:otherwise %template;>
<!ATTLIST xsl:otherwise %space-att;>

<!ELEMENT xsl:attribute-set (xsl:attribute)*>
<!ATTLIST xsl:attribute-set
 name %qname; #REQUIRED
 use-attribute-sets %qnames; #IMPLIED
>

<!ELEMENT xsl:call-template (xsl:with-param)*>
<!ATTLIST xsl:call-template
 name %qname; #REQUIRED
>

<!ELEMENT xsl:with-param %template;>
<!ATTLIST xsl:with-param
 name %qname; #REQUIRED
 select %expr; #IMPLIED
>

<!ELEMENT xsl:variable %template;>
<!ATTLIST xsl:variable 
 name %qname; #REQUIRED
 select %expr; #IMPLIED
>

<!ELEMENT xsl:param %template;>
<!ATTLIST xsl:param 
 name %qname; #REQUIRED
 select %expr; #IMPLIED
>

<!ELEMENT xsl:text (#PCDATA)>
<!ATTLIST xsl:text
 disable-output-escaping (yes|no) "no"
>

<!ELEMENT xsl:processing-instruction %char-template;>
<!ATTLIST xsl:processing-instruction 
 name %avt; #REQUIRED
 %space-att;
>

<!ELEMENT xsl:element %template;>
<!ATTLIST xsl:element 
 name %avt; #REQUIRED
 namespace %avt; #IMPLIED
 use-attribute-sets %qnames; #IMPLIED
 %space-att;
>

<!ELEMENT xsl:attribute %char-template;>
<!ATTLIST xsl:attribute 
 name %avt; #REQUIRED
 namespace %avt; #IMPLIED
 %space-att;
>

<!ELEMENT xsl:comment %char-template;>
<!ATTLIST xsl:comment %space-att;>

<!ELEMENT xsl:copy %template;>
<!ATTLIST xsl:copy
 %space-att;
 use-attribute-sets %qnames; #IMPLIED
>

<!ELEMENT xsl:message %template;>
<!ATTLIST xsl:message %space-att;>

<!ELEMENT xsl:fallback %template;>
<!ATTLIST xsl:fallback %space-att;>



<!-- ######################################################################## -->
<!--   HTML 4.0 Strict DTD   (revised to allow for xsl content)               -->
<!--   Original DTD from XML4J package                                        -->
<!--   Original SGML to XML conversion by TAMURA, Kent for IBM's XML4J        -->

<!-- 
     Container for all xsl elements allowed inside result-elements elements,
     i.e.: all xsl elements which are valid where a result-element is valid,
     and therefore must be valid inside ALL non-empty HTML elements.

     You'll notice this does allow the user to create invalid XSL documents.

  xsl:sort, xsl:param, xsl:param-variable were not inluded because
  IMHO it is bad practice (and an error?) not to include them before 
  other siblings, especially result-ns ones.
-->

<!-- While the content should be simply %instructions; we cannot do that
     due to the first '|' in %instructions -->
<!ENTITY % xsl-valid-in-resultns "
  xsl:processing-instruction
  | xsl:comment
  | xsl:element
  | xsl:attribute
  %char-instructions;
">

<!-- Also, %result-element-atts; was added to the ATTLIST of all html
     elments -->

<!-- Revision: 23 1.3 docs/data/HTML40strict.xml.dtd, xml4jdocs, xml4j-jtcsv, xml4j_1_1_9  -->

<!--
    This is HTML 4.0 Strict DTD, which excludes the presentation 
    attributes and elements that W3C expects to phase out as 
    support for style sheets matures. Authors should use the Strict
    DTD when possible, but may use the Transitional DTD when support
    for presentation attribute and elements is required.
    
    HTML 4.0 includes mechanisms for style sheets, scripting,
    embedding objects, improved support for right to left and mixed
    direction text, and enhancements to forms for improved
    accessibility for people with disabilities.

          Draft: Date: 1998/07/06 17:50:32

          Authors:
              Dave Raggett <dsr@w3.org>
              Arnaud Le Hors <lehors@w3.org>
              Ian Jacobs <ij@w3.org>

    Further information about HTML 4.0 is available at:

        http://www.w3.org/TR/REC-html40
-->

<!--
    ================================================================
    Modified for XML 1.0 by:
	"TAMURA, Kent" <kent@trl.ibm.co.jp>

    o HTMLspecial, HTMLsymbol, HTMLlat1 aren't included in this DTD.
    o The `lang' attribute was renamed to `xml:lang'.


    Typical usage:

    <?xml version="1.0" encoding="..."?>
    <!DOCTYPE HTML SYSTEM ".../HTML40strict.xml.dtd">
    <HTML>
      <HEAD>
        ...
        <TITLE>...</TITLE>
        ...
      </HEAD>
      <BODY>
        ...
      </BODY>
    </HTML>

    Note: XML is case-sensitive.  So element names must be written
    in uppercase and attribute names must be written in lowercase.
    ================================================================
-->

<!--
    Typical usage:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
            "http://www.w3.org/TR/REC-html40/strict.dtd">
    <html>
    <head>
    ...
    </head>
    <body>
    ...
    </body>
    </html>

    The URI used as a system identifier with the public identifier allows
    the user agent to download the DTD and entity sets as needed.

    The FPI for the Transitional HTML 4.0 DTD is:

        "-//W3C//DTD HTML 4.0 Transitional//EN"

    and its URI is:

        http://www.w3.org/TR/REC-html40/loose.dtd

    If you are writing a document that includes frames, use 
    the following FPI:

        "-//W3C//DTD HTML 4.0 Frameset//EN"

    with the URI:

        http://www.w3.org/TR/REC-html40/frameset.dtd

    The following URIs are supported in relation to HTML 4.0

    "http://www.w3.org/TR/REC-html40/strict.dtd" (Strict DTD)
    "http://www.w3.org/TR/REC-html40/loose.dtd" (Loose DTD)
    "http://www.w3.org/TR/REC-html40/frameset.dtd" (Frameset DTD)
    "http://www.w3.org/TR/REC-html40/HTMLlat1.ent" (Latin-1 entities)
    "http://www.w3.org/TR/REC-html40/HTMLsymbol.ent" (Symbol entities)
    "http://www.w3.org/TR/REC-html40/HTMLspecial.ent" (Special entities)

    These URIs point to the latest version of each file. To reference
    this specific revision use the following URIs:

    "http://www.w3.org/TR/REC-html40-971218/strict.dtd"
    "http://www.w3.org/TR/REC-html40-971218/loose.dtd"
    "http://www.w3.org/TR/REC-html40-971218/frameset.dtd"
    "http://www.w3.org/TR/REC-html40-971218/HTMLlat1.ent"
    "http://www.w3.org/TR/REC-html40-971218/HTMLsymbol.ent"
    "http://www.w3.org/TR/REC-html40-971218/HTMLspecial.ent"

-->

<!--=== for XML ===-->
<!ENTITY % Number "CDATA">
<!ENTITY % Name "NMTOKEN">


<!--================== Imported Names ====================================-->

<!ENTITY % ContentType "CDATA"
> <!-- media type, as per [RFC2045]
    -->

<!ENTITY % ContentTypes "CDATA"
> <!-- comma-separated list of media types, as per [RFC2045]
    -->

<!ENTITY % Charset "CDATA"
> <!-- a character encoding, as per [RFC2045]
    -->

<!ENTITY % Charsets "CDATA"
> <!-- a space separated list of character encodings, as per [RFC2045]
    -->

<!ENTITY % LanguageCode "NMTOKEN"
> <!-- a language code, as per [RFC1766]
    -->

<!ENTITY % Character "CDATA"
> <!-- a single character from [ISO10646] 
    -->

<!ENTITY % LinkTypes "CDATA"
> <!-- space-separated list of link types
    -->

<!ENTITY % MediaDesc "CDATA"
> <!-- single or comma-separated list of media descriptors
    -->

<!-- Defined elsewhere in this DTD
<!ENTITY % URI "CDATA"
> <! a Uniform Resource Identifier,
       see [URI]
    -->

<!ENTITY % Datetime "CDATA"><!-- date and time information. ISO date format -->


<!ENTITY % Script "CDATA"><!-- script expression -->

<!ENTITY % StyleSheet "CDATA"><!-- style sheet data -->



<!ENTITY % Text "CDATA">


<!-- Parameter Entities -->

<!ENTITY % head.misc "SCRIPT|STYLE|META|LINK|OBJECT"><!-- repeatable head elements -->
<!ENTITY % heading "H1|H2|H3|H4|H5|H6">
<!ENTITY % list "UL | OL">
<!ENTITY % preformatted "PRE">


<!--================ Character mnemonic entities =========================-->

<!--ENTITY % HTMLlat1 PUBLIC
   "-//W3C//ENTITIES Latin1//EN//HTML"
   "HTMLlat1.ent"-->
<!--   "http://www.w3.org/TR/REC-html40-971218/HTMLlat1.ent"-->
<!--%HTMLlat1;-->

<!--ENTITY % HTMLsymbol PUBLIC
   "-//W3C//ENTITIES Symbols//EN//HTML"
   "HTMLsymbol.ent"-->
<!--   "http://www.w3.org/TR/REC-html40-971218/HTMLsymbol.ent"-->
<!--%HTMLsymbol;-->

<!--ENTITY % HTMLspecial PUBLIC
   "-//W3C//ENTITIES Special//EN//HTML"
   "HTMLspecial.ent"-->
<!--   "http://www.w3.org/TR/REC-html40-971218/HTMLspecial.ent"-->
<!--%HTMLspecial;-->

<!-- We define these elsewhere in this mixed DTD
<!ENTITY quot "&#34;">
<!ENTITY amp  "&#38;">
<!ENTITY lt   "&#60;">
<!ENTITY gt   "&#62;">
-->

<!--=================== Generic Attributes ===============================-->

<!ENTITY % coreattrs
 "id          ID             #IMPLIED
  class       CDATA          #IMPLIED
  style       %StyleSheet;   #IMPLIED
  title       %Text;         #IMPLIED
  %result-element-atts;"
>

<!ENTITY % i18n
 "xml:lang    %LanguageCode; #IMPLIED
  dir         (ltr|rtl)      #IMPLIED"
  >

<!ENTITY % events
 "onclick     %Script;       #IMPLIED
  ondblclick  %Script;       #IMPLIED
  onmousedown %Script;       #IMPLIED
  onmouseup   %Script;       #IMPLIED
  onmouseover %Script;       #IMPLIED
  onmousemove %Script;       #IMPLIED
  onmouseout  %Script;       #IMPLIED
  onkeypress  %Script;       #IMPLIED
  onkeydown   %Script;       #IMPLIED
  onkeyup     %Script;       #IMPLIED"
  >

<!-- Reserved Feature Switch -->
<!ENTITY % HTML.Reserved "IGNORE">

<!-- The following attributes are reserved for possible future use -->
<![ %HTML.Reserved; [
<!ENTITY % reserved
 "datasrc     %URI;          #IMPLIED
  datafld     CDATA          #IMPLIED
  dataformatas (plaintext|html) plaintext"
  >
]]>

<!ENTITY % reserved "">

<!ENTITY % attrs "%coreattrs; %i18n; %events;">


<!--=================== Text Markup ======================================-->

<!ENTITY % fontstyle
 "TT | I | B | BIG | SMALL">

<!ENTITY % phrase "EM | STRONG | DFN | CODE |
                   SAMP | KBD | VAR | CITE | ABBR | ACRONYM" >

<!ENTITY % special
   "A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">
<!ENTITY % special-A
   "IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">

<!ENTITY % formctrl "INPUT | SELECT | TEXTAREA | LABEL | BUTTON">

<!-- %inline; covers inline or "text-level" elements -->
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
<!ENTITY % inline-A "#PCDATA | %fontstyle; | %phrase; | %special-A; | %formctrl;">
<!ENTITY % inline-LABEL "#PCDATA | %fontstyle; | %phrase; | %special; | INPUT | SELECT | TEXTAREA | BUTTON">

<!--
<!ELEMENT (%fontstyle;|%phrase;)     (%inline;)*>
<!ATTLIST (%fontstyle;|%phrase;)
  %attrs;
  >-->
<!ELEMENT TT (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST TT %attrs;>
<!ELEMENT I (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST I %attrs;>
<!ELEMENT B (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST B %attrs;>
<!ELEMENT BIG (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST BIG %attrs;>
<!ELEMENT SMALL (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST SMALL %attrs;>
<!ELEMENT EM (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST EM %attrs;>
<!ELEMENT STRONG (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST STRONG %attrs;>
<!ELEMENT DFN (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST DFN %attrs;>
<!ELEMENT CODE (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST CODE %attrs;>
<!ELEMENT SAMP (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST SAMP %attrs;>
<!ELEMENT KBD (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST KBD %attrs;>
<!ELEMENT VAR (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST VAR %attrs;>
<!ELEMENT CITE (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST CITE %attrs;>
<!ELEMENT ABBR (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST ABBR %attrs;>
<!ELEMENT ACRONYM (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST ACRONYM %attrs;>


<!ELEMENT SUP (%inline; | %xsl-valid-in-resultns;)*><!-- subscript, superscript -->
<!ATTLIST SUP
  %attrs;
  >
<!ELEMENT SUB (%inline; | %xsl-valid-in-resultns;)*><!-- subscript, superscript -->
<!ATTLIST SUB
  %attrs;
  >

<!ELEMENT SPAN (%inline; | %xsl-valid-in-resultns;)*><!-- generic language/style container -->
<!ATTLIST SPAN
  %attrs;
  %reserved;			
  >

<!ELEMENT BDO (%inline; | %xsl-valid-in-resultns;)*><!-- I18N BiDi over-ride -->
<!ATTLIST BDO
  %coreattrs;
  lang        %LanguageCode; #IMPLIED
  dir         (ltr|rtl)      #REQUIRED
  >


<!ELEMENT BR     EMPTY><!-- forced line break -->
<!ATTLIST BR
  %coreattrs;
  >

<!--================== HTML content models ===============================-->

<!--
    HTML has two basic content models:

        %inline;     character level elements and text strings
        %block;      block-like elements e.g. paragraphs and lists
-->

<!ENTITY % block
     "P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |
      BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">
<!ENTITY % block-FORM
     "P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |
      BLOCKQUOTE | HR | TABLE | FIELDSET | ADDRESS">
<!ENTITY % block-FORM-FIELDSET
     "P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |
      BLOCKQUOTE | HR | TABLE | ADDRESS">

<!--<!ENTITY % flow "%block; | %inline;">-->
<!ENTITY % flow "%inline; | %block;">

<!--=================== Document Body ====================================-->

<!--ELEMENT BODY     (%block;|SCRIPT)+ +(INS|DEL)  document body -->
<!ELEMENT BODY ((INS|DEL)*, (%xsl-valid-in-resultns;|%block;|SCRIPT), (INS|DEL)*)+ ><!-- document body -->
<!ATTLIST BODY
  %attrs;
  onload          %Script;   #IMPLIED
  onunload        %Script;   #IMPLIED
  >

<!ELEMENT ADDRESS (%inline; | %xsl-valid-in-resultns;)*><!-- information on author -->
<!ATTLIST ADDRESS
  %attrs;
  >

<!ELEMENT DIV (%flow; | %xsl-valid-in-resultns;)*><!-- generic language/style container -->
<!ATTLIST DIV
  %attrs;
  %reserved;
  >


<!--================== The Anchor Element ================================-->

<!ENTITY % Shape "(rect|circle|poly|default)">
<!ENTITY % Coords "CDATA"><!-- comma separated list of lengths -->

<!ELEMENT A (%inline-A; | %xsl-valid-in-resultns;)*><!-- anchor -->
<!ATTLIST A
  %attrs;
  charset     %Charset;      #IMPLIED
  type        %ContentType;  #IMPLIED
  name        CDATA          #IMPLIED
  href        %URI;          #IMPLIED
  hreflang    %LanguageCode; #IMPLIED
  rel         %LinkTypes;    #IMPLIED
  rev         %LinkTypes;    #IMPLIED
  accesskey   %Character;    #IMPLIED
  shape       %Shape;        "rect"
  coords      %Coords;       #IMPLIED
  tabindex    %Number;       #IMPLIED
  onfocus     %Script;       #IMPLIED
  onblur      %Script;       #IMPLIED
  >

<!--================== Client-side image maps ============================-->

<!-- These can be placed in the same document or grouped in a
     separate document although this isn't yet widely supported -->

<!ELEMENT MAP  ((%xsl-valid-in-resultns;|%block;)+ | (%xsl-valid-in-resultns;|AREA+))><!-- client-side image map -->
<!ATTLIST MAP
  %attrs;
  name        CDATA          #REQUIRED
  >

<!ELEMENT AREA     EMPTY><!-- client-side image map area -->
<!ATTLIST AREA
  %attrs;
  shape       %Shape;        "rect"
  coords      %Coords;       #IMPLIED
  href        %URI;          #IMPLIED
  nohref      (nohref)       #IMPLIED
  alt         %Text;         #REQUIRED
  tabindex    %Number;       #IMPLIED
  accesskey   %Character;    #IMPLIED
  onfocus     %Script;       #IMPLIED
  onblur      %Script;       #IMPLIED
  >

<!--================== The LINK Element ==================================-->

<!--
  Relationship values can be used in principle:

   a) for document specific toolbars/menus when used
      with the LINK element in document head e.g.
        start, contents, previous, next, index, end, help
   b) to link to a separate style sheet (rel=stylesheet)
   c) to make a link to a script (rel=script)
   d) by stylesheets to control how collections of
      html nodes are rendered into printed documents
   e) to make a link to a printable version of this document
      e.g. a postscript or pdf version (rel=alternate media=print)
-->

<!ELEMENT LINK     EMPTY><!-- a media-independent link -->
<!ATTLIST LINK
  %attrs;
  charset     %Charset;      #IMPLIED
  href        %URI;          #IMPLIED
  hreflang    %LanguageCode; #IMPLIED
  type        %ContentType;  #IMPLIED
  rel         %LinkTypes;    #IMPLIED
  rev         %LinkTypes;    #IMPLIED
  media       %MediaDesc;    #IMPLIED
  >

<!--=================== Images ===========================================-->

<!-- Length defined in strict DTD for cellpadding/cellspacing -->
<!ENTITY % Length "CDATA"><!-- nn for pixels or nn% for percentage length -->
<!ENTITY % MultiLength "CDATA"><!-- pixel, percentage, or relative -->

<!ENTITY % MultiLengths "CDATA"><!-- comma-separated list of MultiLength -->

<!ENTITY % Pixels "CDATA"><!-- integer representing length in pixels -->


<!-- To avoid problems with text-only UAs as well as 
   to make image content understandable and navigable 
   to users of non-visual UAs, you need to provide
   a description with ALT, and avoid server-side image maps -->
<!ELEMENT IMG     EMPTY><!-- Embedded image -->
<!ATTLIST IMG
  %attrs;
  src         %URI;          #REQUIRED
  alt         %Text;         #REQUIRED
  longdesc    %URI;          #IMPLIED
  height      %Length;       #IMPLIED
  width       %Length;       #IMPLIED
  usemap      %URI;          #IMPLIED
  ismap       (ismap)        #IMPLIED
  >

<!-- USEMAP points to a MAP element which may be in this document
  or an external document, although the latter is not widely supported -->

<!--==================== OBJECT ======================================-->
<!--
  OBJECT is used to embed objects as part of HTML pages 
  PARAM elements should precede other content. SGML mixed content
  model technicality precludes specifying this formally ...
-->

<!ELEMENT OBJECT (%flow; | %xsl-valid-in-resultns; | PARAM)*
><!-- generic embedded object -->
<!ATTLIST OBJECT
  %attrs;
  declare     (declare)      #IMPLIED
  classid     %URI;          #IMPLIED
  codebase    %URI;          #IMPLIED
  data        %URI;          #IMPLIED
  type        %ContentType;  #IMPLIED
  codetype    %ContentType;  #IMPLIED
  archive     %URI;          #IMPLIED
  standby     %Text;         #IMPLIED
  height      %Length;       #IMPLIED
  width       %Length;       #IMPLIED
  usemap      %URI;          #IMPLIED
  name        CDATA          #IMPLIED
  tabindex    %Number;       #IMPLIED
  %reserved;
  >

<!ELEMENT PARAM     EMPTY><!-- named property value -->
<!ATTLIST PARAM
  id          ID             #IMPLIED
  name        CDATA          #REQUIRED
  value       CDATA          #IMPLIED
  valuetype   (DATA|REF|OBJECT) "DATA"
  type        %ContentType;  #IMPLIED
  >


<!--=================== Horizontal Rule ==================================-->

<!ELEMENT HR     EMPTY><!-- horizontal rule -->
<!ATTLIST HR
  %coreattrs;
  %events;
  >

<!--=================== Paragraphs =======================================-->

<!ELEMENT P (%inline; | %xsl-valid-in-resultns;)*><!-- paragraph -->
<!ATTLIST P
  %attrs;
  >

<!--=================== Headings =========================================-->

<!--
  There are six levels of headings from H1 (the most important)
  to H6 (the least important).
-->

<!--
<!ELEMENT (%heading;)      (%inline;)*>
<!ATTLIST (%heading;)
  %attrs;
  >-->
<!ELEMENT H1 (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST H1 %attrs;>
<!ELEMENT H2 (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST H2 %attrs;>
<!ELEMENT H3 (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST H3 %attrs;>
<!ELEMENT H4 (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST H4 %attrs;>
<!ELEMENT H5 (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST H5 %attrs;>
<!ELEMENT H6 (%inline; | %xsl-valid-in-resultns;)*>
<!ATTLIST H6 %attrs;>


<!--=================== Preformatted Text ================================-->

<!-- excludes markup for images and changes in font size -->
<!--
<!ENTITY % pre.exclusion "IMG|OBJECT|BIG|SMALL|SUB|SUP">

<!ELEMENT PRE  (%inline;)* -(%pre.exclusion;)><! preformatted text -->

<!ELEMENT PRE (#PCDATA |%xsl-valid-in-resultns;| TT|I|B|%phrase;|A|BR|SCRIPT|MAP|Q|SPAN|BDO|%formctrl;)*>
			<!-- preformatted text -->
<!ATTLIST PRE
  %attrs;>
<!-- Should the attribute below be incuded in PRE?
  xml:space (default|preserve) #FIXED "preserve"
-->

<!--===================== Inline Quotes ==================================-->

<!ELEMENT Q  (%inline; | %xsl-valid-in-resultns;)*><!-- short inline quotation -->
<!ATTLIST Q
  %attrs;
  cite        %URI;          #IMPLIED
  >

<!--=================== Block-like Quotes ================================-->

<!ELEMENT BLOCKQUOTE  (%block;|%xsl-valid-in-resultns;|SCRIPT)+><!-- long quotation -->
<!ATTLIST BLOCKQUOTE
  %attrs;
  cite        %URI;          #IMPLIED
  >

<!--=================== Inserted/Deleted Text ============================-->


<!-- INS/DEL are handled by inclusion on BODY -->
<!ELEMENT INS (%flow;|%xsl-valid-in-resultns;)*><!-- inserted text, deleted text -->
<!ATTLIST INS
  %attrs;
  cite        %URI;          #IMPLIED
  datetime    %Datetime;     #IMPLIED
  >
<!ELEMENT DEL (%flow;|%xsl-valid-in-resultns;)*><!-- inserted text, deleted text -->
<!ATTLIST DEL
  %attrs;
  cite        %URI;          #IMPLIED
  datetime    %Datetime;     #IMPLIED
  >

<!--=================== Lists ============================================-->

<!-- definition lists - DT for term, DD for its definition -->

<!ELEMENT DL  (%xsl-valid-in-resultns;| DT|DD)+><!-- definition list -->
<!ATTLIST DL
  %attrs;
  >

<!ELEMENT DT (%inline; | %xsl-valid-in-resultns;)*><!-- definition term -->
<!ELEMENT DD (%flow; | %xsl-valid-in-resultns;)*><!-- definition description -->
<!ATTLIST DT
  %attrs;
  >
<!ATTLIST DD
  %attrs;
  >


<!ELEMENT OL (%xsl-valid-in-resultns; | LI)+><!-- ordered list -->
<!ATTLIST OL
  %attrs;
  >

<!-- Unordered Lists (UL) bullet styles -->
<!ELEMENT UL (%xsl-valid-in-resultns; | LI)+><!-- unordered list -->
<!ATTLIST UL
  %attrs;
  >



<!ELEMENT LI (%flow; | %xsl-valid-in-resultns;)*><!-- list item -->
<!ATTLIST LI
  %attrs;
  >

<!--================ Forms ===============================================-->
<!ELEMENT FORM (%xsl-valid-in-resultns;|%block-FORM;|SCRIPT)+>

<!-- interactive form -->
<!ATTLIST FORM
  %attrs;
  action      %URI;          #REQUIRED
  method      (GET|POST)     "GET"
  enctype     %ContentType;  "application/x-www-form-urlencoded"
  onsubmit    %Script;       #IMPLIED
  onreset     %Script;       #IMPLIED
  accept-charset %Charsets;  #IMPLIED
  >

<!-- Each label must not contain more than ONE field -->
<!ELEMENT LABEL  (%inline-LABEL; | %xsl-valid-in-resultns;)*><!-- form field label text -->
<!ATTLIST LABEL
  %attrs;
  for         IDREF          #IMPLIED
  accesskey   %Character;    #IMPLIED
  onfocus     %Script;       #IMPLIED
  onblur      %Script;       #IMPLIED
  >

<!ENTITY % InputType
  "(TEXT | PASSWORD | CHECKBOX |
    RADIO | SUBMIT | RESET |
    FILE | HIDDEN | IMAGE | BUTTON)"
   >

<!-- attribute name required for all but submit & reset -->
<!ELEMENT INPUT     EMPTY><!-- form control -->
<!ATTLIST INPUT
  %attrs;
  type        %InputType;    "TEXT"
  name        CDATA          #IMPLIED
  value       CDATA          #IMPLIED
  checked     (checked)      #IMPLIED
  disabled    (disabled)     #IMPLIED
  readonly    (readonly)     #IMPLIED
  size        CDATA          #IMPLIED
  maxlength   %Number;       #IMPLIED
  src         %URI;          #IMPLIED
  alt         CDATA          #IMPLIED
  usemap      %URI;          #IMPLIED
  tabindex    %Number;       #IMPLIED
  accesskey   %Character;    #IMPLIED
  onfocus     %Script;       #IMPLIED
  onblur      %Script;       #IMPLIED
  onselect    %Script;       #IMPLIED
  onchange    %Script;       #IMPLIED
  accept      %ContentTypes; #IMPLIED
  %reserved;
  >

<!ELEMENT SELECT ((%xsl-valid-in-resultns;|OPTGROUP)|(%xsl-valid-in-resultns;|OPTION))+ ><!-- option selector -->
<!ATTLIST SELECT
  %attrs;
  name        CDATA          #IMPLIED
  size        %Number;       #IMPLIED
  multiple    (multiple)     #IMPLIED
  disabled    (disabled)     #IMPLIED
  tabindex    %Number;       #IMPLIED
  onfocus     %Script;       #IMPLIED
  onblur      %Script;       #IMPLIED
  onchange    %Script;       #IMPLIED
  %reserved;
  >

<!ELEMENT OPTGROUP (%xsl-valid-in-resultns;|OPTION)+>  <!-- option group -->
<!ATTLIST OPTGROUP
  %attrs;
  disabled    (disabled)     #IMPLIED
  label       %Text;         #REQUIRED
  >

<!ELEMENT OPTION  (#PCDATA | %xsl-valid-in-resultns;)*><!-- selectable choice -->
<!ATTLIST OPTION
  %attrs;
  selected    (selected)     #IMPLIED
  disabled    (disabled)     #IMPLIED
  label       %Text;         #IMPLIED
  value       CDATA          #IMPLIED
  >

<!ELEMENT TEXTAREA (#PCDATA | %xsl-valid-in-resultns;)*><!-- multi-line text field -->
<!ATTLIST TEXTAREA
  %attrs;
  name        CDATA          #IMPLIED
  rows        %Number;       #REQUIRED
  cols        %Number;       #REQUIRED
  disabled    (disabled)     #IMPLIED
  readonly    (readonly)     #IMPLIED
  tabindex    %Number;       #IMPLIED
  accesskey   %Character;    #IMPLIED
  onfocus     %Script;       #IMPLIED
  onblur      %Script;       #IMPLIED
  onselect    %Script;       #IMPLIED
  onchange    %Script;       #IMPLIED
  %reserved;
  >

<!--
  #PCDATA is to solve the mixed content problem,
  per specification only whitespace is allowed there!

  We do allow XSL inside as well
 -->
<!--ELEMENT FIELDSET     (#PCDATA,LEGEND,(%flow;)*)    form control group -->
<!ELEMENT FIELDSET  (%flow;|%xsl-valid-in-resultns;|LEGEND)*><!-- form control group -->
<!ATTLIST FIELDSET
  %attrs;
  >

<!ELEMENT LEGEND (%inline;|%xsl-valid-in-resultns;)*><!-- fieldset legend -->
<!ENTITY % LAlign "(top|bottom|left|right)">

<!ATTLIST LEGEND
  %attrs;
  accesskey   %Character;    #IMPLIED
  >

<!ELEMENT BUTTON
     (#PCDATA | %xsl-valid-in-resultns; | %fontstyle; | %phrase; | %special-A; | %block;)*
><!-- push button -->
<!ATTLIST BUTTON
  %attrs;
  name        CDATA          #IMPLIED
  value       CDATA          #IMPLIED
  type        (button|submit|reset) "submit"
  disabled    (disabled)     #IMPLIED
  tabindex    %Number;       #IMPLIED
  accesskey   %Character;    #IMPLIED
  onfocus     %Script;       #IMPLIED
  onblur      %Script;       #IMPLIED
  %reserved;
  >

<!--======================= Tables =======================================-->

<!-- IETF HTML table standard, see [RFC1942] -->

<!--
 The BORDER attribute sets the thickness of the frame around the
 table. The default units are screen pixels.

 The FRAME attribute specifies which parts of the frame around
 the table should be rendered. The values are not the same as
 CALS to avoid a name clash with the VALIGN attribute.

 The value "border" is included for backwards compatibility with
 <TABLE BORDER> which yields frame=border and border=implied
 For <TABLE BORDER=1> you get border=1 and frame=implied. In this
 case, it is appropriate to treat this as frame=border for backwards
 compatibility with deployed browsers.
-->
<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">

<!--
 The RULES attribute defines which rules to draw between cells:

 If RULES is absent then assume:
     "none" if BORDER is absent or BORDER=0 otherwise "all"
-->

<!ENTITY % TRules "(none | groups | rows | cols | all)">
  
<!-- horizontal placement of table relative to document -->
<!ENTITY % TAlign "(left|center|right)">

<!-- horizontal alignment attributes for cell contents -->
<!ENTITY % cellhalign
  "align      (left|center|right|justify|char) #IMPLIED
   char       %Character;    #IMPLIED
   charoff    %Length;       #IMPLIED"
  >

<!-- vertical alignment attributes for cell contents -->
<!ENTITY % cellvalign
  "valign     (top|middle|bottom|baseline) #IMPLIED"
  >

<!ELEMENT TABLE 
  ((%xsl-valid-in-resultns;)*, CAPTION?, (%xsl-valid-in-resultns;)*,
   ((COL | %xsl-valid-in-resultns;)*|(COLGROUP | %xsl-valid-in-resultns;)*),
   ((THEAD?,(%xsl-valid-in-resultns;)*,TFOOT?,(%xsl-valid-in-resultns;|TBODY)+)
    | (%xsl-valid-in-resultns;|TR)+) )>

<!ELEMENT CAPTION   (%inline; | %xsl-valid-in-resultns;)*><!-- table caption -->
<!ELEMENT THEAD     (TR|%xsl-valid-in-resultns;)+><!-- table header -->
<!ELEMENT TFOOT     (TR|%xsl-valid-in-resultns;)+><!-- table footer -->
<!ELEMENT TBODY     (TR|%xsl-valid-in-resultns;)+><!-- table body -->
<!ELEMENT COLGROUP  (%xsl-valid-in-resultns; | COL)*><!-- table column group -->
<!ELEMENT COL       EMPTY><!-- table column -->
<!ELEMENT TR        (TH|TD| %xsl-valid-in-resultns;)+><!-- table row -->
<!ELEMENT TH        (%flow; | %xsl-valid-in-resultns;)*><!-- table header cell, table data cell-->
<!ELEMENT TD        (%flow; | %xsl-valid-in-resultns;)*><!-- table header cell, table data cell-->

<!ATTLIST TABLE
  %attrs;
  summary     %Text;         #IMPLIED
  width       %Length;       #IMPLIED
  border      %Pixels;       #IMPLIED
  frame       %TFrame;       #IMPLIED
  rules       %TRules;       #IMPLIED
  cellspacing %Length;       #IMPLIED
  cellpadding %Length;       #IMPLIED
  %reserved;
  datapagesize CDATA         #IMPLIED
  >

<!ENTITY % CAlign "(top|bottom|left|right)">

<!ATTLIST CAPTION
  %attrs;
  >

<!--
COLGROUP groups a set of COL elements. It allows you to group
several semantically related columns together.
-->
<!ATTLIST COLGROUP
  %attrs;
  span        %Number;       "1"
  width       %MultiLength;  #IMPLIED
  %cellhalign;
  %cellvalign;
  >

<!--
 COL elements define the alignment properties for cells in
 one or more columns.

 The WIDTH attribute specifies the width of the columns, e.g.

     width=64        width in screen pixels
     width=0.5*      relative width of 0.5

 The SPAN attribute causes the attributes of one
 COL element to apply to more than one column.
-->
<!ATTLIST COL
  %attrs;
  span        %Number;       "1"
  width       %MultiLength;  #IMPLIED
  %cellhalign;
  %cellvalign;
  >

<!--
    Use THEAD to duplicate headers when breaking table
    across page boundaries, or for static headers when
    TBODY sections are rendered in scrolling panel.

    Use TFOOT to duplicate footers when breaking table
    across page boundaries, or for static footers when
    TBODY sections are rendered in scrolling panel.

    Use multiple TBODY sections when rules are needed
    between groups of table rows.
-->
<!ATTLIST THEAD
  %attrs;
  %cellhalign;
  %cellvalign;
  >
<!ATTLIST TBODY
  %attrs;
  %cellhalign;
  %cellvalign;
  >
<!ATTLIST TFOOT
  %attrs;
  %cellhalign;
  %cellvalign;
  >

<!ATTLIST TR
  %attrs;
  %cellhalign;
  %cellvalign;
  >


<!-- Scope is simpler than axes attribute for common tables -->
<!ENTITY % Scope "(ROW|COL|ROWGROUP|COLGROUP)">

<!-- TH is for headers, TD for data, but for cells acting as both use TD -->
<!ATTLIST TH
  %attrs;
  abbr        %Text;         #IMPLIED
  axis        CDATA          #IMPLIED
  headers     IDREFS         #IMPLIED
  scope       %Scope;        #IMPLIED
  rowspan     %Number;       "1"
  colspan     %Number;       "1"
  %cellhalign;
  %cellvalign;
  >
<!ATTLIST TD
  %attrs;
  abbr        %Text;         #IMPLIED
  axis        CDATA          #IMPLIED
  headers     IDREFS         #IMPLIED
  scope       %Scope;        #IMPLIED
  rowspan     %Number;       "1"
  colspan     %Number;       "1"
  %cellhalign;
  %cellvalign;
  >


<!--================ Document Head =======================================-->
<!-- %head.misc; defined earlier on as "SCRIPT|STYLE|META|LINK|OBJECT",
     extended now to allow xsl -->
<!ENTITY % head.misc-HEAD "%head.misc;|%xsl-valid-in-resultns;">

<!ENTITY % head.content "TITLE &amp; BASE?">

<!--ELEMENT HEAD     (%head.content;) +(%head.misc;)   document head -->
<!ELEMENT HEAD
   ((%head.misc-HEAD;)*, ((BASE?,(%head.misc-HEAD;)*,TITLE?) | (TITLE?,(%head.misc-HEAD;)*,BASE?)|(%head.misc-HEAD;)*)+, (%head.misc-HEAD;)*)>
<!ATTLIST HEAD
  %i18n;
  profile     %URI;          #IMPLIED
  %result-element-atts;
  >

<!-- The TITLE element is not considered part of the flow of text.
       It should be displayed, for example as the page header or
       window title. Exactly one title is required per document.
    -->
<!--ELEMENT TITLE     (#PCDATA) -(%head.misc;)  document title -->
<!ELEMENT TITLE  (#PCDATA |  %xsl-valid-in-resultns;)*><!-- document title -->
<!ATTLIST TITLE %i18n; %result-element-atts;>


<!ELEMENT BASE     EMPTY><!-- document base URI -->
<!ATTLIST BASE
  href        %URI;          #REQUIRED
  >

<!ELEMENT META     EMPTY><!-- generic metainformation -->
<!ATTLIST META
  %i18n;
  http-equiv  %Name;         #IMPLIED
  name        %Name;         #IMPLIED
  content     CDATA          #REQUIRED
  scheme      CDATA          #IMPLIED
  %result-element-atts;
  >

<!--ELEMENT STYLE     %StyleSheet;  style info -->
<!ELEMENT STYLE (#PCDATA | %xsl-valid-in-resultns;)*><!-- style info -->
<!ATTLIST STYLE
  %i18n;
  type        %ContentType;  #REQUIRED
  media       %MediaDesc;    #IMPLIED
  title       %Text;         #IMPLIED
  %result-element-atts;
  >

<!--ELEMENT SCRIPT     %Script; script statements -->
<!ELEMENT SCRIPT (#PCDATA | %xsl-valid-in-resultns;)*><!-- script statements -->
<!ATTLIST SCRIPT
  charset     %Charset;      #IMPLIED
  type        %ContentType;  #REQUIRED
  language    CDATA          #IMPLIED
  src         %URI;          #IMPLIED
  defer       (defer)        #IMPLIED
  event       CDATA          #IMPLIED
  for         %URI;          #IMPLIED
  %result-element-atts;
  >

<!ELEMENT NOSCRIPT (%xsl-valid-in-resultns;|%block;)+
><!-- alternate content container for non script-based rendering -->
<!ATTLIST NOSCRIPT
  %attrs;
  >

<!--================ Document Structure ==================================-->
<!ENTITY % html.content "HEAD, BODY">

<!--<!ELEMENT HTML     (%html.content;)> --><!-- document root element -->
<!ELEMENT HTML (((%xsl-valid-in-resultns;)*,HEAD?,(%xsl-valid-in-resultns;)*,BODY?,
                (%xsl-valid-in-resultns;)*) | (%xsl-valid-in-resultns;)*)>
<!-- document root element -->
<!ATTLIST HTML
  %i18n;
  %result-element-atts;
  >
