> For the complete documentation index, see [llms.txt](https://doc.orbeon.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.orbeon.com/xforms/xpath/type-annotations.md).

# Type annotations

## Basics

Orbeon Forms supports exposing MIP type annotations to XPath 2.0.

This means that if you have a type associated with a node, e.g.:

```markup
<xf:bind ref="age" type="xs:integer">
```

then the type is not only used for validation, but also determines the typed value of the element node age.

This means that earlier, you had to write the following:

```markup
<xf:bind
  ref="age"
  type="xs:integer"
  constraint="xs:integer(.) le 150"/>
```

With exposing type annotations, you can simply write:

```markup
<xf:bind
  ref="age"
  type="xs:integer"
  constraint=". le 150"/>
```

or:

```markup
<xf:bind
  ref="date"
  type="xs:date"
  constraint=". le (current-date() + xdt:dayTimeDuration('P2D'))"/>
```

## Enabling type annotations

*NOTE: Type annotations are not automatically enabled for backward compatibility reasons. However, they are enabled by default for new forms created with Form Builder.*

The following property controls whether instance types annotations are exposed to XPath 2.0 expressions:

```markup
<property
    as="xs:boolean"
    name="oxf.xforms.expose-xpath-types"
    value="true"/>
```

* If set to `false` (the default), instance types are not made available to XPath expressions.
* If set to `true`, they are made available.

You can as usual enable this on a per-page basis:

```markup
<xf:model xxf:expose-xpath-types="true">
```

\[SINCE Orbeon Forms 4.2]

You can also enable this on a per-instance basis:

```markup
<xf:instance xxf:expose-xpath-types="true">
```

## Where does this work?

Static type annotations (with `xf:bind/@type` and `xsi:type`) can be used by all XPath expressions, including `xf:bind/@calculate`.

NOTE: Here is the order in which the XForms engine processes type annotations in the model:

* during a model *rebuild*, all `xf:bind` point to their associated instance nodes if any
* static type annotations with `xf:bind/@type` and `xsi:type` are available just after a rebuild
* this means that type annotations can be used during subsequent model *recalculate \_and \_revalidate*
* however, annotations done via a schema are *not* reliably available during *recalculate*


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://doc.orbeon.com/xforms/xpath/type-annotations.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
