XHTML 1.1 - XHTML 1.1 Document Type Definition

# C. XHTML 1.1 Document Type Definition

Contents

This appendix is normative.

## C.1. SGML Open Catalog Entry for XHTML 1.1

This section contains the SGML Open Catalog-format definition [CATALOG] of the public identifiers for XHTML 1.1.

    -- .......................................................................... --
    -- File catalog  ............................................................ --

    --  XHTML 1.1 Catalog Data File

        Revision:  @(#)xhtml11.cat 1.9 2001/04/04 SMI

        See "Entity Management", SGML Open Technical Resolution 9401 for detailed
        information on supplying and using catalog data. This document is available
        from OASIS at URL:

            <http://www.oasis-open.org/html/tr9401.html>
    --

    -- .......................................................................... --
    -- SGML declaration associated with XHTML  .................................. --

    OVERRIDE YES

    SGMLDECL "xml1.dcl"

    -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --

    -- XHTML 1.1 DTD modular driver file  ....................................... --

    PUBLIC "-//W3C//DTD XHTML 1.1//EN"                                "xhtml11.dtd"

    -- XHTML 1.1 framework modules .............................................. --

    PUBLIC "-//W3C//ENTITIES XHTML 1.1 Document Model 1.0//EN"        "xhtml11-model-1.mod"

    -- End of catalog data  ..................................................... --
    -- .......................................................................... --

## C.2. XHTML 1.1 Driver

This section contains the driver for the XHTML 1.1 document type implementation as an XML DTD. It relies upon XHTML module implementations defined in [XHTMLMOD] and in [RUBY].

    <!-- ....................................................................... -->
    <!-- XHTML 1.1 DTD  ........................................................ -->
    <!-- file: xhtml11.dtd
    -->

    <!-- XHTML 1.1 DTD

         This is XHTML, a reformulation of HTML as a modular XML application.

         The Extensible HyperText Markup Language (XHTML)
         Copyright 1998-2008 World Wide Web Consortium
            (Massachusetts Institute of Technology, European Research Consortium
             for Informatics and Mathematics, Keio University).
             All Rights Reserved.

         Permission to use, copy, modify and distribute the XHTML DTD and its
         accompanying documentation for any purpose and without fee is hereby
         granted in perpetuity, provided that the above copyright notice and
         this paragraph appear in all copies.  The copyright holders make no
         representation about the suitability of the DTD for any purpose.

         It is provided "as is" without expressed or implied warranty.

            Author:     Murray M. Altheim <altheim@eng.sun.com>
            Revision:   $Id: xhtml11.dtd,v 1.30 2009/06/24 17:24:55 ahby Exp $

    -->
    <!-- This is the driver file for version 1.1 of the XHTML DTD.

         Please use this public identifier to identify it:

             "-//W3C//DTD XHTML 1.1//EN"
    -->
    <!ENTITY % XHTML.version  "-//W3C//DTD XHTML 1.1//EN" >

    <!-- Use this URI to identify the default namespace:

             "http://www.w3.org/1999/xhtml"

         See the Qualified Names module for information
         on the use of namespace prefixes in the DTD.

         Note that XHTML namespace elements are not prefixed by default,
         but the XHTML namespace prefix is defined as "xhtml" so that
         other markup languages can extend this one and use the XHTML
         prefixed global attributes if required.

    -->
    <!ENTITY % NS.prefixed "IGNORE" >
    <!ENTITY % XHTML.prefix "xhtml" >

    <!-- Be sure to include prefixed global attributes - we don't need
         them, but languages that extend XHTML 1.1 might.
    -->
    <!ENTITY % XHTML.global.attrs.prefixed "INCLUDE" >

    <!-- Reserved for use with the XLink namespace:
    -->
    <!ENTITY % XLINK.xmlns "" >
    <!ENTITY % XLINK.xmlns.attrib "" >

    <!-- For example, if you are using XHTML 1.1 directly, use the public
         identifier in the DOCTYPE declaration, with the namespace declaration
         on the document element to identify the default namespace:

           <?xml version="1.0"?>
           <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
                                 "http://www.w3.org/MarkUp/DTD/xhtml11.dtd">
           <html xmlns="http://www.w3.org/1999/xhtml"
                 xml:lang="en">
           ...
           </html>

         Revisions:
         (none)
    -->

    <!-- reserved for future use with document profiles -->
    <!ENTITY % XHTML.profile  "" >

    <!-- ensure XHTML Notations are disabled -->
    <!ENTITY % xhtml-notations.module "IGNORE" >

    <!-- Bidirectional Text features
         This feature-test entity is used to declare elements
         and attributes used for bidirectional text support.
    -->
    <!ENTITY % XHTML.bidi  "INCLUDE" >

    <?doc type="doctype" role="title" { XHTML 1.1 } ?>

    <!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->

    <!-- Pre-Framework Redeclaration placeholder  .................... -->
    <!-- this serves as a location to insert markup declarations
         into the DTD prior to the framework declarations.
    -->
    <!ENTITY % xhtml-prefw-redecl.module "IGNORE" >
    <![%xhtml-prefw-redecl.module;[
    %xhtml-prefw-redecl.mod;
    <!-- end of xhtml-prefw-redecl.module -->]]>

    <!ENTITY % xhtml-events.module "INCLUDE" >

    <!-- Inline Style Module  ........................................ -->
    <!ENTITY % xhtml-inlstyle.module "INCLUDE" >
    <![%xhtml-inlstyle.module;[
    <!ENTITY % xhtml-inlstyle.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Inline Style 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-inlstyle-1.mod" >
    %xhtml-inlstyle.mod;]]>

    <!-- declare Document Model module instantiated in framework
    -->
    <!ENTITY % xhtml-model.mod
         PUBLIC "-//W3C//ENTITIES XHTML 1.1 Document Model 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml11-model-1.mod" >

    <!-- adding the lang attribute into the I18N collection -->

    <!ENTITY % xhtml-datatypes.module "INCLUDE" >
    <![%xhtml-datatypes.module;[
    <!ENTITY % xhtml-datatypes.mod
         PUBLIC "-//W3C//ENTITIES XHTML Datatypes 1.0//EN"
                "xhtml-datatypes-1.mod" >
    %xhtml-datatypes.mod;]]>

    <!ENTITY % lang.attrib
         "xml:lang     %LanguageCode.datatype;  #IMPLIED
          lang         %LanguageCode.datatype;  #IMPLIED"
    >

    <!-- Modular Framework Module (required) ......................... -->
    <!ENTITY % xhtml-framework.module "INCLUDE" >
    <![%xhtml-framework.module;[
    <!ENTITY % xhtml-framework.mod
         PUBLIC "-//W3C//ENTITIES XHTML Modular Framework 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-framework-1.mod" >
    %xhtml-framework.mod;]]>

    <!-- Post-Framework Redeclaration placeholder  ................... -->
    <!-- this serves as a location to insert markup declarations
         into the DTD following the framework declarations.
    -->
    <!ENTITY % xhtml-postfw-redecl.module "IGNORE" >
    <![%xhtml-postfw-redecl.module;[
    %xhtml-postfw-redecl.mod;
    <!-- end of xhtml-postfw-redecl.module -->]]>

    <!-- Text Module (Required)  ..................................... -->
    <!ENTITY % xhtml-text.module "INCLUDE" >
    <![%xhtml-text.module;[
    <!ENTITY % xhtml-text.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Text 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-text-1.mod" >
    %xhtml-text.mod;]]>

    <!-- Hypertext Module (required) ................................. -->
    <!ENTITY % xhtml-hypertext.module "INCLUDE" >
    <![%xhtml-hypertext.module;[
    <!ENTITY % xhtml-hypertext.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Hypertext 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-hypertext-1.mod" >
    %xhtml-hypertext.mod;]]>

    <!-- Lists Module (required)  .................................... -->
    <!ENTITY % xhtml-list.module "INCLUDE" >
    <![%xhtml-list.module;[
    <!ENTITY % xhtml-list.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Lists 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-list-1.mod" >
    %xhtml-list.mod;]]>

    <!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->

    <!-- Edit Module  ................................................ -->
    <!ENTITY % xhtml-edit.module "INCLUDE" >
    <![%xhtml-edit.module;[
    <!ENTITY % xhtml-edit.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Editing Elements 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-edit-1.mod" >
    %xhtml-edit.mod;]]>

    <!-- BIDI Override Module  ....................................... -->
    <!ENTITY % xhtml-bdo.module "%XHTML.bidi;" >
    <![%xhtml-bdo.module;[
    <!ENTITY % xhtml-bdo.mod
         PUBLIC "-//W3C//ELEMENTS XHTML BIDI Override Element 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-bdo-1.mod" >
    %xhtml-bdo.mod;]]>

    <!-- Ruby Module  ................................................ -->
    <!ENTITY % Ruby.common.attlists "INCLUDE" >
    <!ENTITY % Ruby.common.attrib "%Common.attrib;" >
    <!ENTITY % xhtml-ruby.module "INCLUDE" >
    <![%xhtml-ruby.module;[
    <!ENTITY % xhtml-ruby.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Ruby 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-ruby-1.mod" >
    %xhtml-ruby.mod;]]>

    <!-- Presentation Module  ........................................ -->
    <!ENTITY % xhtml-pres.module "INCLUDE" >
    <![%xhtml-pres.module;[
    <!ENTITY % xhtml-pres.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Presentation 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-pres-1.mod" >
    %xhtml-pres.mod;]]>

    <!-- Link Element Module  ........................................ -->
    <!ENTITY % xhtml-link.module "INCLUDE" >
    <![%xhtml-link.module;[
    <!ENTITY % xhtml-link.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Link Element 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-link-1.mod" >
    %xhtml-link.mod;]]>

    <!-- Document Metainformation Module  ............................ -->
    <!ENTITY % xhtml-meta.module "INCLUDE" >
    <![%xhtml-meta.module;[
    <!ENTITY % xhtml-meta.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Metainformation 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-meta-1.mod" >
    %xhtml-meta.mod;]]>

    <!-- Base Element Module  ........................................ -->
    <!ENTITY % xhtml-base.module "INCLUDE" >
    <![%xhtml-base.module;[
    <!ENTITY % xhtml-base.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Base Element 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-base-1.mod" >
    %xhtml-base.mod;]]>

    <!-- Scripting Module  ........................................... -->
    <!ENTITY % xhtml-script.module "INCLUDE" >
    <![%xhtml-script.module;[
    <!ENTITY % xhtml-script.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Scripting 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-script-1.mod" >
    %xhtml-script.mod;]]>

    <!-- Style Sheets Module  ......................................... -->
    <!ENTITY % xhtml-style.module "INCLUDE" >
    <![%xhtml-style.module;[
    <!ENTITY % xhtml-style.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Style Sheets 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-style-1.mod" >
    %xhtml-style.mod;]]>

    <!-- Image Module  ............................................... -->
    <!ENTITY % xhtml-image.module "INCLUDE" >
    <![%xhtml-image.module;[
    <!ENTITY % xhtml-image.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Images 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-image-1.mod" >
    %xhtml-image.mod;]]>

    <!-- Client-side Image Map Module  ............................... -->
    <!ENTITY % xhtml-csismap.module "INCLUDE" >
    <![%xhtml-csismap.module;[
    <!ENTITY % xhtml-csismap.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Client-side Image Maps 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-csismap-1.mod" >
    %xhtml-csismap.mod;]]>

    <!-- Server-side Image Map Module  ............................... -->
    <!ENTITY % xhtml-ssismap.module "INCLUDE" >
    <![%xhtml-ssismap.module;[
    <!ENTITY % xhtml-ssismap.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Server-side Image Maps 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-ssismap-1.mod" >
    %xhtml-ssismap.mod;]]>

    <!-- Param Element Module  ....................................... -->
    <!ENTITY % xhtml-param.module "INCLUDE" >
    <![%xhtml-param.module;[
    <!ENTITY % xhtml-param.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Param Element 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-param-1.mod" >
    %xhtml-param.mod;]]>

    <!-- Embedded Object Module  ..................................... -->
    <!ENTITY % xhtml-object.module "INCLUDE" >
    <![%xhtml-object.module;[
    <!ENTITY % xhtml-object.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Embedded Object 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-object-1.mod" >
    %xhtml-object.mod;]]>

    <!-- Tables Module ............................................... -->
    <!ENTITY % xhtml-table.module "INCLUDE" >
    <![%xhtml-table.module;[
    <!ENTITY % xhtml-table.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Tables 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-table-1.mod" >
    %xhtml-table.mod;]]>

    <!-- Forms Module  ............................................... -->
    <!ENTITY % xhtml-form.module "INCLUDE" >
    <![%xhtml-form.module;[
    <!ENTITY % xhtml-form.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Forms 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-form-1.mod" >
    %xhtml-form.mod;]]>

    <!-- Legacy Markup ............................................... -->
    <!ENTITY % xhtml-legacy.module "IGNORE" >
    <![%xhtml-legacy.module;[
    <!ENTITY % xhtml-legacy.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Legacy Markup 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-legacy-1.mod" >
    %xhtml-legacy.mod;]]>

    <!-- Document Structure Module (required)  ....................... -->
    <!ENTITY % xhtml-struct.module "INCLUDE" >
    <![%xhtml-struct.module;[
    <!ENTITY % xhtml-struct.mod
         PUBLIC "-//W3C//ELEMENTS XHTML Document Structure 1.0//EN"
                "http://www.w3.org/MarkUp/DTD/xhtml-struct-1.mod" >
    %xhtml-struct.mod;]]>

    <!-- end of XHTML 1.1 DTD  ................................................. -->
    <!-- ....................................................................... -->

## C.3. XHTML 1.1 Customizations

An XHTML Family Document Type (such as XHTML 1.1) must define the content model that it uses. This is done through a separate content model module that is instantiated by the XHTML Modular Framework. The content model module and the XHTML 1.1 Driver (above) work together to customize the module implementations to the document type's specific requirements. The content model module for XHTML 1.1 is defined below:

    <!-- ....................................................................... -->
    <!-- XHTML 1.1 Document Model Module  ...................................... -->
    <!-- file: xhtml11-model-1.mod

         This is XHTML 1.1, a reformulation of HTML as a modular XML application.
         Copyright 1998-2008 W3C (MIT, ERCIM, Keio), All Rights Reserved.
         Revision: $Id: xhtml11-model-1.mod,v 1.18 2009/06/24 17:24:55 ahby Exp $ SMI

         This DTD module is identified by the PUBLIC and SYSTEM identifiers:

           PUBLIC "-//W3C//ENTITIES XHTML 1.1 Document Model 1.0//EN"
           SYSTEM "http://www.w3.org/MarkUp/DTD/xhtml11-model-1.mod"

         Revisions:
         (none)
         ....................................................................... -->

    <!-- XHTML 1.1 Document Model

         This module describes the groupings of elements that make up
         common content models for XHTML elements.

         XHTML has three basic content models:

             %Inline.mix;  character-level elements
             %Block.mix;   block-like elements, eg., paragraphs and lists
             %Flow.mix;    any block or inline elements

         Any parameter entities declared in this module may be used
         to create element content models, but the above three are
         considered 'global' (insofar as that term applies here).

         The reserved word '#PCDATA' (indicating a text string) is now
         included explicitly with each element declaration that is
         declared as mixed content, as XML requires that this token
         occur first in a content model specification.
    -->
    <!-- Extending the Model

         While in some cases this module may need to be rewritten to
         accommodate changes to the document model, minor extensions
         may be accomplished by redeclaring any of the three *.extra;
         parameter entities to contain extension element types as follows:

             %Misc.extra;    whose parent may be any block or
                             inline element.

             %Inline.extra;  whose parent may be any inline element.

             %Block.extra;   whose parent may be any block element.

         If used, these parameter entities must be an OR-separated
         list beginning with an OR separator ("|"), eg., "| a | b | c"

         All block and inline *.class parameter entities not part
         of the *struct.class classes begin with "| " to allow for
         exclusion from mixes.
    -->

    <!-- ..............  Optional Elements in head  .................. -->

    <!ENTITY % HeadOpts.mix
         "( %script.qname; | %style.qname; | %meta.qname;
          | %link.qname; | %object.qname; )*"
    >

    <!-- .................  Miscellaneous Elements  .................. -->

    <!-- ins and del are used to denote editing changes
    -->
    <!ENTITY % Edit.class "| %ins.qname; | %del.qname;" >

    <!-- script and noscript are used to contain scripts
         and alternative content
    -->
    <!ENTITY % Script.class "| %script.qname; | %noscript.qname;" >

    <!ENTITY % Misc.extra "" >

    <!-- These elements are neither block nor inline, and can
         essentially be used anywhere in the document body.
    -->
    <!ENTITY % Misc.class
         "%Edit.class;
          %Script.class;
          %Misc.extra;"
    >

    <!-- ....................  Inline Elements  ...................... -->

    <!ENTITY % InlStruct.class "%br.qname; | %span.qname;" >

    <!ENTITY % InlPhras.class
         "| %em.qname; | %strong.qname; | %dfn.qname; | %code.qname;
          | %samp.qname; | %kbd.qname; | %var.qname; | %cite.qname;
          | %abbr.qname; | %acronym.qname; | %q.qname;" >

    <!ENTITY % InlPres.class
         "| %tt.qname; | %i.qname; | %b.qname; | %big.qname;
          | %small.qname; | %sub.qname; | %sup.qname;" >

    <!ENTITY % I18n.class "| %bdo.qname;" >

    <!ENTITY % Anchor.class "| %a.qname;" >

    <!ENTITY % InlSpecial.class
         "| %img.qname; | %map.qname;
          | %object.qname;" >

    <!ENTITY % InlForm.class
         "| %input.qname; | %select.qname; | %textarea.qname;
          | %label.qname; | %button.qname;" >

    <!ENTITY % Inline.extra "" >

    <!ENTITY % Ruby.class "| %ruby.qname;" >

    <!-- %Inline.class; includes all inline elements,
         used as a component in mixes
    -->
    <!ENTITY % Inline.class
         "%InlStruct.class;
          %InlPhras.class;
          %InlPres.class;
          %I18n.class;
          %Anchor.class;
          %InlSpecial.class;
          %InlForm.class;
          %Ruby.class;
          %Inline.extra;"
    >

    <!-- %InlNoRuby.class; includes all inline elements
         except ruby, used as a component in mixes
    -->
    <!ENTITY % InlNoRuby.class
         "%InlStruct.class;
          %InlPhras.class;
          %InlPres.class;
          %I18n.class;
          %Anchor.class;
          %InlSpecial.class;
          %InlForm.class;
          %Inline.extra;"
    >

    <!-- %NoRuby.content; includes all inlines except ruby
    -->
    <!ENTITY % NoRuby.content
         "( #PCDATA
          | %InlNoRuby.class;
          %Misc.class; )*"
    >

    <!-- %InlNoAnchor.class; includes all non-anchor inlines,
         used as a component in mixes
    -->
    <!ENTITY % InlNoAnchor.class
         "%InlStruct.class;
          %InlPhras.class;
          %InlPres.class;
          %I18n.class;
          %InlSpecial.class;
          %InlForm.class;
          %Ruby.class;
          %Inline.extra;"
    >

    <!-- %InlNoAnchor.mix; includes all non-anchor inlines
    -->
    <!ENTITY % InlNoAnchor.mix
         "%InlNoAnchor.class;
          %Misc.class;"
    >

    <!-- %Inline.mix; includes all inline elements, including %Misc.class;
    -->
    <!ENTITY % Inline.mix
         "%Inline.class;
          %Misc.class;"
    >

    <!-- .....................  Block Elements  ...................... -->

    <!-- In the HTML 4.0 DTD, heading and list elements were included
         in the %block; parameter entity. The %Heading.class; and
         %List.class; parameter entities must now be included explicitly
         on element declarations where desired.
    -->

    <!ENTITY % Heading.class
         "%h1.qname; | %h2.qname; | %h3.qname;
          | %h4.qname; | %h5.qname; | %h6.qname;" >

    <!ENTITY % List.class "%ul.qname; | %ol.qname; | %dl.qname;" >

    <!ENTITY % Table.class "| %table.qname;" >

    <!ENTITY % Form.class  "| %form.qname;" >

    <!ENTITY % Fieldset.class  "| %fieldset.qname;" >

    <!ENTITY % BlkStruct.class "%p.qname; | %div.qname;" >

    <!ENTITY % BlkPhras.class
         "| %pre.qname; | %blockquote.qname; | %address.qname;" >

    <!ENTITY % BlkPres.class "| %hr.qname;" >

    <!ENTITY % BlkSpecial.class
         "%Table.class;
          %Form.class;
          %Fieldset.class;"
    >

    <!ENTITY % Block.extra "" >

    <!-- %Block.class; includes all block elements,
         used as an component in mixes
    -->
    <!ENTITY % Block.class
         "%BlkStruct.class;
          %BlkPhras.class;
          %BlkPres.class;
          %BlkSpecial.class;
          %Block.extra;"
    >

    <!-- %Block.mix; includes all block elements plus %Misc.class;
    -->
    <!ENTITY % Block.mix
         "%Heading.class;
          | %List.class;
          | %Block.class;
          %Misc.class;"
    >

    <!-- ................  All Content Elements  .................. -->

    <!-- %Flow.mix; includes all text content, block and inline
    -->
    <!ENTITY % Flow.mix
         "%Heading.class;
          | %List.class;
          | %Block.class;
          | %Inline.class;
          %Misc.class;"
    >

    <!-- end of xhtml11-model-1.mod -->