W3C

XHTML™ 1.1 - Module-based XHTML - Second Edition

W3C Recommendation 23 November 2010

This version:
http://www.w3.org/TR/2010/REC-xhtml11-20101123
Latest version:
http://www.w3.org/TR/xhtml11
Previous version:
http://www.w3.org/TR/2010/PER-xhtml11-20100716
Diff from previous version:
xhtml11-diff.html
Previous recommendation:
http://www.w3.org/TR/2001/REC-xhtml11-20010531
Diff-marked version from previous recommendation:
xhtml11-rec-diff.html
Editors:
Shane McCarron , Applied Testing and Technology, Inc. shane@aptest.com
Masayasu Ishikawa , (until March 2007 while at W3C )
Version 1.1 Editors:
Murray Altheim , Sun Microsystems
Shane McCarron , Applied Testing and Technology

Please refer to the errata for this document, which may include some normative corrections. See also translations .

This document is also available in these non-normative formats: Single XHTML+RDFa 1.0 file , PostScript version , PDF version , ZIP archive , and Gzip'd TAR archive .


Abstract

This specification defines an XHTML document type that is based upon the module framework and modules defined in XHTML Modularization [ XHTMLMOD ]. The purpose of this document type is to serve as the basis for future extended XHTML 'family' document types, and to provide a consistent, forward-looking document type cleanly separated from the deprecated, legacy functionality of HTML 4 [ HTML4 ] that was brought forward into the XHTML 1.0 [ XHTML1 ] document types. This document type is most similar to XHTML 1.0 Strict, built using XHTML Modules. This means that many facilities available in other XHTML Family document types (e.g., XHTML Frames) are not available in this document type. These other facilities are available through modules defined in XHTML Modularization, and document authors are free to define document types based upon XHTML 1.1 that use these facilities (see [ XHTMLMOD ] for information on creating new document types).

Status of this document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.

This document has been reviewed by W3C Members, by software developers, and by other W3C groups and interested parties, and is endorsed by the Director as a W3C Recommendation. It is a stable document and may be used as reference material or cited from another document. W3C's role in making the Recommendation is to draw attention to the specification and to promote its widespread deployment. This enhances the functionality and interoperability of the Web.

This document supersedes the previous edition of XHTML 1.1. It reflects clarifications and corrections as a result of many years of use by the community. It also includes an XML Schema implementation of the language, and integrates the lang attribute to increase compatibility with User Agents and Assistive Technologies. A version that shows the specific changes from the previous Recommendation is available in diff-marked form .

This document has been produced by the W3C XHTML 2 Working Group as part of the HTML Activity . The goals of the XHTML 2 Working Group are discussed in the XHTML 2 Working Group charter .

This document is governed by the 24 January 2002 CPP as amended by the W3C Patent Policy Transition Procedure . W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent.

Public discussion of HTML takes place on www-html@w3.org ( archive ). To subscribe send an email to www-html-request@w3.org with the word subscribe in the subject line.

Please report errors in this document to www-html-editor@w3.org ( archive ).

The English version of this specification is the only normative version. Information about translations of this document is available at http://www.w3.org/MarkUp/translations.

A list of current W3C Recommendations and other technical documents can be found at http://www.w3.org/TR .

Quick Table of Contents

Full Table of Contents

1. Introduction

This section is normative .

With the introduction of the XHTML family of modules and document types, the W3C has helped move the Internet content-development community from the days of malformed, non-standard markup into the well formed, valid world of XML [ XML ]. In XHTML 1.0, this move was moderated by a goal of providing for easy migration of existing, HTML 4 (or earlier) based content to XHTML and XML. With the advent of the XHTML modules defined in XHTML Modularization, the W3C has removed support for deprecated elements and attributes from the XHTML family. These elements and attributes were largely presentation oriented functionality that is better handled via style sheets or client-specific default behavior.

Going forward, XHTML family document types will be based upon this new, more structural functional collection. In this specification, the W3C's HTML Working Group has defined an initial document type based solely upon modules. This document type is designed to be portable to a broad collection of client devices, and applicable to the majority of Internet content. Content developers who base their content upon the functionality expressed in this specification can be confident that it will be consistently portable across XHTML family conforming user agents.

2. Conformance Definition

This section is normative .

The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119] .

2.1. Document Conformance

This version of XHTML provides a definition of strictly conforming XHTML documents, which are restricted to elements and attributes from the XHTML namespace.

2.1.1. Strictly Conforming Documents

A strictly conforming XHTML 1.1 document is a document that requires only the facilities described as mandatory in this specification. Such a document MUST meet all the following criteria:

  1. The document MUST conform to the constraints expressed in the schemas in Appendix D - XHTML 1.1 Schema and Appendix C - XHTML 1.1 Document Type Definition .

  2. The local part of the root element of the document MUST be html .

  3. The start tag of the root element of the document MUST explicitly contain an xmlns declaration for the XHTML namespace [ XMLNAMES ]. The namespace URI for XHTML is defined to be http://www.w3.org/1999/xhtml .

    The start tag MAY also contain the declaration of the XML Schema Instance Namespace and an XML Schema Instance schemaLocation attribute [ XMLSCHEMA ]. Such an attribute would associate the XHTML namespace http://www.w3.org/1999/xhtml with the XML Schema at the URI http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd .

    Sample root element

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.w3.org/1999/xhtml
                              http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd"
    >
    
  4. There MUST be a DOCTYPE declaration in the document prior to the root element. If present, the PUBLIC identifier included in the DOCTYPE declaration MUST reference the DTD found in Appendix A using its Formal Public Identifier. The SYSTEM identifier MAY be modified as appropriate.
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    
  5. The start tag MAY also contain a version attribute that declares the version of XHTML in use. The version of this version of XHTML is -//W3C//DTD XHTML 1.1//EN .

Example of an XHTML 1.1 document

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html version="-//W3C//DTD XHTML 1.1//EN"
      xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/1999/xhtml
                          http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd"
>
  <head>
    <title>Virtual Library</title>
  </head>
  <body>
    <p>Moved to <a href="http://example.org/">example.org</a>.</p>
  </body>
</html>

Note that in this example, the XML declaration is included. An XML declaration like the one above is not required in all XML documents. XHTML document authors SHOULD use XML declarations in all their documents. XHTML document authors MUST use an XML declaration when the character encoding of the document is other than the default UTF-8 or UTF-16 and no encoding is specified by a higher-level protocol.

XHTML 1.1 documents SHOULD be labeled with the Internet Media Type "application/xhtml+xml" as defined in [ RFC3236 ] . For further information on using media types with XHTML, see the informative note [ XHTMLMIME ].

2.2. User Agent Conformance

A conforming user agent MUST meet all user agent conformance requirements defined in [ XHTMLMOD ].

