XHTML Modular Schema Introduction
Modular XHTML is complicated. The standard has not been finalized yet, so
there are two "input" Working Drafts, one describing the strategy to create a
new XHTML module, extension, or subset, and one proposing a refactoring of the
entire XHTML v1.1 schema into modular XHTML schemas, consisting of 71 "base"
schemas, 1 "driver" schema, 1 "model" schema, and 1 "module" schema. This
provides a good starting point for anyone trying to do their own modules for
XHTML.
For new module schemas, the first point is that the base namespace (for the
document element of the resulting XHTML instance document) will remain
unchanged: http://www.w3.org/1999/xhtml. Furthermore, in all the schemas
there should continue to be only one global element which is a valid document
element: "html".
When creating a new module you will likely refer to (but not change) some or
all of the 71 "base" schemas, but create new "driver", "model", and "module"
schemas, or at least modify those defined by XHTML-MOD v1.1. The "driver"
schema does nothing more than "import" and "include" the "model" and "modules"
schemas and acts as the top level schema for the definition set. This is
defined in the standard XHTML namespace, and included null-namespace schemas
undergo the "chameleon schema" effect and are subsumed into the XHTML
namespace.
Due to the "open content model" of XHTML documents, with almost un-constrained
nesting of elements within each other, the convention adopted when
modularizing XHTML was to have fully un-rolled definitions. This means
anonymous type definitions are never used, and even within type definitions
the specific content model is a referenced global definition. The convension
for managing this is as follows:
element name -> referenced element type (suffix .type)
element type -> referenced element content model (suffix .content)
element content model -> base + extension content model (suffix .mix)
base content model -> xs:group definition (suffix .class or .content)
extension content model -> empty xs:group (suffix .extra)
The "model" schema is in the null namespace and defines the document elements
(global xs:element definitions), global groups, and global attribute groups,
drawing on the definitions gathered in the "modules" schema.
The "modules" schema gathers the definition schemas together and consists
entirely of "include" or "redefine" global declarations.