<?xml-stylesheet href="edit.css" type="text/css"?><!--?xml-stylesheet href="../style/xmlspec.xsl" type="text/xsl"?--><spec w3c-doctype="wd">
  <header>
    <title>XML Processing Model Requirements and Use Cases</title>

    <w3c-designation>WD-xproc-requirements-20060411</w3c-designation>

    <w3c-doctype>W3C Working Draft</w3c-doctype>

    <pubdate>
      <day>11</day>

      <month>April</month>

      <year>2006</year>
    </pubdate>

    <publoc><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xproc-requirements-20060411/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2006/WD-xproc-requirements-20060411/</loc></publoc>

    <altlocs>
      <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2006/WD-xproc-requirements-20060411/WD-xproc-requirements-20060411.xml" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">XML</loc>
    </altlocs>

    <latestloc>
      <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/xproc-requirements/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/xproc-requirements/</loc>
    </latestloc>

    <authlist>
      <author>
        <name>Alex Milowski</name>

        <affiliation>Invited Expert</affiliation>

        <email xmlns:xlink="http://www.w3.org/1999/xlink" href="mailto:alex@milowski.com" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">alex@milowski.com</email>
      </author>
    </authlist>

    <abstract>
      <p>This document contains requirements for the development of an XML
      Processing Model and Language, which are intended to describe and
      specify the processing relationships between XML resources.</p>
    </abstract>

<status>
<p><emph>This section describes the status of this document at the
time of its publication. Other documents may supersede this document.
A list of current W3C publications and the latest revision of this
technical report can be found in the <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">W3C technical reports index</loc> at
http://www.w3.org/TR/.</emph></p>

<p>This First Public Working Draft has been produced by the W3C
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/XML/Processing/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">XML Processing Model
Working Group</loc> as part of the <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/XML/Activity" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">XML Activity</loc>, following
the procedures set out for the  
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/2003/06/Process-20030618/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">W3C 
Process</loc>. The
goals of the XML Processing Model Working Group are discussed in its
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/2005/10/xml-processing-model-wg-charter.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">charter</loc>.</p>