3. The XHTML 1.1 Document Type

This section is normative .

The XHTML 1.1 document type is a fully functional document type with rich semantics. It is not, however, as varied in functionality as the XHTML 1.0 Transitional or Frameset document types. These document types defined many presentational components that are better handled through style sheets or other similar mechanisms. Moreover, since the XHTML 1.1 document type is based exclusively upon the facilities defined in the XHTML modules [ XHTMLMOD ], it does not contain any of the deprecated functionality of XHTML 1.0 nor of HTML 4. Despite these exceptions, or perhaps because of them, the XHTML 1.1 document type is a solid basis for future document types that are targeted at varied user agent environments.

The XHTML 1.1 document type is made up of the following XHTML modules. The elements, attributes, and minimal content models associated with these modules are defined in "XHTML Modularization" [ XHTMLMOD ]). The elements are listed here for information purposes, but the definitions in "XHTML Modularization" should be considered definitive. In the on-line version of this document, the module names in the list below link into the definitions of the modules within the current version of "XHTML Modularization".

Structure Module
body, head, html, title
Text Module
abbr, acronym, address, blockquote, br, cite, code, dfn, div, em, h1, h2, h3, h4, h5, h6, kbd, p, pre, q, samp, span, strong, var
Hypertext Module
a
List Module
dl, dt, dd, ol, ul, li
Object Module
object, param
Presentation Module
b, big, hr, i, small, sub, sup, tt
Edit Module
del, ins
Bidirectional Text Module
bdo
Forms Module
button, fieldset, form, input, label, legend, select, optgroup, option, textarea
Tables Module
caption, col, colgroup, table, tbody, td, tfoot, th, thead, tr
Image Module
img
Client-side Image Map Module
area, map
Server-side Image Map Module
Attribute ismap on img
Intrinsic Events Module
Events attributes
Metainformation Module
meta
Scripting Module
noscript, script
Style Sheet Module
style element
Style Attribute Module Deprecated
style attribute
Link Module
link
Base Module
base

XHTML 1.1 also uses the Ruby Annotation module as defined in [ RUBY ]:

Ruby Annotation Module
ruby, rbc, rtc, rb, rt, rp

This specification also adds the lang attribute to the I18N attribute collection as defined in [ XHTMLMOD ]. The lang attribute is defined in [ HTML4 ]. When this attribute and the xml:lang attribute are specified on the same element, the xml:lang attribute takes precedence. When both lang and xml:lang are specified on the same element, they SHOULD have the same value.

There are no additional definitions required by this document type. An implementation of this document type as an XML Schema is defined in Appendix D , and as an XML DTD is defined in Appendix C . If there is any discrepancy between the language as defined in this section and the implementations in the appendices, the definition in this section MUST take precedence.

A. Changes from XHTML 1.0 Strict

This appendix is informative .

This Appendix describes the differences between XHTML 1.1 and XHTML 1.0 Strict. XHTML 1.1 represents a departure from both HTML 4 and XHTML 1.0. Most significant is the removal of features that were deprecated. In general, the strategy is to define a markup language that is rich in structural functionality, but that relies upon style sheets for presentation.

The differences can be summarized as follows:

  1. On the a and map elements, the name attribute has been removed in favor of the id attribute (as defined in [ XHTMLMOD ]).
  2. The " ruby " collection of elements has been added (as defined in [ RUBY ]).

B. References

This appendix is normative .

B.1. Normative References

[HTML4]
HTML 4.01 Specification , W3C Recommendation, Dave Raggett, Arnaud Le Hors, Ian Jacobs, 24 December 1999.
See: http://www.w3.org/TR/1999/REC-html401-19991224
[RUBY]
Ruby Annotation , W3C Recommendation, Marcin Sawicki, et al., 31 May 2001.
See: http://www.w3.org/TR/2001/REC-ruby-20010531
[ XHTMLMOD ]
XHTML Modularization 1.1 Second Edition , W3C Recommendation, Shane McCarron, ed. , 29 July 2010.
See: http://www.w3.org/TR/2010/REC-xhtml-modularization-20100729
[ XML ]
" Extensible Markup Language (XML) 1.0 (Fourth Edition) ", W3C Recommendation, T. Bray et al. , eds. , 16 August 2006.
Available at: http://www.w3.org/TR/2006/REC-xml-20060816
The latest version is available at: http://www.w3.org/TR/REC-xml
[XMLNAMES]
" Namespaces in XML (Second Edition) ", W3C Recommendation, T. Bray, D. Hollander, A. Layman, eds. , 17 August 2006.
Available at: http://www.w3.org/TR/2006/REC-xml-names-20060816
[XMLSCHEMA]
" XML Schema Part 1: Structures Second Edition ", W3C Recommendation, H. S. Thompson et al. , eds. , 28 October 2004.
Available at: http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/
See also " XML Schema Part 2: Datatypes Second Edition ", available at: http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/

B.2. Informative References

[CATALOG]
Entity Management: OASIS Technical Resolution 9401:1997 (Amendment 2 to TR 9401) , Paul Grosso, Chair, Entity Management Subcommittee, SGML Open, 10 September 1997.
See: http://www.oasis-open.org/html/a401.htm
[RFC2119]
" Key words for use in RFCs to indicate requirement levels ", RFC 2119, S. Bradner, March 1997.
Available at: http://www.ietf.org/rfc/rfc2119.txt
[RFC2854]
" The 'text/html' Media Type ", D. Connely, L. Masinter, January 2000.
Available at: http://www.ietf.org/rfc/rfc2854.txt
[RFC3236]
" The 'application/xhtml+xml' Media Type ", M. Baker, P. Stark, January 2002.
Available at: http://www.ietf.org/rfc/rfc3236.txt
[XHTML1]
XHTML 1.0: The Extensible HyperText Markup Language (Second Edition) , W3C Recommendation, Steven Pemberton, et al., 26 January 2000, revised 1 August 2002.
See: http://www.w3.org/TR/2002/REC-xhtml1-20020801
[XHTMLMIME]
" XHTML Media Types ", Shane McCarron, 16 January 2009, or its successors.
Latest version available at: http://www.w3.org/TR/xhtml-media-types

C. XHTML 1.1 Document Type Definition

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-diff.html,v 1.1 2018/03/20 05:53:11 plehegar 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-diff.html,v 1.1 2018/03/20 05:53:11 plehegar 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 -->

D. XHTML 1.1 XML Schema Definition

This appendix is normative .

