XProc

XProcFilename extension| `.xpl`

|

Internet media type| `application/xproc+xml`
Type of format| Scripting language / Data processing
Extended from| XML
Standard| XProc 3.1
Website| https://xproc.org

XProc is an XML transformation language for processing documents in pipelines: chaining conversions and other steps together to achieve the desired results. It can handle documents in XML, HTML, JSON, text and binary.

The current (stable) version is 3.1.[1] While XProc 1.0[2] is a W3C Recommendation, XProc 3.1 is a standard developed by the W3C XProc Next Community Group.[3]

Its main characteristics are:

* XProc is a programming language, expressed in XML, in which you can write pipelines.
* An XProc pipeline takes data as its input (often XML) and passes this through specialized steps to produce end results.
* Steps range from simple ones, like adding attributes, to more complex stuff like splitting/combining/pruning, transformations with XSLT and XQuery, validations against schemas, etc.
* Within a pipeline you can do things like working with variables, branching, looping, catch errors, etc. Everything is based on the data flowing through.
* XProc pipelines are not limited to a linear succession of steps. They can fork and merge.
* XProc allows you to create custom steps by combining other steps. These custom steps can be used just like any other. Therefore, pipelines and steps are interchangeable concepts in XProc.
* Custom steps can be collected into libraries.
* XProc aids in the housekeeping surrounding the processing, like inspecting directories, reading documents from zip files, writing things to disk, etc
* There is software that can execute these pipelines, the so-called XProc processors.

## Contents

* 1 Example
* 2 Understanding and learning XProc
* 3 History
* 4 Implementations
* 4.1 Older versions
* 5 Logo
* 6 References

## Example

The following is a (very) simple XProc pipeline:

<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" version="3.0">

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

<p:add-attribute attribute-name="timestamp" attribute-value="{current-dateTime()}"/>
<p:delete match="@data"/>

</p:declare-step>

* It declares two ports:
* An input port called `source`. This is where the original document flows in.
* An output port called `result`. This is where the resulting document flows out.
* The document that comes in through the `source` port automatically flows into the first step of the pipeline. This `p:add-attribute` step adds an attribute called `timestamp` with the current date and time.
* The result of this flows through the `p:delete` step that removes all attributes called `data`.
* Since `p:delete` is the last step, the resulting document flows out through the output `result` port.

So if you supply the following XML document to this pipeline:

<example data="321">
<item data="123">Some data...</item>
</example>

It comes out as:

<example timestamp="2024-09-11T15:05:22.82+02:00">
<item>Some data...</item>
</example>

The exact date and time recorded in the `timestamp` attribute is of course dependent on the date and time the pipeline is executed.

## Understanding and learning XProc

The learning page of the XProc website[4] contains links to all the learning and reference materials the XProc community group is aware of. There is a special 101 section with introductory learning materials.

## History

Ideas for something, some programming language, for processing were there right from the beginnings of XML, at the end of the twentieth century. But it was not until the end of 2005 that the W3C started a working group called the XML Processing Model Working Group. This resulted in the recommendation for XProc 1.0 dated May 11, 2010.[2]

There were various attempts to create working XProc 1.0 processors. The only two currently available as open source products that implement the full 1.0 standard are XML Calabash[5] and MorganaXProc.[6]

After the release of version 1.0, the XProc working group continued debating a next version. Ideas were raised for version 2.0. This was based on a non-XML syntax which didn’t raise a lot of support from the community. Engagement in the working grouped waned and in 2016 it ceased to exist.

In June 2017 the XProc Next Community Group[3] was founded and started working on a new version, now completely XML based. Because this was a completely different approach than the 2.0 initiative, the version number was increased to 3.0. A stable version was released on 12 September 2022.[1]

In 2024 the working group started work on a minor update which was released as XProc 3.1 on 29 May 2025. It fixes a few errata in the language specification and the standard step library and also publishes the following step libraries as finished specifications[7]:

* Dynamic pipeline execution \- for running pipelines constructed dynamically
* File steps \- for accessing and managing files on a filesystem
* Operating system steps \- for accessing information about the operating system and running external commands
* Mail steps \- for working with email
* Paged media steps \- for applying CSS or XSL-FO to an XML or HTML document
* Text steps \- optional text-related steps, eg. converting markdown to html. The standard step library already includes several required steps for working with text[8]
* Validation steps \- for testing whether an input conforms to a set of rules expressed in a schema. The input may be XML, HTML or JSON
* Invisible XML \- for working with Invisible XML

## Implementations

The following processors support XProc 3.0 and above:

Implementations of XProc 3  Name  | Maintainer  | Completeness  | Notes

