XMLPatterns.com

Home

Introduction

Patterns
Categorized
Alphabetical
Chronological

Books

Links

About
Catch-All Element
Printable Version

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



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 uses an OTHER as a catch all element.


Visit our sponsors: (Interested in advertising on XMLPatterns.com?)