D.1. XHTML 1.1 Schema Driver

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

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.w3.org/1999/xhtml"
    xmlns:xh11d="http://www.w3.org/1999/xhtml/datatypes/"
    xmlns="http://www.w3.org/1999/xhtml"
    elementFormDefault="qualified" >
    <xs:annotation>
        <xs:documentation>
      This is the XML Schema driver for XHTML 1.1.
      Please use this namespace for XHTML elements:
         "http://www.w3.org/1999/xhtml"
      $Id: xhtml11-diff.html,v 1.1 2018/03/20 05:53:11 plehegar Exp $
    </xs:documentation>
        <xs:documentation source="xhtml-copyright-1.xsd"/>
    </xs:annotation>
    <xs:annotation>
        <xs:documentation>
      This is XHTML, a reformulation of HTML as a modular XML application
      The Extensible HyperText Markup Language (XHTML)
      Copyright &#169;1998-2007 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 Schema
      modules and their accompanying xs: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
      these XML Schema modules for any purpose.
      They are provided "as is" without expressed or implied warranty.
    </xs:documentation>
    </xs:annotation>
    <xs:annotation>
        <xs:documentation>
      This is the Schema Driver file for XHTML1.1
      Document Type
     This schema
        + imports external schemas (xml.xsd)
        + refedines (and include)s schema modules for XHTML1.1 Document Type.
        + includes Schema for Named content model for the
          XHTML1.1 Document Type
        XHTML1.1 Document Type includes the following Modules
           XHTML Core modules (Required for XHTML Family Conformance)
            +  text
            +  hypertext
            +  lists
            +  structure
           Other XHTML modules
            +  Edit
            +  Bdo
            +  Presentational
            +  Link
            +  Meta
            +  Base
            +  Scripting
            +  Style
            +  Image
            +  Applet
            +  Object
            +  Param (Applet/Object modules require Param Module)
            +  Tables
            +  Forms
            +  Client side image maps
            +  Server side image maps
            +  Ruby
    </xs:documentation>
    </xs:annotation>
    <xs:import
        namespace="http://www.w3.org/XML/1998/namespace"
        schemaLocation="http://www.w3.org/2001/xml.xsd">
        <xs:annotation>
            <xs:documentation>
         This import brings in the XML namespace attributes
         The XML attributes are used by various modules.
       </xs:documentation>
        </xs:annotation>
    </xs:import>
    <xs:include
        schemaLocation="xhtml11-model-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Document Model module for the XHTML1.1 Document Type.
        This schema file defines all named models used by XHTML
        Modularization Framework for XHTML1.1 Document Type
      </xs:documentation>
        </xs:annotation>
    </xs:include>
    <xs:include
        schemaLocation="xhtml11-modules-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Schema that includes all modules (and redefinitions)
        for XHTML1.1 Document Type.                
           </xs:documentation>
        </xs:annotation>
    </xs:include>
</xs:schema>

D.2. XHTML 1.1 Schema Modules

