Catch-All Element
Abstract
A container element for dealing with unknown elements within the document.
Problem
Users need to be able to insert marked up text into the document that the document designer cannot foresee. For example, it is often necessary to have some presentation specific markup inside of a document. If this unexpected markup is spread throughout the document, then processors might have a hard time dealing with it.
Context
When documents are going to need to have the flexibility to include elements from other namespaces.
Forces
Allowing elements from other document types allows you to save development costs and time by reusing schemas instead of developing them.
Allowing documents to use other schemas allows for great flexibility.
Solution
Create a new element which will serve as a container for elements of a new schema.
Examples
This example shows how a document that describes a car would allow a comment element that includes elements from HTML.
<car>
<model>Pinto</model>
<year>1979</year>
<comment>
<xhtml:p xmlns:xhtml="http://www.w3.org/1999/xhtml">
This car <xhtml:b>runs great!</xhtml:b>
</xhtml:p>
</comment>
</car>
To allow this type of inclusion using an XML Schema, use the any element as follows:
<element name="car">
<complexType>
<sequence>
<element name="model" type="string"/>
<element name="year" type="string"/>
<element name="comment">
<complexType>
<sequence>
<any namespace="http://www.w3.org/1999/xhtml"
minOccurs="1" maxOccurs="unbounded"
processContents="skip"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
For details on the use of the any element see: The XML Schema Part 0: Primer Section 5.5 Any Element, Any Attribute (http://www.w3.org/TR/xmlschema-0/#any)
Discussion
The element within the catch-all element are from a namespace outside of the namespace of the document-type being created.
This tag acts as a warning to processors that some markup from another namespace is about to be encountered.
Related Patterns
The
Envelope pattern uses a similar mechanism, but the intent of the Envelope is to wrap a document without adding any domain data of its own. The intent of the Catch-All Element is to allow authors to mix data from separate document types.
Known Uses
The Real Estate DTD
RELML (http://www.csn.net/public/design/rsdesign.html) uses an
OTHER as a catch all element.