- From: Steven Pemberton <steven.pemberton@cwi.nl>
- Date: Fri, 16 Dec 2016 11:08:47 +0100
- To: public-xformsusers@w3.org
So after two rewrites, I have a version that I am reasonably happy with.
Please check this wording for errors or missing text. There is also one
question about a sentence that I don't think is necessary.
Original text here:
https://www.w3.org/community/xformsusers/wiki/XForms_2.0#Expressions
Steven
Expressions
Expressions appear in attributes throughout XForms. They can be split into
two types: bindings, that identify locations whose content may or may not
be changed by the attached element; and value expressions, that supply
values for use by the attached element.
They can further be classified depending on when they are evaluated:
* on bind elements (where bindings are called model item bindings);
evaluated during initialization and recalculate;
* on controls (where bindings are called UI bindings); evaluated during
initialization and refresh;
* on Actions and the submission element, evaluated on activation by an
event;
* in Attribute Value Templates (AVTs), evaluated whenever the containing
element is processed.
Note: To allow for forward compatibility, this specification is written to
permit the use of different expression languages. However only one is used
in XForms 2.0, XPath 2.0 as defined in XForms 2.0: XPath Expressions
Module.
Evaluation context
All expressions are evaluated in an evaluation context, which consists of
a context item, a size, and a position. In general, the context item is
some element of a sequence, the size is the size of that sequence, and the
position is the position of the context item within the sequence.
An element inherits an evaluation context from its ancestor elements. If
the element has a model attribute, and the inherited context item is not
from that model, then the default context from the referenced model is
used instead. If the element has a context attribute, it is evaluated in
the resulting context. The final context is called the in-scope evaluation
context.
If an element has a ref attribute, it is evaluated in the in-scope
context. If the element has a bind attribute, the bind element referenced
has its own context. The result of the ref or bind evaluation gives the
element evaluation context. If the ref or bind binding is declared as a
Single Item Binding, the size of the context is set to 1; otherwise it is
a Sequence Binding, and has a size of the size of the evaluated sequence
and an occurrence of the original binding element is also generated for
each of the items in the sequence, with a dynamic evaluation context that
has a context item of the item of the sequence for which the occurrence
was generated, a size of the size of the sequence, and a position of the
position of the generated item in the sequence.
Unless otherwise stated, all expressions in attributes on an element are
evaluated in the element evaluation context.
The element evaluation context is then inherited by any contained elements.
For top-level elements, that have no ancestors, the inherited evaluation
context is the default context item of the element's default model, with a
size and position of one.
The default model for an element is its containing model, if any, and
otherwise the textually first model in the document.
The default context item of a model is the top-level document element node
of the textually first instance of the model.
If a binding evaluates to an empty sequence, any contained bindings are
not evaluated. [DO WE NEED THIS? What would stop working if we left this
line out? Original wording: The binding of a non-outermost binding element
is not evaluated if the in-scope evaluation context does not contain a
context item. This can occur if the binding of the nearest ancestor bound
element produces the empty sequence.]
At the time of evaluation, an expression must be syntactically correct,
the namespaces it uses must be in scope, and the functions and variables
it uses must be defined; otherwise one of the events xforms-binding-error,
for a bind element, xforms-action-error for an Action, and
xforms-expression-error otherwise, is dispatched.
Note: the context() function returns the context item of an element's
in-scope evaluation context, while the position() and last() functions
return the context position and size respectively of the element context.
So
<instance>
<data xmlns="">
<a><b>1</b</a>
<b>2</b>
</data>
</instance>
...
<output ref="a" value="b"/>
<output ref="a" value="context()/b"/>
would output 1 2.
Received on Friday, 16 December 2016 10:09:27 UTC