mod_xhtml

mod_xhtml provides a namespace processor for http://www.w3.org/1999/xhtml that serves to ensure XHTML meets the W3C Appendix C guidelines for compatibility with HTML browsers and the text/html MIME type. In addition, mod_xhtml implements Server Side Includes (SSI), both as Apache's comment-driven processing language and as a separate XML namespace processor.

SSI Implementation

The mod_xhtml SSI implementation is simpler than Apache's traditional mod_include, in that it decouples the task of markup parsing from SSI processing. Most importantly, as a namespace processor, it plugs directly in to general XML-based publishing systems, without the overhead of having to parse the markup twice.

mod_xhtml actually provides two ways to implement SSI:

  1. Using traditional comments <!--#directive arg="val"-->
  2. Using a separate namespace processor <ssi:directive arg="val"/>

The two are exactly equivalent and are implemented by the same code. They can be enabled separately or mixed in a single document.

Limitations

The principal limitation in mod_xhtml is in what it works on. Unlike mod_include, it requires its input to be well-formed XML, and cannot be used on HTML4 or tagsoup input.

The SSI implementation is also incomplete:

Acknowledgement

Much of the SSI implementation is based on mod_include, and mod_xhtml includes a substantial amount of copied code.

Usage

As with any namespace module, using mod_xhtml is based on inserting the xmlns filter from mod_xmlns or mod_publisher: e.g.

LoadModule	xmlns_module	modules/mod_xmlns.so
AddOutputFilter	xmlns	.html
or
LoadModule   publisher_module    modules/mod_publisher.so
AddOutputFilter	markup-publisher	.html

There are three namespace providers we can use, and several different usages. Note that if you use mod_publisher, much of this is redundant, and only the SSI namespace (the last example) provides functionality over and above what's builtin.

  1. To ensure Appendix C compliance without supporting SSI, insert the basic provider for XHTML:
    XMLNSUseNamespace http://www.w3.org/1999/xhtml on 1.0
  2. To ensure Appendix C compliance and support classic SSI comments, use the SSI-enabled namespace provider instead:
    XMLNSUseNamespace http://www.w3.org/1999/xhtml on ssi
  3. To ensure Appendix C compliance and support SSI as a namespace, use the XHTML provider together with the SSI namespace provider:
    XMLNSUseNamespace http://apache.webthing.com/ssi# on ssi
    XMLNSUseNamespace http://www.w3.org/1999/xhtml on 1.0
  4. To ensure Appendix C compliance and support SSI both as comments and as a namespace (which may be freely mixed in a document)
    XMLNSUseNamespace http://apache.webthing.com/ssi# on ssi
    XMLNSUseNamespace http://www.w3.org/1999/xhtml on 1.0
  5. To support the SSI namespace in XML-based publishing systems without reference to XHTML, simply load the SSI namespace provider:
    XMLNSUseNamespace http://apache.webthing.com/ssi# on ssi
    together with other namespace providers as required.

Configuration

mod_xhtml implements three configuration directives. These set processing defaults that can be overridden in a document by the SSI config directive. They all work as documented under mod_include's config directive.

XHTMLSSIerrmsg
Sets the error message sent to the browser when a processing directive fails.
XHTMLSSItimefmt
Sets the format for output of date/time fields.
XHTMLSSIsizefmt
Sets the format for output of size fields.

Availability

mod_xhtml is available under the GNU General Public License (GPL). As with other opensource modules, alternative licenses may be considered by request.