<p>Comments on this document should be sent to the W3C mailing list  
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="mailto:public-xml-processing-model-comments@w3.org" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">public-xml-processing-model-comments@w3.org</loc>
(<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-comments/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">archive</loc>).</p>

<p>Publication as a
<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/2004/02/Process-20040205/tr.html#RecsWD" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Working
Draft</loc> does not imply endorsement by the
W3C Membership. This is a draft document and may be updated, replaced or
obsoleted by other documents at any time. It is inappropriate to cite
this document as other than work in progress.</p>

<p>This document was produced by a group operating under the <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Patent-Policy-20040205/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">5 February
2004 W3C Patent Policy</loc>. The group does not expect this document to
become a W3C Recommendation. This document is informative only. W3C
maintains a <loc xmlns:xlink="http://www.w3.org/1999/xlink" role="disclosure" href="http://www.w3.org/2004/01/pp-impl/38398/status" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">public list of any patent disclosures</loc> made in connection
with the deliverables of the group; that page also includes
instructions for disclosing a patent. An individual who has actual
knowledge of a patent which the individual believes contains <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Essential
Claim(s)</loc> must disclose the information in accordance with <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">section
6 of the W3C Patent Policy</loc>.</p>

</status>

    <langusage>
      <language id="en">English</language>
    </langusage>

    <revisiondesc>
      <p>First draft (Revision April 04, 2006)</p>
    </revisiondesc>
  </header>

  <body>
    <div1 id="introduction">
      <head>Introduction</head>

      <p>A large and growing set of specifications describe processes
      operating on XML documents. Many applications will depend on the use of
      more than one of these specifications. Considering how implementations
      of these specifications might interact raises many issues related to
      interoperability. This specification contains requirements on an XML
      Pipeline Language for the description of XML process interactions in
      order to address these issues. This specification is concerned with the
      conceptual model of XML process interactions, the language for the
      description of these interactions, and the inputs and outputs of the
      overall process. This specification is not generally concerned with the
      implementations of actual XML processes participating in these
      interactions.</p>
    </div1>

    <div1 id="terminology">
      <head>Terminology</head>

      <glist>
        <gitem>
          <label><termdef id="infoset" term="XML Information Set">XML
          Information Set or "Infoset"</termdef></label>

          <def>
            <p>An XML Information Set or "Infoset" is the name we give to any
            implementation of a data model for XML which supports the
            vocabulary as defined by the XML Information Set recommendation
            <bibref ref="xml-infoset-rec"/>.</p>
          </def>
        </gitem>

        <gitem>
          <label><termdef id="xml-pipeline" term="XML Pipeline">XML
          Pipeline</termdef></label>

          <def>
            <p>An XML Pipeline is a conceptualization of a flow of a
            configuration of steps and their parameters. The XML Pipeline
            defines a process in terms of order, dependencies, or iteration of
            steps over XML information sets.</p>
          </def>
        </gitem>

        <gitem>
          <label><termdef id="spec-lang" term="Specification Language">XML
          Pipeline Specification Document</termdef></label>

          <def>
            <p>A pipeline specification document is an XML document that
            described an XML pipeline.</p>
          </def>
        </gitem>

        <gitem>
          <label><termdef id="step" term="Step">Step</termdef></label>

          <def>
            <p>A step is a specification of how a component is used in a
            pipeline that includes inputs, outputs, and parameters.</p>
          </def>
        </gitem>

        <gitem>
          <label><termdef id="component" term="Component">Component</termdef></label>

          <def>
            <p>A component is an particular XML technology (e.g. XInclude, XML
            Schema Validity Assessment, XSLT, XQuery, etc.).</p>
          </def>
        </gitem>

        <gitem>
          <label><termdef id="input-document" term="Input Document">Input
          Document</termdef></label>

          <def>
            <p>An XML infoset that is an input to a XML Pipeline or Step.</p>
          </def>
        </gitem>

        <gitem>
          <label><termdef id="output-document" term="Output Document">Output
          Document</termdef></label>

          <def>
            <p>The result of processing by an XML Pipeline or Step.</p>
          </def>
        </gitem>

        <gitem>
          <label><termdef id="parameter" term="parameter">Parameter</termdef></label>

          <def>
            <p>A parameter is input to a Step or an XML Pipeline in addition
            to the Input and Output Document(s) that it may access. Parameters
            are most often simple, scalar values such as integers, booleans,
            and URIs, and they are most often named, but neither of these
            conditions is mandatory. That is, we do not (at this time)
            constrain the range of values a parameter may hold, nor do we (at
            this time) forbid a Step from accepting anonymous parameters.</p>
          </def>
        </gitem>

        <gitem>
          <label><termdef id="pipeline-env" term="Pipeline Environment">XML
          Pipeline Environment</termdef></label>

          <def>
            <p>The technology or platform environment in which the XML
            Pipeline is used (e.g. command-line, web servers, editors,
            browsers, embedded applications, etc.).</p>
          </def>
        </gitem>

        <gitem>
          <label><termdef id="streaming" term="Streaming">Streaming</termdef></label>

          <def>
            <p>The ability to parse an XML document and pass infoitems between
            components without building a full document information set.</p>
          </def>
        </gitem>
      </glist>
    </div1>

    <div1 id="design-principles">
      <head>Design Principles</head>

      <p>The design principles described in this document are requirements
      whose compliance with is an overall goal for the specification. It is
      not necessarily the case that a specific feature meets the requirement.
      Instead, it should be viewed that the whole set of specifications
      related to this requirements document meet that overall goal specified
      in the design principle.</p>

      <glist>
        <gitem>
          <label>Technology Neutral</label>

          <def>
            <p>Applications should be free to implement XML processing using
            appropriate technologies such as SAX, DOM, or other infoset
            representations.</p>
          </def>
        </gitem>

        <gitem>
          <label>Platform Neutral</label>

          <def>
            <p>Application computing platforms should not be limited to any
            particular class of platforms such as clients, servers,
            distributed computing infrastructures, etc. In addition, the
            resulting specifications should not be swayed by the specifics of
            use in those platform.</p>
          </def>
        </gitem>

        <gitem>
          <label>Small and Simple</label>

          <def>
            <p>The language should be as small and simple as practical. It
            should be "small" in the sense that simple processing should be
            able to stated in a compact way and "simple" in the sense the
            specification of more complex processing steps do not require
            arduous specification steps in the <termref def="spec-lang">XML
            Pipeline Specification Document</termref>.</p>
          </def>
        </gitem>

        <gitem>
          <label>Infoset Processing</label>

          <def>
            <p>At a minimum, an XML document is represented and manipulated as
            an <termref def="infoset">XML Information Set</termref>. The use
            of supersets, augmented information sets, or data models that can
            be represented or conceptualized as information sets should be
            allowed, and in some instances, encouraged (e.g. for the XPath 2.0
            Data Model).</p>
          </def>
        </gitem>

        <gitem>
          <label>Straightforward Core Implementation</label>

          <def>
            <p>It should be relatively easy to implement a conforming
            implementation of the language but it should also be possible to
            build a sophisticated implementation that implements its own
            optimizations and integrates with other technologies.</p>
          </def>
        </gitem>

        <gitem>
          <label>Address Practical Interoperability</label>

          <def>
            <p>An <termref def="xml-pipeline">XML Pipeline</termref> must be
            able to be exchanged between different software systems with a
            minimum expectation of the same result for the pipeline given that
            the <termref def="pipeline-env">XML Pipeline Environment</termref>
            is the same. A reasonable resolution to platform differences for
            binding or serialization of resulting infosets should be expected
            to be address by this specification or by re-use of existing
            specifications.</p>
          </def>
        </gitem>

        <gitem>
          <label>Validation of XML Pipeline Documents by a Schema</label>

          <def>
            <p>The <termref def="spec-lang">XML Pipeline Specification
            Document</termref> should be able to be validated by both W3C XML
            Schema and RelaxNG.</p>
          </def>
        </gitem>

        <gitem>
          <label>Reuse and Support for Existing Specifications</label>

          <def>
            <p><termref def="xml-pipeline">XML Pipelines</termref> need to
            support existing XML specifications and reuse common design
            patterns from within them. In addition, there must be support for
            the use of future specifications as much as possible.</p>
          </def>
        </gitem>

        <gitem>
          <label>Arbitrary Components</label>

          <def>
            <p>The specification should allow use any component technology
            that can consume or produce <termref def="infoset">XML Information
            Sets</termref>.</p>
          </def>
        </gitem>

        <gitem>
          <label>Control of Inputs and Outputs</label>

          <def>
            <p>An <termref def="xml-pipeline">XML Pipeline</termref> must
            allow control over specifying both the inputs and outputs of any
            process within the pipeline. This applies to the inputs and
            outputs of both the <termref def="xml-pipeline">XML
            Pipeline</termref> and its containing steps. It should also allow
            for the case where there might be multiple inputs and outputs.</p>
          </def>
        </gitem>

        <gitem>
          <label>Control of Flow and Errors</label>

          <def>
            <p>An <termref def="xml-pipeline">XML Pipeline</termref> must
            allow control the explicit and implicit handling of the flow of
            documents between steps. When errors occur, these must be able to
            be handled explicitly to allow alternate courses of action within
            the <termref def="xml-pipeline">XML Pipeline</termref>.</p>
          </def>
        </gitem>
      </glist>
    </div1>

    <div1 id="requirements">
      <head>Requirements</head>

      <div2 id="req-standard-names">
        <head>Standard Names for Component Inventory</head>

        <p>The <termref def="spec-lang">XML Pipeline Specification
        Document</termref> must have standard names for components that
        correspond, but not limited to, the following specifications <bibref ref="xml-core-wg"/>:</p>

        <ulist>
          <item>
            <p>XML Base</p>
          </item>

          <item>
            <p>XInclude</p>
          </item>

          <item>
            <p>XSLT 1.0/2.0</p>
          </item>

          <item>
            <p>XSL FO</p>
          </item>

          <item>
            <p>XML Schema</p>
          </item>

          <item>
            <p>XQuery</p>
          </item>

          <item>
            <p>RelaxNG</p>
          </item>
        </ulist>
      </div2>

      <div2 id="req-new-components-steps">
        <head>Allow Defining New Components and Steps</head>

        <p>An <termref def="xml-pipeline">XML Pipeline</termref> must allow
        applications to define and share new <termref def="step">steps</termref> that use new or existing <termref def="component">components</termref>. <bibref ref="xml-core-wg"/></p>
      </div2>

      <div2 id="req-minimal-components">
        <head>Minimal Component Support for Interoperability</head>

        <p>There must be a minimal inventory of <termref def="component">components</termref> defined by the specification that
        are required to be supported to facilitate interoperability of
        <termref def="xml-pipeline">XML Pipelines</termref>.</p>
      </div2>

      <div2 id="req-allow-composition">
        <head>Allow Pipeline Composition</head>

        <p>Mechanisms for <termref def="xml-pipeline">XML Pipeline</termref>
        composition for re-use or re-purposing must be provided within the
        <termref def="spec-lang">XML Pipeline Specification
        Document</termref>.</p>
      </div2>

      <div2 id="req-iteration">
        <head>Iteration of Documents and Elements</head>

        <p><termref def="xml-pipeline">XML Pipelines</termref> should allow
        iteration of a specific set of <termref def="step">steps</termref>
        over a collection of documents and or elements within a document.</p>
      </div2>

      <div2 id="req-conditional-processing">
        <head>Conditional Processing of Inputs</head>

        <p>To allow run-time selection of <termref def="step">steps</termref>,
        <termref def="xml-pipeline">XML Pipelines</termref> should provide
        mechanisms for conditional processing of documents or elements within
        documents based on expression evaluation. <bibref ref="xml-core-wg"/></p>
      </div2>

      <div2 id="req-error-handling-fallback">
        <head>Error Handling and Fall-back</head>

        <p><termref def="xml-pipeline">XML Pipelines</termref> must provide
        mechanisms for addressing error handling and fall-back behaviors.
        <bibref ref="xml-core-wg"/></p>
      </div2>

      <div2 id="req-xdm">
        <head>Support for the XPath 2.0 Data Model</head>

        <p><termref def="xml-pipeline">XML Pipelines</termref> must support
        the XPath 2.0 Data Model to allow support for XPath 2.0, XSLT 2.0, and
        XQuery as steps.</p>

        <note>
          <p>At this point, there is no consensus in the working group that
          minimal conforming implementations are required to support the XPath
          2.0 Data Model.</p>
        </note>
      </div2>

      <div2 id="req-allow-optimization">
        <head>Allow Optimization</head>

        <p>An <termref def="xml-pipeline">XML Pipeline</termref> should not
        inhibit a sophisticated implementation from performing parallel
        operations, lazy or greedy processing, and other optimizations.
        <bibref ref="xml-core-wg"/></p>
      </div2>

      <div2 id="req-streaming-pipes">
        <head>Streaming XML Pipelines</head>

        <p>An <termref def="xml-pipeline">XML Pipeline</termref> should allow
        for the existence of streaming pipelines in certain instances as an
        optional optimization. <bibref ref="xml-core-wg"/></p>
      </div2>
    </div1>

    <div1 id="use-cases">
      <head>Use cases</head>

      <p>This section contains a set of use cases that support our
      requirements and will inform our design. While there is a want to
      address all the use cases listed in this document, in the end, the first
      version of those specifications may not solve all the following use
      cases. Those unsolved use cases may be address in future versions of
      those specifications.</p>

      <p>To aid navigation, the requirements can be mapped to the use cases of
      this section as follows:</p>

      <table id="requirements-to-use-cases" role="requirements-to-use-cases" summary="Requirements and use cases">
        <tbody>
          <tr>
            <th rowspan="1" colspan="1">Requirement</th>

            <th rowspan="1" colspan="1">Use Cases</th>
          </tr>

          <tr>
            <td rowspan="1" colspan="1"><specref ref="req-allow-optimization"/></td>

            <td rowspan="1" colspan="1"><specref ref="use-case-large-document-transform"/>, <specref ref="use-case-add-nav"/></td>
          </tr>

          <tr>
            <td rowspan="1" colspan="1"><specref ref="req-streaming-pipes"/></td>

            <td rowspan="1" colspan="1"><specref ref="use-case-large-document-transform"/>, <specref ref="use-case-add-nav"/></td>
          </tr>

          <tr>
            <td rowspan="1" colspan="1"><specref ref="req-new-components-steps"/></td>

            <td rowspan="1" colspan="1"><specref ref="use-case-run-program"/>, <specref ref="use-case-computations"/></td>
          </tr>

          <tr>
            <td rowspan="1" colspan="1"><specref ref="req-error-handling-fallback"/></td>

            <td rowspan="1" colspan="1"><specref ref="use-case-no-fallback-error"/>, <specref ref="use-case-fallback-choice"/></td>
          </tr>

          <tr>
            <td rowspan="1" colspan="1"><specref ref="req-conditional-processing"/></td>

            <td rowspan="1" colspan="1"><specref ref="use-case-content-depend"/>, <specref ref="use-case-add-nav"/></td>
          </tr>

          <tr>
            <td rowspan="1" colspan="1"><specref ref="req-standard-names"/></td>

            <td rowspan="1" colspan="1"><specref ref="use-case-parse-validate-transform"/>, <specref ref="use-case-xinclude"/></td>
          </tr>

          <tr>
            <td rowspan="1" colspan="1"><specref ref="req-minimal-components"/></td>

            <td rowspan="1" colspan="1"><specref ref="use-case-parse-validate-transform"/>, <specref ref="use-case-xinclude"/></td>
          </tr>

          <tr>
            <td rowspan="1" colspan="1"><specref ref="req-allow-composition"/></td>

            <td rowspan="1" colspan="1"><specref ref="use-case-xml-rpc"/>, <specref ref="use-case-import-ingestion"/>, <specref ref="use-case-rss-descriptions"/></td>
          </tr>

          <tr>
            <td rowspan="1" colspan="1"><specref ref="req-iteration"/></td>

            <td rowspan="1" colspan="1"><specref ref="use-case-rss-descriptions"/>, <specref ref="use-case-multiple-command-line"/>, <specref ref="use-case-make-absolute-urls"/>, <specref ref="use-case-import-ingestion"/></td>
          </tr>

          <tr>
            <td rowspan="1" colspan="1"><specref ref="req-xdm"/></td>

            <td rowspan="1" colspan="1"><specref ref="use-case-collections"/></td>
          </tr>
        </tbody>
      </table>

      <note id="req-to-use-case-table">
        <p>The above table is known to be incomplete and will be completed in
        a later draft.</p>
      </note>

      <div2 id="use-case-apply-sequence">
        <head>Apply a Sequence of Operations</head>

        <p>Apply a sequence of operations such XInclude, validation, and
        transformation to a document, aborting if the result or an
        intermediate stage is not valid.</p>

        <p>(source: <bibref ref="xml-core-wg"/>)</p>
      </div2>

      <div2 id="use-case-xinclude">
        <head>XInclude Processing</head>

        <olist>
          <item>
            <p>Retrieve a document containing XInclude instructions.</p>
          </item>

          <item>
            <p>Locate documents to be included.</p>
          </item>

          <item>
            <p>Perform XInclude inclusion.</p>
          </item>

          <item>
            <p>Return a single XML document.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-parse-validate-transform">
        <head>Parse/Validate/Transform</head>

        <olist>
          <item>
            <p>Parse the XML.</p>
          </item>

          <item>
            <p>Perform XInclude.</p>
          </item>

          <item>
            <p>Validate with Relax NG, possibly aborting if not valid.</p>
          </item>

          <item>
            <p>Validate with W3C XML Schema, possibly aborting if not
            valid.</p>
          </item>

          <item>
            <p>Transform.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0012.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Norm Walsh)</loc></p>
      </div2>

      <div2 id="use-case-document-aggregation">
        <head>Document Aggregation</head>

        <olist>
          <item>
            <p>Locate a collection of documents to aggregate.</p>
          </item>

          <item>
            <p>Perform aggregation under a new document element.</p>
          </item>

          <item>
            <p>Return a single XML document.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-simple-command-line">
        <head>Single-file Command-line Document Processing</head>

        <olist>
          <item>
            <p>Read a DocBook document.</p>
          </item>

          <item>
            <p>Validate the document.</p>
          </item>

          <item>
            <p>Process it with XSLT.</p>
          </item>

          <item>
            <p>Validate the resulting XHTML.</p>
          </item>

          <item>
            <p>Save the HTML file using HTML serialization.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-multiple-command-line">
        <head>Multiple-file Command-line Document Generation</head>

        <olist>
          <item>
            <p>Read a list of source documents.</p>
          </item>

          <item>
            <p>For each document in the list:</p>

            <olist>
              <item>
                <p>Read the document.</p>
              </item>

              <item>
                <p>Perform a series of XSLT transformations.</p>
              </item>

              <item>
                <p>Serialize each result.</p>
              </item>
            </olist>
          </item>

          <item>
            <p>Alternatively, aggregate the resulting documents and serialize
            a single result.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-extract-mathml">
        <head>Extracting MathML</head>

        <p>Extract MathML fragments from an XHTML document and render them as
        images. Employ an SVG renderer for SVG glyphs embedded in the
        MathML.</p>

        <p>(source: <bibref ref="xml-core-wg"/>)</p>
      </div2>

      <div2 id="use-case-style-browser">
        <head>Style an XML Document in a Browser</head>

        <p>Style an XML document in a browser with one of several different
        stylesheets without having multiple copies of the document containing
        different xml-stylesheet directives.</p>

        <p>(source: <bibref ref="xml-core-wg"/>)</p>
      </div2>

      <div2 id="use-case-run-program">
        <head>Run a Custom Program</head>

        <p>Run a program of your own, with some parameters, on an XML file and
        display the result in a browser.</p>

        <p>(source: <bibref ref="xml-core-wg"/>)</p>
      </div2>

      <div2 id="use-case-xinclude-dsig">
        <head>XInclude and Sign</head>

        <olist>
          <item>
            <p>Process an XML document through XInclude.</p>
          </item>

          <item>
            <p>Transform the result with XSLT using a fixed
            transformation.</p>
          </item>

          <item>
            <p>Digitally sign the result with XML Signatures.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2006Feb/0062.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Henry Thompson)</loc></p>
      </div2>

      <div2 id="use-case-make-absolute-urls">
        <head>Make Absolute URLs</head>

        <olist>
          <item>
            <p>Process an XML document through XInclude.</p>
          </item>

          <item>
            <p>Remove any xml:base attributes anywhere in the resulting
            document.</p>
          </item>

          <item>
            <p>Schema validate the document with a fixed schema.</p>
          </item>

          <item>
            <p>For all elements or attributes whose type is xs:anyURI, resolve
            the value against the base URI to create an absolute URI. Replace
            the value in the document with the resulting absolute URI.</p>
          </item>
        </olist>

        <p>This example assumes preservation of infoset ([base URI]) and PSVI
        ([type definition]) properties from step to step. Also, there is no
        way to reorder these steps as the schema doesn't accept xml:base
        attributes but the expansion requires xs:anyURI typed values.</p>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2006Feb/0062.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Henry Thompson)</loc></p>
      </div2>

      <div2 id="use-case-simple-transform-service">
        <head>A Simple Transformation Service</head>

        <olist>
          <item>
            <p>Extract XML document (XForms instance) from an HTTP request
            body</p>
          </item>

          <item>
            <p>Execute XSLT transformation on that document.</p>
          </item>

          <item>
            <p>Call a persistence service with resulting document</p>
          </item>

          <item>
            <p>Return the XML document from persistence service (new XForms
            instance) as the HTTP response body.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-handheld-service">
        <head>Service Request/Response Handling on a Handheld</head>

        <p>Allow an application on a handheld device to construct a pipeline,
        send the pipeline and some data to the server, allow the server to
        process the pipeline and send the result back.</p>

        <p>(source: <bibref ref="xml-core-wg"/>)</p>
      </div2>

      <div2 id="use-case-web-service">
        <head>Interact with Web Service (Tide Information)</head>

        <olist>
          <item>
            <p>Parse the incoming XML request.</p>
          </item>

          <item>
            <p>Construct a URL to a REST-style web service at the NOAA (see
            <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://tidesonline.nos.noaa.gov/geographic.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">website</loc>).</p>
          </item>

          <item>
            <p>Parse the resulting invalid HTML document with by translating
            and fixing the HTML to make it XHTML (e.g. use TagSoup or
            tidy).</p>
          </item>

          <item>
            <p>Extract the tide information from a plain-text table of data
            from document by applying a regular expression and creating markup
            from the matches.</p>
          </item>

          <item>
            <p>Use XQuery to select the high and low tides.</p>
          </item>

          <item>
            <p>Formulate an XML response from that tide information.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0021.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Alex Milowski)</loc></p>
      </div2>

      <div2 id="use-case-rss-descriptions">
        <head>Parse and/or Serialize RSS descriptions</head>

        <p>Parse descriptions:</p>

        <olist>
          <item>
            <p>Iterate over the RSS description elements and do the
            following:</p>

            <olist>
              <item>
                <p>Gather the text children of the 'description' element.</p>
              </item>

              <item>
                <p>Parse the contents with a simulated document element in the
                XHTML namespace.</p>
              </item>

              <item>
                <p>Send the resulting children as the children of the
                'description element.</p>
              </item>
            </olist>
          </item>

          <item>
            <p>Apply rest of pipeline steps.</p>
          </item>
        </olist>

        <p>Serialize descriptions</p>

        <olist>
          <item>
            <p>Iterate over the RSS description elements and do the
            following:</p>

            <olist>
              <item>
                <p>Serialize the children elements.</p>
              </item>

              <item>
                <p>Generate a new child as a text children containing the
                contents (escaped text).</p>
              </item>
            </olist>
          </item>

          <item>
            <p>Apply rest of pipeline steps.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0021.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Alex Milowski)</loc></p>
      </div2>

      <div2 id="use-case-collections">
        <head>XQuery and XSLT 2.0 Collections</head>

        <p>In XQuery and XSLT 2.0 there is the idea of an input and output
        collection and a pipeline must be able to consume or produce
        collections of documents both as inputs or outputs of steps as well as
        whole pipelines.</p>

        <p>For example, for input collections:</p>

        <olist>
          <item>
            <p>Accept a collection of documents.</p>
          </item>

          <item>
            <p>Apply a single XSLT 2.0 transformation that processes the
            collection and produces another collection.</p>
          </item>

          <item>
            <p>Serialize the collection to files or URIs.</p>
          </item>
        </olist>

        <p>For example, for output collections:</p>

        <olist>
          <item>
            <p>Accept a single document as input.</p>
          </item>

          <item>
            <p>Apply an XQuery that produces a sequence of documents (a
            collection).</p>
          </item>

          <item>
            <p>Serialize the collection to files or URIs.</p>
          </item>
        </olist>
      </div2>

      <div2 id="use-case-ajax-server">
        <head>An AJAX Server</head>

        <olist>
          <item>
            <p>Receive XML request with word to complete.</p>
          </item>

          <item>
            <p>Call a sub-pipeline that retrieves list of completions for that
            word.</p>
          </item>

          <item>
            <p>Format resulting document with XSLT.</p>
          </item>

          <item>
            <p>Serialize response to XML.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-dynamic-xquery">
        <head>Dynamic XQuery</head>

        <olist>
          <item>
            <p>Dynamically create an XQuery query using XSLT, based on input
            XML document.</p>
          </item>

          <item>
            <p>Execute the XQuery against a database.</p>
          </item>

          <item>
            <p>Construct an XHTML result page using XSLT from the result of
            the query.</p>
          </item>

          <item>
            <p>Serialize response to HTML.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-rw-non-xml">
        <head>Read/Write Non-XML File</head>

        <olist>
          <item>
            <p>Read a CSV file and convert it to XML.</p>
          </item>

          <item>
            <p>Process the document with XSLT.</p>
          </item>

          <item>
            <p>Convert the result to a CSV format using text
            serialization.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-update-insert-db">
        <head>Update/Insert Document in Database</head>

        <olist>
          <item>
            <p>Receive an XML document to save.</p>
          </item>

          <item>
            <p>Check the database to see if the document exists.</p>
          </item>

          <item>
            <p>If the document exists, update the document.</p>
          </item>

          <item>
            <p>If the document does not exists, add the document.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-content-depend">
        <head>Content-Dependent Transformations</head>

        <olist>
          <item>
            <p>Receive an XML document to format.</p>
          </item>

          <item>
            <p>If the document is XHTML, apply a theme via XSLT and serialize
            as HTML.</p>
          </item>

          <item>
            <p>If the document is XSL-FO, apply an XSL FO processor to produce
            PDF.</p>
          </item>

          <item>
            <p>Otherwise, serialize the document as XML.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-config-depend">
        <head>Configuration-Dependent Transformations</head>

        <p>Mobile example:</p>

        <olist>
          <item>
            <p>Receive an XML document to format.</p>
          </item>

          <item>
            <p>If the configuration is "desktop browser", apply desktop XSLT
            and serialize as HTML.</p>
          </item>

          <item>
            <p>If the configuration is "mobile browser", apply mobile XSLT and
            serialize as XHTML.</p>
          </item>
        </olist>

        <p>News feed example:</p>

        <olist>
          <item>
            <p>Receive an XML document in Atom format.</p>
          </item>

          <item>
            <p>If the configuration is "RSS 1.0", apply "Atom to RSS 1.0"
            XSLT.</p>
          </item>

          <item>
            <p>If the configuration is "RSS 2.0", apply "Atom to RSS 2.0"
            XSLT.</p>
          </item>

          <item>
            <p>Serialize the document as XML.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-xml-rpc">
        <head>Response to XML-RPC Request</head>

        <olist>
          <item>
            <p>Receive an XML-RPC request.</p>
          </item>

          <item>
            <p>Validate the XML-RPC request with a RelaxNG schema.</p>
          </item>

          <item>
            <p>Dispatch to different sub-pipelines depending on the content of
            /methodCall/methodName.</p>
          </item>

          <item>
            <p>Format the sub-pipeline response to XML-RPC format via
            XSLT.</p>
          </item>

          <item>
            <p>Validate the XML-RPC response with an W3C XML Schema.</p>
          </item>

          <item>
            <p>Return the XML-RPC response.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-import-ingestion">
        <head>Database Import/Ingestion</head>

        <p>Import example:</p>

        <olist>
          <item>
            <p>Read a list of source documents.</p>
          </item>

          <item>
            <p>For each document in the list:</p>

            <olist>
              <item>
                <p>Validate the document.</p>
              </item>

              <item>
                <p>Call a sub-pipeline to insert content into a relational or
                XML database.</p>
              </item>
            </olist>
          </item>
        </olist>

        <p>Ingestion example:</p>

        <olist>
          <item>
            <p>Receive a directory name.</p>
          </item>

          <item>
            <p>Produce a list of files in the directory as an XML
            document.</p>
          </item>

          <item>
            <p>For each element representing a file:</p>

            <olist>
              <item>
                <p>Create an iTQL query using XSLT.</p>
              </item>

              <item>
                <p>Query the repository to check if the file has been
                uploaded.</p>
              </item>

              <item>
                <p>Upload if necessary.</p>
              </item>

              <item>
                <p>Inspect the file to check the metadata type.</p>
              </item>

              <item>
                <p>Transform the document with XSLT.</p>
              </item>

              <item>
                <p>Make a SOAP call to ingest the document.</p>
              </item>
            </olist>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-metadata">
        <head>Metadata Retrieval</head>

        <olist>
          <item>
            <p>Call a SOAP service with metadata format as a parameter.</p>
          </item>

          <item>
            <p>Create an iTQL query with XSLT.</p>
          </item>

          <item>
            <p>Query a repository for the XML document.</p>
          </item>

          <item>
            <p>Load a list of XSLT transformations from a configuration.</p>
          </item>

          <item>
            <p>Iteratively execute the XSLT transformations.</p>
          </item>

          <item>
            <p>Serialize the result to XML.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0020.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Erik Bruchez)</loc></p>
      </div2>

      <div2 id="use-case-non-xml-production">
        <head>Non-XML Document Production</head>

        <olist>
          <item>
            <p>An non-XML document is fed into the process.</p>
          </item>

          <item>
            <p>That input is converted into a well-formed XML document.</p>
          </item>

          <item>
            <p>A table of contents is extracted.</p>
          </item>

          <item>
            <p>Pagination is performed.</p>
          </item>

          <item>
            <p>Each page is transformed into some output language.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0016.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Rui Lopes)</loc></p>

        <olist>
          <item>
            <p>Read a non-XML document.</p>
          </item>

          <item>
            <p>Transform.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0012.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Norm Walsh)</loc></p>
      </div2>

      <div2 id="use-case-computations">
        <head>Integrate Computation Components (MathML)</head>

        <olist>
          <item>
            <p>Select a MathML content element.</p>
          </item>

          <item>
            <p>For that element, apply a computation (e.g. compute the kernel
            of a matrix).</p>
          </item>

          <item>
            <p>Replace the input MathML with the output of the
            computation.</p>
          </item>
        </olist>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/0021.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Alex Milowski)</loc></p>
      </div2>

      <div2 id="use-case-dsdl-validation">
        <head>Document Schema Definition Languages (DSDL) - Part 10:
        Validation Management</head>

        <p>This document provides a test scenario that will be used to create
        validation management scripts using a range of existing techniques,
        including those used for program compilation, etc.</p>

        <p>The steps required to validate our sample document are:</p>

        <olist>
          <item>
            <p>Use ISO 19757-4 Namespace-based Validation Dispatching Language
            (NVDL) to split out the parts of the document that are encoded
            using HTML, SVG and MathML from the bulk of the document, whose
            tags are defined using a user-defined set of markup tags.</p>
          </item>

          <item>
            <p>Validate the HTML elements and attributes using the HTML 4.0
            DTD (W3C XML DTD).</p>
          </item>

          <item>
            <p>Use a set of Schematron rules stored in check-metadata.xml to
            ensure that the metadata of the HTML elements defined using Dublin
            Core semantics conform to the information in the document about
            the document's title and subtitle, author, encoding type, etc.</p>
          </item>

          <item>
            <p>Validate the SVG components of the file using the standard W3C
            schema provided in the SVG 1.2 specification.</p>
          </item>

          <item>
            <p>Use the Schematron rules defined in SVG-subset.xml to ensure
            that the SVG file only uses those features of SVG that are valid
            for the particular SVG viewer available to the system.</p>
          </item>

          <item>
            <p>Validate the MathML components using the latest version of the
            MathML schema (defined in RELAX-NG) to ensure that all maths
            fragments are valid. The schema will make use the datatype
            definitions in check-maths.xml to validate the contents of
            specific elements.</p>
          </item>

          <item>
            <p>Use MathML-SVG.xslt to transform the MathML segments to
            displayable SVG and replace each MathML fragment with its SVG
            equivalent.</p>
          </item>

          <item>
            <p>Use the ISO 19757-8 Document Schema Renaming Language (DSRL)
            definitions in convert-mynames.xml to convert the tags in the
            local nameset to the form that can be used to validate the
            remaining part of the document using docbook.dtd.</p>
          </item>

          <item>
            <p>Use the IS0 19757-7 Character Repertoire Definition Language
            (CRDL) rules defined in mycharacter-checks.xml to validate that
            the correct character sets have been used for text identified as
            being Greek and Cyrillic.</p>
          </item>

          <item>
            <p>Convert the Docbook tags to HTML so that they can be displayed
            in a web browser using the docbook-html.xslt transformation
            rules.</p>
          </item>
        </olist>

        <p>Each validation script should allow the four streams produced by
        step 1 to be run in parallel without requiring the other validations
        to be carried out if there is an error in another stream. This means
        that steps 2 and 3 should be carried out in parallel to steps 4 and 5,
        and/or steps 6 and 7 and/or steps 8 and 9. After completion of step 10
        the HTML (both streams), and SVG (both streams) should be recombined
        to produce a single stream that can fed to a web browser. The flow is
        illustrated in the following diagram:</p>

        <p><graphic xmlns:xlink="http://www.w3.org/1999/xlink" alt="DSDL use case graphic" source="dsdl.jpg" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></p>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2005Dec/att-0007/Part10Reqs.htm" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Martin Bryan)</loc></p>
      </div2>

      <div2 id="use-case-large-document-transform">
        <head>Large-Document Subtree Iteration</head>

        <p>Running XSLT on a very large document isn't typically practical. In
        these cases, it is often the case that a particular element, that may
        be repeated over-and-over again, needs to be transformed.
        Conceptually, a pipeline could limit the transformation to a subtree
        by:</p>

        <olist>
          <item>
            <p>Limiting the transform to a subtree of the document identified
            by an XPath.</p>
          </item>

          <item>
            <p>For each subtree, cache the subtree and build a whole document
            with the identified element as the document element and then run a
            transform to replace that subtree in the original document.</p>
          </item>

          <item>
            <p>For any non-matches, the document remains the same and
            "streams" around the transform.</p>
          </item>
        </olist>

        <p>This allows the transform and the tree building to be limited to a
        small subtree and the rest of the process to stream. As such, an
        arbitrarily large document can be processed in a bounded amount of
        memory.</p>

        <p><loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2006Jan/0005.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">(source:
        Alex Milowski)</loc></p>
      </div2>

      <div2 id="use-case-add-nav">
        <head>Adding Navigation to an Arbitrarily Large Document</head>

        <p>For a particular website, every XHTML document needs to have
        navigation elements added to the document. The navigation is static
        text that surrounds the body of the document. This navigation is added
        by:</p>

        <olist>
          <item>
            <p>Matching the head and body elements using a XPath expression
            that can be streamed.</p>
          </item>

          <item>
            <p>Inserting a stub for a transformation for including the style
            and surrounding navigation of the site.</p>
          </item>

          <item>
            <p>For each of the stubs, transformations insert the markup using
            a subtree expansion that allows the rest of the document to
            stream.</p>
          </item>
        </olist>

        <p>In the end, the pipeline allows arbitrarily large XHTML document to
        be processed with a near-constant cost.</p>

        <p>(source: Alex Milowski)</p>
      </div2>

      <div2 id="use-case-fallback-choice">
        <head>Fallback to Choice of XSLT Processor</head>

        <p>A step in a pipeline produces multiple output documents. In XSLT
        2.0, this is a standard feature of all XSLT 2.0 processors. In XSLT
        1.0, this is not standard.</p>

        <p>A pipeline author wants to write a pipeline that, at compile-time,
        the implementation chooses XSLT 2.0 when possible and degrades to XSLT
        1.0 when XSLT 2.0 is not supported. In the case of XSLT 1.0, the step
        will use XSLT extensions to support the multiple output
        documents--which again may fail. Fortunately, the XSLT 1.0
        transformation can be written to test for this.</p>

        <p>(source: Alex Milowski)</p>
      </div2>

      <div2 id="use-case-no-fallback-error">
        <head>No Fallback for XQuery Causes Error</head>

        <p>As the final step in a pipeline, XQuery is required to be run. If
        the XQuery step is not available, the compilation of the pipeline
        needs to fail. Here the pipeline author has chosen that the pipeline
        must not run if XQuery is not available.</p>

        <p>(source: Alex Milowski)</p>
      </div2>
    </div1>
  </body>

  <back>
    <div1 id="references">
      <head>References</head>

      <blist>
        <bibl xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/proc-model-req/" id="xml-core-wg" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"><titleref xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">XML Processing Model
        Requirements</titleref>. Dmitry Lenkov, Norman Walsh, editors. W3C
        Working Group Note 05 April 2004</bibl>

        <bibl xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/xml-infoset/" id="xml-infoset-rec" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"><titleref xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">XML Information Set (Second
        Edition)</titleref> John Cowan, Richard Tobin, editors. W3C Working
        Group Note 04 February 2004</bibl>
      </blist>
    </div1>

    <div1 id="contributors">
      <head>Contributors</head>

      <p>The following members of the XML Core Working Group contributed to
      this specification as part of their requirements document effort within
      that working group:</p>

      <ulist>
        <item>
          <p>Dmitry Lenkov, Oracle Corporation</p>
        </item>

        <item>
          <p>Norman Walsh, Sun Microsystems, Inc</p>
        </item>
      </ulist>
    </div1>
  </back>
</spec>