apache > cocoon

- Home

# Regular-Expression-Header-Selector in Cocoon

## RegexpHeaderSelector

NAME | regexp-header
WHAT | The `RegexpHeaderSelector` component is used to select appropriate sitemap processing depending on a particular header value.
TYPE | Selector, Sitemap Component
BLOCK | Core
CLASS | org.apache.cocoon.selection.RegexpHeaderSelector
SINCE | Cocoon 2.1.6
CACHEABLE | not applicable

## Description

The `RegexpheaderSelector` tests a header field against the test attribute of the selectors when clause.

## Usage

The `RegexpHeaderSelector` allows to define sitemap processing based on the content of a particular header field.

### Sitemap pipeline examples

    <map:select type="regexp-header">
      <map:when test="xhtml">
      ....
      </map:when>
      ...
      <map:otherwise>
      ...
      </map:otherwise>
    </map:select>

### Sitemap component configuration example

    <map:selectors...
      <map:selector name="regexp-header"
        src="org.apache.cocoon.selection.RegexpHeaderSelector"

        <pattern name="xhtml">application/xhtml\+xml</pattern>
        ...
        <header-name>accept</header-name>

      </map:selectors>
    ...

### Configuration

The configuration section of `RegexpHeaderSelector` specifies a mapping from header strings to symbolic pattern names.

Each pattern element specifies a name attribute holding the symbolic pattern name used in the test attribute expression. The contents contains a regular expression to match against the header value.

The header concerned is named by the contents of the header-name element.

### Setup

Setting up a `RegexpHeaderSelector` includes choosing the `<map:when>` test expressions, and a optional `<map:otherwise>` clause.

The test attribute of the `<map:when>` clause must match a pattern attribute name value. The value of the test attribute in a `<map:when>` clause must be declared in a `pattern` name attribute.

The header-name can be overridden by a parameter element.

### Effect on Object Model and Sitemap Parameters

The `RegexpHeaderSelector` has no side effects on the object model, or any sitemap parameters.

## Notes

The main motivation for this selector is to do some simple content negotiation to serve XHTML 1.1 pages where the browser indicates it accepts application/xhtml+xml, and HTML pages otherwise. However, this has many more uses, including automatic i18n according to the accept-language header.

## Bugs/Caveats

The `RegexpHeaderSelector` adds the response header attribute `Vary` having a value of the header name, indicating that the response differ for different user agents. This information especially meaningfull for an http-proxy server.

## History

26-07-04: initial creation

## See also

A general documentation about selectors is available at Matchers and Selectors.

Errors and Improvements? If you see any errors or potential improvements in this document please help us: View, Edit or comment on the latest development version (registration required).