This page contains errors and corrections in XProc 3.0 Programmer Reference. If you find an error in the book, please send email to that describes what the error is and where in the book you found it. Errata are shown in the table in chronological order, with the newest items added at the top of the table.

Edition Location Description Status Date Found by
1st Chapter 10, XProc examples and recipes, Example 10.23
(page 227 in the print edition)

The <option> element in the first line of this example is missing the namespace prefix p:. The correct line, with the change highlighted, is:

<p:option name="debug" select="true()" static="true"/>
Confirmed March 15, 2024 Heidi Vanparys
1st Chapter 4, Programming Concepts, Example 4.17 (page 70 in the print edition) The built-in Library step used here is shown as <p:set-attribute>, but it should be <p:add-attribute>, as shown below (changes highlighted in bold text):

 <p:variable name="prefix" as="xs:string" select="'myapp-'"/>
    <p:with-option name="match" select="'/*'"/>
    <p:with-option name="attribute-name" select="concat($prefix, 'att1')"/>
    <p:with-option name="attribute-value" select="…some other computed value…"/>
Confirmed August 29, 2023 Andy Carver
1st Chapter 8, Built-in steps, Example 8.4 (page 185 in the print edition) The second occurrence of <p:option> in Example 8.4 should be <p:with-option>, and the <p:with-option> element needs to be closed (changes highlighted in bold text):

<p:option name="parameter-to-pass-to-xslt"/>
    <p:with-input port="stylesheet" href="xslt-with-parameters.xsl"/>
    <p:with-option name="parameters"
        select="map { 'first-param' : $parameter-to-pass-to-xslt,
                      'second-param' : 12345 }"/>
Confirmed July 5, 2023 Andy Carver
1st Chapter 7, Core Steps, Example 7.2 (page 148 in the print edition) This example contains an invalid attribute name for the <p:add-attribute> step. The example uses a select attribute, but it should be the attribute-value attribute:

<p:declare-step xmlns:p="" version="3.0">

  <p:input port="source"/>
  <p:output port="result"/>

    <!-- 1 - Selection using the p:for-each's anonymous input port: -->
    <p:with-input select="/*/doc"/>
    <!-- 2 - Add a timestamp attribute: -->
    <p:add-attribute attribute-name="timestamp"
    <!-- 3 - Write the result to disk: -->
    <p:store href="{concat('/some/path/doc-',
             p:iteration-position(), '.xml')}"/>

  <!-- 4 - Discard the documents, just report a count: -->

Confirmed July 7, 2020 Erik Siegel
1st Chapter 4, Programming Concepts, Common attributes (page 76 in the print edition) The text and title for the section “The xml:id attribute” on page 76 should be as follows:

“The xml:id, xml:lang, and xml:space attributes”

The xml:id, xml:lang, and xml:space attributes can appear anywhere. Currently, XProc does nothing with these attributes.

Confirmed July 7, 2020 Eirk Siegel