XHTML Family implementations using XML Schema are required to provide their own schema module that imports the required modules from XHTML Modularization.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           elementFormDefault="qualified" 
           xmlns:xh11d="http://www.w3.org/1999/xhtml/datatypes/" >
    <xs:import namespace="http://www.w3.org/1999/xhtml/datatypes/" 
        schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-datatypes-1.xsd" />
    <xs:annotation>
        <xs:documentation>
      This schema includes all modules for XHTML1.1 Document Type.
      $Id: xhtml11-diff.html,v 1.1 2018/03/20 05:53:11 plehegar Exp $
    </xs:documentation>
        <xs:documentation source="xhtml-copyright-1.xsd"/>
    </xs:annotation>
    <xs:annotation>
        <xs:documentation>
     This schema includes all modules (and redefinitions)
     for XHTML1.1 Document Type.
     XHTML1.1 Document Type includes the following Modules
       XHTML Core modules (Required for XHTML Family Conformance)
            +  text
            +  hypertext
            +  lists
            +  structure
       Other XHTML modules
            +  Edit
            +  Bdo
            +  Presentational
            +  Link
            +  Meta
            +  Base
            +  Scripting
            +  Style
            +  Image
            +  Applet
            +  Object
            +  Param (Applet/Object modules require Param Module)
            +  Tables
            +  Target
            +  Forms
            +  Client side image maps
            +  Server side image maps
    </xs:documentation>
    </xs:annotation>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-framework-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Schema Framework Component Modules:
            +  notations
            +  datatypes
            +  common attributes
            +  character entities
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_commonatts"/>
        </xs:annotation>
    </xs:include>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-text-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Text module
        The Text module includes declarations for all core
        text container elements and their attributes.
            +  block phrasal
            +  block structural
            +  inline phrasal
            +  inline structural
        Elements defined here:
          * address, blockquote, pre, h1, h2, h3, h4, h5, h6
          * div, p
          * abbr, acronym, cite, code, dfn, em, kbd, q, samp, strong, var
          * br, span
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410/abstract_modules.html#s_textmodule"/>
        </xs:annotation>
    </xs:include>
    <xs:redefine schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-hypertext-1.xsd">
        <xs:annotation>
            <xs:documentation>
         Hypertext module
         Elements defined here:
          * a
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410/abstract_modules.html#s_hypertextmodule"/>
        </xs:annotation>
        <xs:attributeGroup name="xhtml.a.attlist">
            <xs:attributeGroup ref="xhtml.a.attlist"/>
            <xs:attributeGroup ref="xhtml.a.csim.attlist">
                <xs:annotation>
                    <xs:documentation>
              Redefinition by Client Side Image Map Module
            </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.a.events.attlist">
                <xs:annotation>
                    <xs:documentation>
              Redefinition by XHTML Event Attribute Module
            </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.a.target.attlist">
                <xs:annotation>
                    <xs:documentation>
              Target Module - A Attribute Additions
            </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
    </xs:redefine>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-list-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Lists module
        Elements defined here:
          * dt, dd, dl, ol, ul, li
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410/abstract_modules.html#s_listmodule"/>
        </xs:annotation>
    </xs:include>
    <xs:redefine schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-struct-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Structural module
        Elements defined here:
          * title, head, body, html
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410/abstract_modules.html#s_structuremodule"/>
        </xs:annotation>
        <xs:attributeGroup name="xhtml.version.attrib">
            <xs:annotation>
                <xs:documentation>
            Redefinition by the XHTML11 Markup (for value of version attr)
         </xs:documentation>
            </xs:annotation>
            <xs:attribute name="version" type="xh11d:CDATA" fixed="-//W3C//DTD XHTML 1.1//EN"/>
        </xs:attributeGroup>
        <xs:attributeGroup name="xhtml.body.attlist">
            <xs:attributeGroup ref="xhtml.body.attlist">
                <xs:annotation>
                    <xs:documentation>
              Original Body Attlist
            </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.body.events.attlist">
                <xs:annotation>
                    <xs:documentation>
              Redefinition by XHTML Event Attribute Module
            </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
    </xs:redefine>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-edit-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Edit module
        Elements defined here:
          * ins, del
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_editmodule"/>
        </xs:annotation>
    </xs:include>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-bdo-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Bidirectional element module
        Elements defined here:
          * bdo
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_bdomodule"/>
        </xs:annotation>
    </xs:include>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-pres-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Presentational module
         Elements defined here:
           * hr, b, big, i, small,sub, sup, tt
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_presentationmodule"/>
        </xs:annotation>
    </xs:include>
    <xs:redefine schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-link-1.xsd">
        <xs:annotation>
            <xs:documentation>
                Link module
                Elements defined here:
                   * link
            </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_linkmodule"/>
        </xs:annotation>
        <xs:attributeGroup name="xhtml.link.attlist">
            <xs:annotation>
                <xs:documentation>
            Changes to XHTML Link Attlist
          </xs:documentation>
            </xs:annotation>
            <xs:attributeGroup ref="xhtml.link.attlist">
                <xs:annotation>
                    <xs:documentation>
                Original Link Attributes (declared in Link Module)
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.link.target.attlist">
                <xs:annotation>
                    <xs:documentation>
                      XHTML Target Module - Attribute additions
                     </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
    </xs:redefine>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-meta-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Meta module
        Elements defined here:
        * meta
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_metamodule"/>
        </xs:annotation>
    </xs:include>
    <xs:redefine schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-base-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Base module
        Elements defined here:
          * base
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_basemodule"/>
        </xs:annotation>
        <xs:attributeGroup name="xhtml.base.attlist">
            <xs:annotation>
                <xs:documentation>
            Changes to XHTML base Attlist
          </xs:documentation>
            </xs:annotation>
            <xs:attributeGroup ref="xhtml.base.attlist">
                <xs:annotation>
                    <xs:documentation>
                Original Base Attributes (declared in Base Module)
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.base.target.attlist">
                <xs:annotation>
                    <xs:documentation>
                XHTML Target Module - Attribute additions
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
    </xs:redefine>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-script-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Scripting module
        Elements defined here:
          * script, noscript
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_scriptmodule"/>
        </xs:annotation>
    </xs:include>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-style-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Style module
        Elements defined here:
          * style
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_stylemodule"/>
        </xs:annotation>
    </xs:include>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-inlstyle-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Style attribute module
        Attribute defined here:
          * style
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_styleattributemodule"/>
        </xs:annotation>
    </xs:include>
    <xs:redefine schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-image-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Image module
        Elements defined here:
          * img
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_imagemodule"/>
        </xs:annotation>
        <xs:attributeGroup name="xhtml.img.attlist">
            <xs:attributeGroup ref="xhtml.img.attlist">
                <xs:annotation>
                    <xs:documentation>
                Original Image Attributes (in Image Module)
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.img.csim.attlist">
                <xs:annotation>
                    <xs:documentation>
                Redefinition by Client Side Image Map Module
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.img.ssimap.attlist">
                <xs:annotation>
                    <xs:documentation>
                Redefinition by Server Side Image Module
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
    </xs:redefine>
    <xs:redefine schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-csismap-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Client-side mage maps module
        Elements defined here:
          * area, map
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_imapmodule"/>
        </xs:annotation>
        <xs:attributeGroup name="xhtml.area.attlist">
            <xs:attributeGroup ref="xhtml.area.attlist">
                <xs:annotation>
                    <xs:documentation>
                Original Area Attributes (in CSI Module)
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.area.events.attlist">
                <xs:annotation>
                    <xs:documentation>
                Redefinition by Events Attribute Module
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.area.target.attlist">
                <xs:annotation>
                    <xs:documentation>
                Target Module - Area Attribute Additions
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
    </xs:redefine>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-ssismap-1.xsd">
        <xs:annotation>
            <xs:documentation>
       Server-side image maps module
        Attributes defined here:
          * ismap on img
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_servermapmodule"/>
        </xs:annotation>
    </xs:include>
    <xs:redefine schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-object-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Object module
        Elements defined here:
          * object
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_objectmodule"/>
        </xs:annotation>
        <xs:attributeGroup name="xhtml.object.attlist">
            <xs:attributeGroup ref="xhtml.object.attlist">
                <xs:annotation>
                    <xs:documentation>
                Original Object Attlist
              </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.object.csim.attlist">
                <xs:annotation>
                    <xs:documentation>
                Redefinition by Client Image Map Module
              </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
    </xs:redefine>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-param-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Param module
        Elements defined here:
          * param
      </xs:documentation>
        </xs:annotation>
    </xs:include>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-table-1.xsd">
        <xs:annotation>
            <xs:documentation>
        Tables module
        Elements defined here:
          * table, caption, thead, tfoot, tbody, colgroup, col, tr, th, td
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_tablemodule"/>
        </xs:annotation>
    </xs:include>
    <xs:redefine schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-form-1.xsd">
        <xs:annotation>
            <xs:documentation>
            Forms module
            Elements defined here:
              * form, label, input, select, optgroup, option,
              * textarea, fieldset, legend, button
          </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_extformsmodule"/>
        </xs:annotation>
        <xs:attributeGroup name="xhtml.form.attlist">
            <xs:annotation>
                <xs:documentation>
            Changes to XHTML Form Attlist
          </xs:documentation>
            </xs:annotation>
            <xs:attributeGroup ref="xhtml.form.attlist">
                <xs:annotation>
                    <xs:documentation>
                Original Form Attributes (declared in Forms Module)
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.form.events.attlist">
                <xs:annotation>
                    <xs:documentation>
                XHTML Events Module - Attribute additions
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.form.target.attlist">
                <xs:annotation>
                    <xs:documentation>
                      XHTML Target Module - Attribute additions
                     </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
        <xs:attributeGroup name="xhtml.input.attlist">
            <xs:annotation>
                <xs:documentation>
            Changes to XHTML Form Input Element
          </xs:documentation>
            </xs:annotation>
            <xs:attributeGroup ref="xhtml.input.attlist">
                <xs:annotation>
                    <xs:documentation>
                Original Input Attributes (in Forms Module)
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.input.csim.attlist">
                <xs:annotation>
                    <xs:documentation>
                Redefinition by Client Side Image Map Module
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.input.ssimap.attlist">
                <xs:annotation>
                    <xs:documentation>
                Redefinition by Server Side Image Map Module
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.input.events.attlist">
                <xs:annotation>
                    <xs:documentation>
               Redefinition by Event Attribute Module
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
        <xs:attributeGroup name="xhtml.label.attlist">
            <xs:attributeGroup ref="xhtml.label.attlist">
                <xs:annotation>
                    <xs:documentation>
                Original Label Attributes (in Forms Module)
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.label.events.attlist">
                <xs:annotation>
                    <xs:documentation>
               Redefinition by Event Attribute Module
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
        <xs:attributeGroup name="xhtml.select.attlist">
            <xs:attributeGroup ref="xhtml.select.attlist">
                <xs:annotation>
                    <xs:documentation>
                Original Select Attributes (in Forms Module)
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.select.events.attlist">
                <xs:annotation>
                    <xs:documentation>
               Redefinition by Event Attribute Module
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
        <xs:attributeGroup name="xhtml.textarea.attlist">
            <xs:attributeGroup ref="xhtml.textarea.attlist">
                <xs:annotation>
                    <xs:documentation>
                Original TextArea Attributes (in Forms Module)
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.textarea.events.attlist">
                <xs:annotation>
                    <xs:documentation>
               Redefinition by Event Attribute Module
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
        <xs:attributeGroup name="xhtml.button.attlist">
            <xs:attributeGroup ref="xhtml.button.attlist">
                <xs:annotation>
                    <xs:documentation>
                Original Button Attributes (in Forms Module)
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
            <xs:attributeGroup ref="xhtml.button.events.attlist">
                <xs:annotation>
                    <xs:documentation>
               Redefinition by Event Attribute Module
             </xs:documentation>
                </xs:annotation>
            </xs:attributeGroup>
        </xs:attributeGroup>
    </xs:redefine>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-ruby-1.xsd">
      <xs:annotation>
      <xs:documentation>
        Ruby module
        Elements defined here:
          * ruby, rbc, rtc, rb, rt, rp
        Note that either Ruby or Basic Ruby should be used but not both
      </xs:documentation>
      <xs:documentation source="http://www.w3.org/TR/2001/REC-ruby-20010531/#complex"/>
      </xs:annotation>
    </xs:include>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-events-1.xsd">
        <xs:annotation>
            <xs:documentation>
        XHTML Events Modules
        Attributes defined here:
          XHTML Event Types
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_intrinsiceventsmodule"/>
        </xs:annotation>
    </xs:include>
    <xs:include schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-target-1.xsd">
        <xs:annotation>
            <xs:documentation>
        XHTML Target Attribute Module
        Attributes defined here:
          target
      </xs:documentation>
            <xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_targetmodule"/>
        </xs:annotation>
    </xs:include>
