Version 2.7

Historical note: Orbeon PresentationServer 2.7 was released on January 21, 2005

JBoss support

JBoss is now supported. See the installation instruction for more information on how to setup OPS on JBoss.


Compliance matrix

In line with our commitment to fully support the XForms specification, we now clearly document the level of support for each part of the specification in a compliance matrix.

Open selection

The <xforms:select> and <xforms:select1 controls let the end-user select on of more items from a list. You can now add the selection="open" attribute on those controls; when specified, the end-user can enter a value of its choice in text field, of choose one of more of the suggested values.

Linking attribute

You can now use the src attribute on <xforms:label>, <xforms:hint>, <xforms:help>, <xforms:alert>, and <xforms:message> to specify the URL from where the text should be loaded, instead of having the text inline in the XForms view or in the XForms instance (ref or bind attribute).

Single-node and node-set binding attributes

In your XForms views, in addition of using the ref and nodeset attributes to reference nodes of the XForms instance, you can now use the bind attribute. You first assign an id to a nodeset in the XForms model: e.g. <xforms:bind nodeset="/company/ceo" id="ceo"/>; you then reference this id in your XForms view: e.g. <xforms:input bind="ceo"/>.

Nested bind

You can now nest <xforms:bind> elements in the XForms model. The nodeset XPath expression in nested elements is relative to the nodeset selected by the nodeset expression on the parent element.

doc() in model item properties

You can now use the XPath 2.0 doc() function in XPath expressions in the XForms model. For instance, assuming that you have a "lookup table" defined in an XML file mapping department id to department name, you can write a model item property calculating the value of <department-name> element based on the value entered by the user for <department-id>:

<xforms:bind nodeset="/instance/department-name" calculate="doc('oxf:/departments.xml')/departments/department[@id = /instance/department-id]/name"/>

Short form element names

In this version the names generated by OPS for HTML form elements are much shorter than in previous versions. Under certain circumstances (low bandwidth between server and end-user, large forms, complex XForms instances with many levels of nested elements using namespaces), submitting a form was slow as a lot of data had to be sent from the browser back to the server. A new name generation scheme has been implemented in this version. It solves the problem and guaranties that names will be short even if your XForms instance has many levels of nested elements and is using namespaces.

Handling of prefixes and namespace declarations

In previous versions of OPS, when a form was submitted and the XForms instance recreated, all the elements and attribute where in the right namespace, but the actual prefix was not necessarily kept and namespace declarations where inserted only where used. In this version, Presentation Server keeps the exact value of the prefixes and the location of namespace declaration when a form is submitted and the XForms instance is recreated.

xxforms:hidden extension control

The XForms extension control xxforms:hidden is supported again and documented.

Semantic of XForms conditionals

The <xxforms:choose> used to run all the "true" <xxforms:when>. Instead, it now only run the first one if any, and the <xxforms:otherwise> otherwise. This is inline with the behavior of the <xsl:choose>.


<xforms:message> is now supported. This lets you display a message in a dialog when a submit control is clicked. See the message action documentation for more details.

XPath 2.0 support

Using XPath 2.0 expressions is now supported in:

  • XPL: for XPointer expressions, test expressions in a <p:when>, and select expressions in a <p:for-each>.
  • Page Flow: for when expressions in <action> and <result>.
  • XForms: binding expressions in the XForms view (ref and nodeset attribute), XPath expressions in model item properties (<xforms:bind>), and XPath expressions in XForms actions.

User-defined processor inputs

User-defined processor inputs, used by several processors including the XSLT processor and the Email processor, are now documented (XPL documentation, XSLT documentation). The URI schemes to access user-defined inputs and outputs are now input: and output:, to avoid confusion with the oxf: scheme used for the OPS resource manager sandbox.

eXist native XML database

OPS ships with the latest stable version of eXist (eXist-1.0b2-build-1107). This fixes the issue of connecting to an external eXist instance. Here is an example datasource.xml to connect to a standalone eXist:

<datasource xmlns:p="" xmlns:xforms="" xmlns:xhtml="" xmlns:xxforms="" xmlns:oxf="" xmlns:xsi="">
<!-- Specify the driver for the eXist database -->
<!-- Example of URL for a non-embedded use -->

Examples setup

All the examples using the SQL processor now work out of the box without configuring datasources at the application server or servlet container level. This includes the following examples:

  • Address Book
  • Employees
  • Data in multiple formats
  • XForms Upload
  • Email

Saxon upgraded to version 8.1.1

Saxon is the default XSLT engine and is used throughout OPS for XPath 2.0 expressions. Saxon 8.1.1 is now bundled with OPS. See the changes section of the Saxon documentation for more details.

Documentation printing

Printing the documentation has been improved through the use of CSS. As you print a given section of the documentation the left sidebar showing the chapters will not be printed.


SQL processor

  • The SQL processor now supports external datasource definitions using the optional datasource input. Those directly refer to connections without using JNDI names mapped by the container. This allows examples to work out of the box. This is an example of datasource definition:
  • OPS ships with a recent version of HSQLDB (version
  • The SQL processor now supports reading BINARY, VARBINARY and LONGVARBINARY columns in addition to BLOB.
  • The SQL processor's data input and output are now optional. This removes the need for "dummy" input content or Null serializers with the SQL processor.

URL generator

Relative urls

The URL generator now supports URLs relative to the location where the generator is used, instead of just absolute URLs.

XInclude dependencies

The URL generator also deals correctly with XInclude dependencies. For example, if a file called file1.xml includes a file called file2.xml, which in turn includes a file called file3.xml, and you modify file3.xml, then file1.xml is re-read automatically. Of course, this works with other dependency scenarios as well!

Java processor

The Java processor now works correctly in command line mode. It also supports relative source paths and supports specifying alternate compilers.

Email processor

The Email processor now supports Cc and Bcc recipients. See the Email example for an illustration.

Scope generator

The Scope generator is now able to marshall regular JavaBeans in addition to XML stored as Strings, W3C and dom4j documents. This functionality deprecates the Bean generator. These two processors previously had some overlap in functionality.

Error processor

The error processor now follows the same configuration mechanism as the main processor. The following property names have been deprecated:

  • oxf.servlet.error.processor.uri
  • oxf.servlet.error.input.*

The new names are as follows:

  • oxf.error-processor.input.*

Visit Packaging and Deployment for more information on configuring the error processor, as well as Error Pipeline for information about creating an error pipeline.

Command line interface

The command to invoke is now:

java -jar cli-orbeon.jar ...

instead of:

java -jar orbeon.jar ...