p:xinclude (3.1) 
Apply XInclude procesing to a document.
<p:declare-step type="p:xinclude"> <input port="source" primary="true" content-types="xml html" sequence="true"/> <output port="result" primary="true" content-types="xml html" sequence="true"/> <option name="fixup-xml-base" as="xs:boolean" required="false" select="false()"/> <option name="fixup-xml-lang" as="xs:boolean" required="false" select="false()"/> </p:declare-step>
The p:xinclude step applies XInclude processing to the document
appearing on the source document.
Ports:
Port | Type | Primary? | Content types | Seq? | Description |
|---|---|---|---|---|---|
|
|
|
|
| The document to apply the XInclude processing to. |
|
|
|
|
| The resulting document. |
Options:
The XInclude standard defines a syntax for specifying document inclusions. Basically this means:
In your source document you write (zero, one or multiple times): <xi:include href="…"/> (the xi
namespace prefix must be bound to the namespace http://www.w3.org/2001/XInclude).
You run your document through the p:xinclude step.
All <xi:include> elements are replaced with the contents of the document their href attribute is pointing to.
All <xi:include> elements in the included documents are processed also, recursively.
Additionally, the XInclude standard defines some additional attributes for the <xi:include>
element. The most used one is probably the parse attribute: parse="xml" (the default) means the document must be a
well-formed XML document and is included as an XML fragment; parse="text" means the document is included as plain text. There is
also an <xi:fallback> child element that
defines what will happen if the included document could not be found.
Remark upfront: some of the example documents contain xml:lang attributes. These are intended for the Language fixup example below.
Assume we have a master document called document-0.xml that XIncludes two other documents:
<document-0 xmlns:xi="http://www.w3.org/2001/XInclude" xml:lang="en-us"> <description>This is the master document</description> <xi:include href="includes/document-1.xml"/> <xi:include href="includes/document-2.xml"/> </document-0>
The first include document includes/document-1.xml looks like this, please notice that it contains an <xi:include>
element itself:
<document-1 xmlns:xi="http://www.w3.org/2001/XInclude"> <description>This is include document 1</description> <xi:include href="document-2.xml"/> </document-1>
The second include document includes/document-2.xml (that is also included by includes/document-1.xml) looks like
this:
<document-1 xmlns:xi="http://www.w3.org/2001/XInclude"> <description>This is include document 1</description> <xi:include href="document-2.xml"/> </document-1>
Now if we run document-0.xml through the p:xinclude step, the result is as follows:
Pipeline document:
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" version="3.0"> <p:input port="source" href="document-0.xml"/> <p:output port="result"/> <p:xinclude/> </p:declare-step>
Result document:
<document-0 xml:lang="en-us">
<description>This is the master document</description>
<document-1>
<description>This is include document 1</description>
<document-2 xml:lang="en-gb">
<description>This is include document 2</description>
</document-2>
</document-1>
<document-2 xml:lang="en-gb">
<description>This is include document 2</description>
</document-2>
</document-0>The XInclude base URI fixup means that an xml:base attribute is added to the root elements of the included documents. Using the
same documents and include structure as the Basic usage example, it looks like this:
Pipeline document:
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" version="3.0"> <p:input port="source" href="document-0.xml"/> <p:output port="result"/> <p:xinclude fixup-xml-base="true"/> </p:declare-step>
Result document:
<document-0 xml:lang="en-us">
<description>This is the master document</description>
<document-1 xml:base="file:/…/…/includes/document-1.xml">
<description>This is include document 1</description>
<document-2 xml:lang="en-gb" xml:base="file:/…/…/includes/document-2.xml">
<description>This is include document 2</description>
</document-2>
</document-1>
<document-2 xml:lang="en-gb" xml:base="file:/…/…/includes/document-2.xml">
<description>This is include document 2</description>
</document-2>
</document-0>Notice that there is no xml:base attribute added to the root element of the master document. If you need
all document root elements having an xml:base attribute, use the p:add-xml-base step
instead of XInclude base URI fixup:
Pipeline document:
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" version="3.0"> <p:input port="source" href="document-0.xml"/> <p:output port="result"/> <p:xinclude/> <p:add-xml-base relative="false"/> </p:declare-step>
Result document:
<document-0 xml:lang="en-us" xml:base="file:/…/…/document-0.xml">
<description>This is the master document</description>
<document-1 xml:base="file:/…/…/includes/document-1.xml">
<description>This is include document 1</description>
<document-2 xml:lang="en-gb" xml:base="file:/…/…/includes/document-2.xml">
<description>This is include document 2</description>
</document-2>
</document-1>
<document-2 xml:lang="en-gb" xml:base="file:/…/…/includes/document-2.xml">
<description>This is include document 2</description>
</document-2>
</document-0>The XInclude language fixup means that an xml:lang attribute is added to the root elements of the included documents. This
stops the language settings of the including document from being inherited by the included documents. Using the same documents and include
structure as the Basic usage example, it looks like this:
Pipeline document:
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" version="3.0"> <p:input port="source" href="document-0.xml"/> <p:output port="result"/> <p:xinclude fixup-xml-lang="true"/> </p:declare-step>
Result document:
<document-0 xml:lang="en-us">
<description>This is the master document</description>
<document-1 xml:lang="">
<description>This is include document 1</description>
<document-2 xml:lang="en-gb">
<description>This is include document 2</description>
</document-2>
</document-1>
<document-2 xml:lang="en-gb">
<description>This is include document 2</description>
</document-2>
</document-0>Notice the empty xml:base="" attribute on the <document-1> element. That wasn’t there in the source. It stops
the language settings of the including document document-0.xml (xml:lang="en-us") from automatically being inherited
by the included document includes/document-1.xml.
p:xinclude preserves all document-properties of the document(s) appearing on its source port.
Error code | Description |
|---|---|
It is a dynamic error if an XInclude error occurs during processing. |
This description of the p:xinclude step is for XProc version: 3.1. This is a required step (an XProc 3.1 processor must support this).
The formal specification for the p:xinclude step can be found here.
The p:xinclude step is part of categories:
The p:xinclude step is also present in version:
3.0.