</xs:schema>

D.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:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xh11d="http://www.w3.org/1999/xhtml/datatypes/"
    elementFormDefault="qualified" >
    <xs:import
        namespace="http://www.w3.org/1999/xhtml/datatypes/"
        schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml-datatypes-1.xsd"/>
    <xs:annotation>
        <xs:documentation> 
            This is the XML Schema module of common content models for XHTML11 
            
            $Id: xhtml11-diff.html,v 1.1 2018/03/20 05:53:11 plehegar Exp $ 
        </xs:documentation>
        <xs:documentation source="xhtml-copyright-1.xsd"/>
    </xs:annotation>
    <xs:annotation>
        <xs:documentation> 
            XHTML Document Model 
            This module describes the groupings of elements/attributes 
            that make up common content models for XHTML elements. 
            XHTML has following basic content models: 
               xhtml.Inline.mix; character-level elements
               xhtml.Block.mix; block-like elements, e.g., paragraphs and lists
               xhtml.Flow.mix; any block or inline elements 
               xhtml.HeadOpts.mix; Head Elements 
               xhtml.InlinePre.mix; Special class for pre content model 
               xhtml.InlineNoAnchor.mix; Content model for Anchor 
            
            Any groups declared in this module may be used to create 
            element content models, but the above are considered 'global' 
            (insofar as that term applies here). XHTML has the
            following Attribute Groups 
               xhtml.Core.extra.attrib 
               xhtml.I18n.extra.attrib
               xhtml.Common.extra 
            
            The above attribute Groups are considered Global 
        </xs:documentation>
    </xs:annotation>
    <xs:attributeGroup
        name="xhtml.I18n.extra.attrib">
        <xs:annotation>
            <xs:documentation> Extended I18n attribute </xs:documentation>
        </xs:annotation>
        <xs:attributeGroup
            ref="xhtml.dir.attrib">
            <xs:annotation>
                <xs:documentation> 
                "dir" Attribute from Bi Directional Text (bdo) Module
                </xs:documentation>
            </xs:annotation>
        </xs:attributeGroup>
        <xs:attribute name="lang" type="xh11d:LanguageCode" />
    </xs:attributeGroup>
    <xs:attributeGroup
        name="xhtml.Common.extra">
        <xs:annotation>
            <xs:documentation> Extended Common Attributes </xs:documentation>
        </xs:annotation>
        <xs:attributeGroup
            ref="xhtml.style.attrib">
            <xs:annotation>
                <xs:documentation> 
                "style" attribute from Inline Style Module 
                </xs:documentation>
            </xs:annotation>
        </xs:attributeGroup>
        <xs:attributeGroup ref="xhtml.Events.attrib">
            <xs:annotation>
                <xs:documentation> 
                Attributes from Events Module
                </xs:documentation>
            </xs:annotation>
        </xs:attributeGroup>
    </xs:attributeGroup>
    <xs:attributeGroup
        name="xhtml.Core.extra.attrib">
        <xs:annotation>
            <xs:documentation> Extend Core Attributes </xs:documentation>
        </xs:annotation>
    </xs:attributeGroup>
    <xs:attributeGroup
        name="xhtml.Global.core.extra.attrib">
        <xs:annotation>
            <xs:documentation> Extended Global Core Attributes </xs:documentation>
        </xs:annotation>
    </xs:attributeGroup>
    <xs:attributeGroup
        name="xhtml.Global.I18n.extra.attrib">
        <xs:annotation>
            <xs:documentation> Extended Global I18n attributes </xs:documentation>
        </xs:annotation>
    </xs:attributeGroup>
    <xs:attributeGroup
        name="xhtml.Global.Common.extra">
        <xs:annotation>
            <xs:documentation> Extended Global Common Attributes </xs:documentation>
        </xs:annotation>
    </xs:attributeGroup>
    <xs:group
        name="xhtml.Head.extra">
        <xs:sequence/>
    </xs:group>
    <xs:group
        name="xhtml.HeadOpts.mix">
        <xs:choice>
            <xs:element
                name="script"
                type="xhtml.script.type"/>
            <xs:element
                name="style"
                type="xhtml.style.type"/>
            <xs:element
                name="meta"
                type="xhtml.meta.type"/>
            <xs:element
                name="link"
                type="xhtml.link.type"/>
            <xs:element
                name="object"
                type="xhtml.object.type"/>
            <xs:group
                ref="xhtml.Head.extra"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.head.content">
        <xs:sequence>
            <xs:group
                ref="xhtml.HeadOpts.mix"
                minOccurs="0"
                maxOccurs="unbounded"/>
            <xs:choice>
                <xs:sequence>
                    <xs:element
                        name="title"
                        minOccurs="1"
                        maxOccurs="1"
                        type="xhtml.title.type"/>
                    <xs:group
                        ref="xhtml.HeadOpts.mix"
                        minOccurs="0"
                        maxOccurs="unbounded"/>
                    <xs:sequence
                        minOccurs="0">
                        <xs:element
                            name="base"
                            type="xhtml.base.type"/>
                        <xs:group
                            ref="xhtml.HeadOpts.mix"
                            minOccurs="0"
                            maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:sequence>
                <xs:sequence>
                    <xs:element
                        name="base"
                        type="xhtml.base.type"
                        minOccurs="1"
                        maxOccurs="1"/>
                    <xs:group
                        ref="xhtml.HeadOpts.mix"
                        minOccurs="0"
                        maxOccurs="unbounded"/>
                    <xs:element
                        name="title"
                        minOccurs="1"
                        maxOccurs="1"
                        type="xhtml.title.type"/>
                    <xs:group
                        ref="xhtml.HeadOpts.mix"
                        minOccurs="0"
                        maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:choice>
        </xs:sequence>
    </xs:group>
    <!--
    ins and del are used to denote editing changes
  -->
    <xs:group
        name="xhtml.Edit.class">
        <xs:choice>
            <xs:element
                name="ins"
                type="xhtml.edit.type"/>
            <xs:element
                name="del"
                type="xhtml.edit.type"/>
        </xs:choice>
    </xs:group>
    <!--
    script and noscript are used to contain scripts
    and alternative content
  -->
    <xs:group
        name="xhtml.Script.class">
        <xs:choice>
            <xs:element
                name="script"
                type="xhtml.script.type"/>
            <xs:element
                name="noscript"
                type="xhtml.noscript.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.Misc.extra">
        <xs:sequence/>
    </xs:group>
    <!--
    These elements are neither block nor inline, and can
    essentially be used anywhere in the document body.
  -->
    <xs:group
        name="xhtml.Misc.class">
        <xs:choice>
            <xs:group
                ref="xhtml.Edit.class"/>
            <xs:group
                ref="xhtml.Script.class"/>
            <xs:group
                ref="xhtml.Misc.extra"/>
        </xs:choice>
    </xs:group>
    <!-- Inline Elements -->
    <xs:group
        name="xhtml.InlStruct.class">
        <xs:choice>
            <xs:element
                name="br"
                type="xhtml.br.type"/>
            <xs:element
                name="span"
                type="xhtml.span.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.InlPhras.class">
        <xs:choice>
            <xs:element
                name="em"
                type="xhtml.em.type"/>
            <xs:element
                name="strong"
                type="xhtml.strong.type"/>
            <xs:element
                name="dfn"
                type="xhtml.dfn.type"/>
            <xs:element
                name="code"
                type="xhtml.code.type"/>
            <xs:element
                name="samp"
                type="xhtml.samp.type"/>
            <xs:element
                name="kbd"
                type="xhtml.kbd.type"/>
            <xs:element
                name="var"
                type="xhtml.var.type"/>
            <xs:element
                name="cite"
                type="xhtml.cite.type"/>
            <xs:element
                name="abbr"
                type="xhtml.abbr.type"/>
            <xs:element
                name="acronym"
                type="xhtml.acronym.type"/>
            <xs:element
                name="q"
                type="xhtml.q.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.InlPres.class">
        <xs:choice>
            <xs:element
                name="tt"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="i"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="b"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="big"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="small"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="sub"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="sup"
                type="xhtml.InlPres.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.I18n.class">
        <xs:sequence>
            <xs:element
                name="bdo"
                type="xhtml.bdo.type"/>
        </xs:sequence>
    </xs:group>
    <xs:group
        name="xhtml.Anchor.class">
        <xs:sequence>
            <xs:element
                name="a"
                type="xhtml.a.type"/>
        </xs:sequence>
    </xs:group>
    <xs:group
        name="xhtml.InlSpecial.class">
        <xs:choice>
            <xs:element
                name="img"
                type="xhtml.img.type"/>
            <xs:element
                name="map"
                type="xhtml.map.type"/>
            <xs:element
                name="object"
                type="xhtml.object.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.InlForm.class">
        <xs:choice>
            <xs:element
                name="input"
                type="xhtml.input.type"/>
            <xs:element
                name="select"
                type="xhtml.select.type"/>
            <xs:element
                name="textarea"
                type="xhtml.textarea.type"/>
            <xs:element
                name="label"
                type="xhtml.label.type"/>
            <xs:element
                name="button"
                type="xhtml.button.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.Inline.extra">
        <xs:sequence/>
    </xs:group>
    <xs:group
        name="xhtml.Ruby.class">
        <xs:sequence>
            <xs:element
                name="ruby"
                type="xhtml.ruby.type"/>
        </xs:sequence>
    </xs:group>
    <!--
    Inline.class includes all inline elements,
    used as a component in mixes
  -->
    <xs:group
        name="xhtml.Inline.class">
        <xs:choice>
            <xs:group
                ref="xhtml.InlStruct.class"/>
            <xs:group
                ref="xhtml.InlPhras.class"/>
            <xs:group
                ref="xhtml.InlPres.class"/>
            <xs:group
                ref="xhtml.I18n.class"/>
            <xs:group
                ref="xhtml.Anchor.class"/>
            <xs:group
                ref="xhtml.InlSpecial.class"/>
            <xs:group
                ref="xhtml.InlForm.class"/>
            <xs:group
                ref="xhtml.Ruby.class"/>
            <xs:group
                ref="xhtml.Inline.extra"/>
        </xs:choice>
    </xs:group>
    <!--
     InlNoRuby.class includes all inline elements
     except ruby
  -->
    <xs:group
        name="xhtml.InlNoRuby.class">
        <xs:choice>
            <xs:group
                ref="xhtml.InlStruct.class"/>
            <xs:group
                ref="xhtml.InlPhras.class"/>
            <xs:group
                ref="xhtml.InlPres.class"/>
            <xs:group
                ref="xhtml.I18n.class"/>
            <xs:group
                ref="xhtml.Anchor.class"/>
            <xs:group
                ref="xhtml.InlSpecial.class"/>
            <xs:group
                ref="xhtml.InlForm.class"/>
            <xs:group
                ref="xhtml.Inline.extra"/>
        </xs:choice>
    </xs:group>
    <!--
    InlinePre.mix
    Used as a component in pre model
  -->
    <xs:group
        name="xhtml.InlinePre.mix">
        <xs:choice>
            <xs:group
                ref="xhtml.InlStruct.class"/>
            <xs:group
                ref="xhtml.InlPhras.class"/>
            <xs:element
                name="tt"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="i"
                type="xhtml.InlPres.type"/>
            <xs:element
                name="b"
                type="xhtml.InlPres.type"/>
            <xs:group
                ref="xhtml.I18n.class"/>
            <xs:group
                ref="xhtml.Anchor.class"/>
            <xs:group
                ref="xhtml.Misc.class"/>
            <xs:element
                name="map"
                type="xhtml.map.type"/>
            <xs:group
                ref="xhtml.Inline.extra"/>
        </xs:choice>
    </xs:group>
    <!--
    InlNoAnchor.class includes all non-anchor inlines,
    used as a component in mixes
  -->
    <xs:group
        name="xhtml.InlNoAnchor.class">
        <xs:choice>
            <xs:group
                ref="xhtml.InlStruct.class"/>
            <xs:group
                ref="xhtml.InlPhras.class"/>
            <xs:group
                ref="xhtml.InlPres.class"/>
            <xs:group
                ref="xhtml.I18n.class"/>
            <xs:group
                ref="xhtml.InlSpecial.class"/>
            <xs:group
                ref="xhtml.InlForm.class"/>
            <xs:group
                ref="xhtml.Ruby.class"/>
            <xs:group
                ref="xhtml.Inline.extra"/>
        </xs:choice>
    </xs:group>
    <!--
    InlNoAnchor.mix includes all non-anchor inlines
  -->
    <xs:group
        name="xhtml.InlNoAnchor.mix">
        <xs:choice>
            <xs:group
                ref="xhtml.InlNoAnchor.class"/>
            <xs:group
                ref="xhtml.Misc.class"/>
        </xs:choice>
    </xs:group>
    <!--
    Inline.mix includes all inline elements, including Misc.class
  -->
    <xs:group
        name="xhtml.Inline.mix">
        <xs:choice>
            <xs:group
                ref="xhtml.Inline.class"/>
            <xs:group
                ref="xhtml.Misc.class"/>
        </xs:choice>
    </xs:group>
    <!--
   InlNoRuby.mix includes all of inline.mix elements
   except ruby
  -->
    <xs:group
        name="xhtml.InlNoRuby.mix">
        <xs:choice>
            <xs:group
                ref="xhtml.InlNoRuby.class"/>
            <xs:group
                ref="xhtml.Misc.class"/>
        </xs:choice>
    </xs:group>
    <!--
    In the HTML 4 DTD, heading and list elements were included
    in the block group. The Heading.class and
    List.class groups must now be included explicitly
    on element declarations where desired.
  -->
    <xs:group
        name="xhtml.Heading.class">
        <xs:choice>
            <xs:element
                name="h1"
                type="xhtml.h1.type"/>
            <xs:element
                name="h2"
                type="xhtml.h2.type"/>
            <xs:element
                name="h3"
                type="xhtml.h3.type"/>
            <xs:element
                name="h4"
                type="xhtml.h4.type"/>
            <xs:element
                name="h5"
                type="xhtml.h5.type"/>
            <xs:element
                name="h6"
                type="xhtml.h6.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.List.class">
        <xs:choice>
            <xs:element
                name="ul"
                type="xhtml.ul.type"/>
            <xs:element
                name="ol"
                type="xhtml.ol.type"/>
            <xs:element
                name="dl"
                type="xhtml.dl.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.Table.class">
        <xs:choice>
            <xs:element
                name="table"
                type="xhtml.table.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.Form.class">
        <xs:choice>
            <xs:element
                name="form"
                type="xhtml.form.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.Fieldset.class">
        <xs:choice>
            <xs:element
                name="fieldset"
                type="xhtml.fieldset.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.BlkStruct.class">
        <xs:choice>
            <xs:element
                name="p"
                type="xhtml.p.type"/>
            <xs:element
                name="div"
                type="xhtml.div.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.BlkPhras.class">
        <xs:choice>
            <xs:element
                name="pre"
                type="xhtml.pre.type"/>
            <xs:element
                name="blockquote"
                type="xhtml.blockquote.type"/>
            <xs:element
                name="address"
                type="xhtml.address.type"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.BlkPres.class">
        <xs:sequence>
            <xs:element
                name="hr"
                type="xhtml.hr.type"/>
        </xs:sequence>
    </xs:group>
    <xs:group
        name="xhtml.BlkSpecial.class">
        <xs:choice>
            <xs:group
                ref="xhtml.Table.class"/>
            <xs:group
                ref="xhtml.Form.class"/>
            <xs:group
                ref="xhtml.Fieldset.class"/>
        </xs:choice>
    </xs:group>
    <xs:group
        name="xhtml.Block.extra">
        <xs:sequence/>
    </xs:group>
    <!--
    Block.class includes all block elements,
    used as an component in mixes
  -->
    <xs:group
        name="xhtml.Block.class">
        <xs:choice>
            <xs:group
                ref="xhtml.BlkStruct.class"/>
            <xs:group
                ref="xhtml.BlkPhras.class"/>
            <xs:group
                ref="xhtml.BlkPres.class"/>
            <xs:group
                ref="xhtml.BlkSpecial.class"/>
            <xs:group
                ref="xhtml.Block.extra"/>
        </xs:choice>
    </xs:group>
    <!--
   Block.mix includes all block elements plus %Misc.class;
  -->
    <xs:group
        name="xhtml.Block.mix">
        <xs:choice>
            <xs:group
                ref="xhtml.Heading.class"/>
            <xs:group
                ref="xhtml.List.class"/>
            <xs:group
                ref="xhtml.Block.class"/>
            <xs:group
                ref="xhtml.Misc.class"/>
        </xs:choice>
    </xs:group>
    <!--
    All Content Elements
    Flow.mix includes all text content, block and inline
    Note that the "any" element included here allows us
    to add data from any other namespace, a necessity
    for compound document creation.
    Note however that it is not possible to add
    to any head level element without further
    modification. To add RDF metadata to the head
    of a document, modify the structure module.
  -->
    <xs:group
        name="xhtml.Flow.mix">
        <xs:choice>
            <xs:group
                ref="xhtml.Heading.class"/>
            <xs:group
                ref="xhtml.List.class"/>
            <xs:group
                ref="xhtml.Block.class"/>
            <xs:group
                ref="xhtml.Inline.class"/>
            <xs:group
                ref="xhtml.Misc.class"/>
        </xs:choice>
    </xs:group>
    <!--
    BlkNoForm.mix includes all non-form block elements,
    plus Misc.class
  -->
    <xs:group
        name="xhtml.BlkNoForm.mix">
        <xs:choice>
            <xs:group
                ref="xhtml.Heading.class"/>
            <xs:group
                ref="xhtml.List.class"/>
            <xs:group
                ref="xhtml.BlkStruct.class"/>
            <xs:group
                ref="xhtml.BlkPhras.class"/>
            <xs:group
                ref="xhtml.BlkPres.class"/>
            <xs:group
                ref="xhtml.Table.class"/>
            <xs:group
                ref="xhtml.Block.extra"/>
            <xs:group
                ref="xhtml.Misc.class"/>
        </xs:choice>
    </xs:group>
    <xs:element
        name="html"
        type="xhtml.html.type"/>