|
|
|

MorganaXProc-IIIse | Achim Berndzen  | Implements all required features plus most of the optional parts of the XProc 3.1 standard[9][10].  |
XML Calabash 3 | Norman Tovey-Walsh  | Implements all required features and most of the optional parts of the XProc 3.1 standard[9][11].  | Also implements a variety of extension steps

XProc 3.0 is backwards incompatible and therefore the above implementations are not expected to support XProc 1.0[12].

### Older versions

The following processors support the XProc 1.0 standard:

* XML Calabash,[5] maintained by Norman Walsh. This processor is also integrated in the Oxygen XML Editor product.
* Morgana Xproc 1.0,[6] maintained by Achim Berndzen.

There were several other XProc 1.0 implementations, but these were either incomplete or are not maintained.

## Logo

The XProc logo and mascot is a fish, called Kanava, after the Finnish word for pipeline. The logo was created by Bethan Tovey-Walsh.

## References

1. ↑ 1.0 1.1 The XProc website
2. ↑ 2.0 2.1 The XProc 1.0 specification
3. ↑ 3.0 3.1 The XProc next community group
4. ↑ The XProc 3.0 learning page
5. ↑ 5.0 5.1 The XML Calabash 1.0 processor
6. ↑ 6.0 6.1 The Morgana XProc 1.0 processor
7. ↑ "XProc - Specifications". https://xproc.org/specifications.html.
8. ↑ "XProc 3.1: Standard Step Library". https://spec.xproc.org/3.1/steps/.
9. ↑ 9.0 9.1 "XProc - Processors". https://xproc.org/processors.html.
10. ↑ The MorganaXProc-IIIse XProc processor
11. ↑ The XML Calabash 3.0 processor
12. ↑ Tovey-Walsh, Norman (18 Feb 2020). "XProc 3.0: Ready or Not". https://so.nwalsh.com/2020/02/15/xproc-30.

* v
* t
* e

World Wide Web Consortium (W3C)

Products and
standards|

| Recommendations|

* ActivityPub
* ARIA
* Canonical XML
* CDF
* CSS
* DOM
* Geolocation API
* HTML (HTML5)
* ITS
* JSON-LD
* Linked Data Notifications
* MathML
* Micropub
* OWL
* PLS
* RDF
* RDF Schema
* SISR
* SKOS
* SMIL
* SOAP
* SRGS
* SRI
* SSML
* SVG
* SCXML
* SHACL
* SPARQL
* Timed text
* VoiceXML
* Web storage
* WSDL
* Webmention
* WebSub
* XForms
* XHTML
* XHTML+RDFa
* XInclude
* XLink
* XML
* XML Base
* XML Encryption
* XML Events
* XML Information Set
* XML namespace
* XML Schema
* XML Signature
* XOP
* XPath
* XPath 2.0
* XPointer
* XProc
* XQuery
* XSL
* XSL-FO
* XSLT (elements)

|

Notes|

* IndieAuth
* JF2
* Post Type Discovery
* XAdES
* XHTML+SMIL
* XUP

Working drafts|

* CCXML
* CURIE
* EME
* InkML
* MSE
* RIF
* SMIL Timesheets
* sXBL
* XFDL
* XFrames
* XBL
* XMLHttpRequest

Guidelines|

* Web Content Accessibility Guidelines

Initiative|

* Multimodal Interaction Activity (MMI)
* Markup Validation Service
* Web Accessibility Initiative
* WebPlatform

Deprecated|

* C-HTML
* HDML
* JSSS
* PGML
* VML
* XHTML+MathML+SVG

Obsoleted|

* P3P

Organizations|

* Advisory Committee (AC)
* World Wide Web Foundation

Elected groups|

* Advisory Board (AB)

Working groups|

* CSS
* Geolocation
* Social Web
* SVG
* Web Hypertext Application Technology (WHATWG)
* Web Platform

Community groups|

* Web Incubator Community Group (WICG)

Closed groups|

* Device Description (DDWG)
* HTML

Software|

* CERN httpd
* Libwww

Browsers|

* Line Mode (1990–)
* Arena (1993–98)
* Agora (1994–97)
* Argo (1994–97)
* Amaya (browser/editor, 1996–2012)

Conferences|

* International World Wide Web Conference (IW3C)
* Steering Committee (IW3C2)
* First conference ("WWW1", 1994)

0.00

(0 votes)

Original source: https://en.wikipedia.org/wiki/XProc. Read more

|

Retrieved from "https://handwiki.org/wiki/index.php?title=XProc&oldid=3987133"
*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template