</xs:schema>

D.4. XML Schema Ruby Implementation

The RUBY specification does not currently define an XHTML Module using XML Schema. One is defined here:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 elementFormDefault="qualified"
 xmlns:xh11d="http://www.w3.org/1999/xhtml/datatypes/"
>
    <xs:import namespace="http://www.w3.org/1999/xhtml/datatypes/" 
               schemaLocation="xhtml-datatypes-1.xsd" />
  <xs:annotation>
    <xs:documentation>
      This is the Ruby module for XHTML
      $Id: xhtml11-diff.html,v 1.1 2018/03/20 05:53:11 plehegar Exp $
    </xs:documentation>
    <xs:documentation source="xhtml-copyright-1.xsd"/>
  </xs:annotation>
  <xs:annotation>
    <xs:documentation>
      "Ruby" are short runs of text alongside the base text, typically
      used in East Asian documents to indicate pronunciation or to
      provide a short annotation. The full specification for Ruby is here:
      
        http://www.w3.org/TR/2001/REC-ruby-20010531/
      
      This module defines "Ruby " or "complex Ruby" as described
      in the specification:
      
        http://www.w3.org/TR/2001/REC-ruby-20010531/#complex
    
      Simple or Basic Ruby are defined in a separate module.
      
      This module declares the elements and their attributes used to
      support complex ruby annotation markup. Elements defined here
            * ruby, rbc, rtc, rb, rt, rp
      
      This module expects the document model to define the
      following content models
        + InlNoRuby.mix                 
    </xs:documentation>
    <xs:documentation
         source="http://www.w3.org/TR/2001/REC-ruby-20010531/"/>    
  </xs:annotation>
  <xs:group name="xhtml.ruby.content.simple">
      <xs:sequence>
          <xs:element name="rb" type="xhtml.rb.type"/>
          <xs:choice>
              <xs:element name="rt" type="xhtml.rt.type"/>
              <xs:sequence>
                  <xs:element name="rp" type="xhtml.rp.type"/>
                  <xs:element name="rt" type="xhtml.rt.type"/>
                  <xs:element name="rp" type="xhtml.rp.type"/>
              </xs:sequence>
          </xs:choice>
      </xs:sequence>
  </xs:group>
  <xs:group name="xhtml.ruby.content.complex">
    <xs:sequence>
      <xs:element name="rbc" type="xhtml.rbc.type"/>
      <xs:element name="rtc" type="xhtml.rtc.type" maxOccurs="2"/>
    </xs:sequence>
  </xs:group>
  <!--
   add to this group any common attributes for all Ruby elements
  -->
  <xs:attributeGroup name="xhtml.ruby.common.attrib"/>
  
  <xs:group name="xhtml.ruby.content">
    <xs:choice>
      <xs:group ref="xhtml.ruby.content.simple"/>
      <xs:group ref="xhtml.ruby.content.complex"/>
    </xs:choice>
  </xs:group>
  <xs:complexType name="xhtml.ruby.type">
    <xs:group ref="xhtml.ruby.content"/>
    <xs:attributeGroup ref="xhtml.ruby.common.attrib"/>
  </xs:complexType>
  <!--
   rbc (ruby base component) element 
  -->
  <xs:attributeGroup name="xhtml.rbc.attlist">
    <xs:attributeGroup ref="xhtml.ruby.common.attrib"/>
  </xs:attributeGroup>
  
  <xs:group name="xhtml.rbc.content">
    <xs:sequence>
      <xs:element name="rb" type="xhtml.rb.type" />
    </xs:sequence>
  </xs:group>  
  <xs:complexType name="xhtml.rbc.type">
    <xs:group ref="xhtml.rbc.content"/>
    <xs:attributeGroup ref="xhtml.rbc.attlist"/>
  </xs:complexType>
  <!--
   rtc (ruby text component) element
  -->
  <xs:attributeGroup name="xhtml.rtc.attlist">
    <xs:attributeGroup ref="xhtml.ruby.common.attrib"/>
  </xs:attributeGroup>
  
  <xs:group name="xhtml.rtc.content">
    <xs:sequence>
      <xs:element name="rt" type="xhtml.rt.type" maxOccurs="unbounded"/>
    </xs:sequence>  
  </xs:group>    
  <xs:complexType name="xhtml.rtc.type">
    <xs:group ref="xhtml.rt.content"/>  
    <xs:attributeGroup ref="xhtml.rtc.attlist"/>
  </xs:complexType>
  <!--
   rb (ruby base) element 
  -->
  <xs:attributeGroup name="xhtml.rb.attlist">
    <xs:attributeGroup ref="xhtml.ruby.common.attrib"/>
  </xs:attributeGroup>
  <xs:group name="xhtml.rb.content">
    <xs:sequence>
       <xs:group ref="xhtml.InlNoRuby.mix" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>      
  <xs:complexType name="xhtml.rb.type" mixed="true">
    <xs:group ref="xhtml.rb.content"/>
    <xs:attributeGroup ref="xhtml.rb.attlist"/>
  </xs:complexType>
    
  <!--
   rt (ruby text) element 
  -->
  <xs:attributeGroup name="xhtml.rt.attlist">
    <xs:attributeGroup ref="xhtml.ruby.common.attrib"/>
    <xs:attribute name="rbspan" type="xh11d:Number" default="1"/>
  </xs:attributeGroup>
  <xs:group name="xhtml.rt.content">
    <xs:sequence>
       <xs:group ref="xhtml.InlNoRuby.mix" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>      
  
  <xs:complexType name="xhtml.rt.type" mixed="true">
    <xs:group ref="xhtml.rt.content"/>  
    <xs:attributeGroup ref="xhtml.rt.attlist"/>
  </xs:complexType>
  <!-- rp (ruby parenthesis) element  -->
  <xs:attributeGroup name="xhtml.rp.attlist">
    <xs:attributeGroup ref="xhtml.ruby.common.attrib"/>
  </xs:attributeGroup>
  
  <xs:group name="xhtml.rp.content">
    <xs:sequence/>
  </xs:group>      
  
  <xs:complexType name="xhtml.rp.type" mixed="true">
    <xs:group ref="xhtml.rp.content"/>
    <xs:attributeGroup ref="xhtml.rp.attlist"/>
  </xs:complexType>
</xs:schema>

E. Acknowledgements

This appendix is informative .

This specification was prepared by the W3C HTML Working Group. The members at the time of publication of the first edition were:

The second edition of this specification was prepared by the W3C XHTML2 Working Group. The members at the time of publication of the second edition were: