AMENDMENT: Scoped resolution of model attribute for binding eleme nts

As an amendment to my previous message, I would also like to suggest the
following editorial revisions should scoped resolution of model attributes
be adopted.


Section 2.4 Multiple Forms Per Document

The paragraph reading:

"In addition, form controls need to specify which model element contains the
instance data to which they bind. This is accomplished through a model
attribute alongside the ref attribute. The default for the model attribute
is the first model element in document order."

should read somewhat as follows

"In addition, form controls _may_ specify which model element contains the
instance data to which they bind. This is accomplished through a model
attribute alongside the ref (or nodeset) attribute. If no model attribute is
specified on the binding element, the nearest ancestor binding element's
model attribute is used. In the absence of a model attribute on any ancestor
binding element, the first Model in document order is used. This also
referred to as 'scoped resolution.'"


- Ryan Tomayko

Sterling Commerce


-----Original Message-----
From: Tomayko, Ryan 
Sent: Tuesday, August 27, 2002 6:16 AM
To: www-forms-editor@w3.org
Subject: Scoped resolution of model attribute for binding elements


The attached document contains a thread from www-forms@w3.org mailing list
that lead to this message.

The latest working draft has resulted in some ambiguity on how the model for
binding elements is selected when no model attribute is specified in
multi-model situations. Specifically, "7.3 Evaluation Context" leads the
reader to believe that the XPath context node can be used to determine the
current model while "3.2.3 Single-Node Binding Attributes" and "3.2.4
Node-Set Binding Attributes" require a model reference to be declared
explicitly if multiple models exist in the containing document.

This email proposes that the default model of a binding element be inherited
from ancestor elements where possible. Adoption of the method described
below provides authors of XForms document with an intuitive and elegant
design that is consistent with XML namespaces and XPath context nodes (i.e.
model selection uses scoped resolution). 


Proposed Model Selection Process:

The model for any binding element can be established by evaluating the
expression "ancestor-or-self::node()/@model". If the resultant nodeset
contains at least one node, the value of the first node in the nodeset is to
be used. If the resultant nodeset is zero in length, the first model in
document order is to be used.

In short, the model for any binding element can be determined by following
the sequence:

1. The binding element's model attribute is used.
2. The nearest ancestor binding element's model attribute is used. 3. The
first model in document order is used.


These rules should apply to all elements with either "Single-Node Binding
Attributes" or "Node-Set Binding Attributes". 


Suggested Editorial Revisions:

Section 3.2.3 and 3.2.4, the paragraph that reads:

"XForms Model selector. Optional when a containing document contains only
one XForms Model, otherwise required, except when the bind attribute is
present, in which case this attribute has no meaning."

should be changed to:

"XForms Model selector. Specifies the id of a Model to associate this
binding element with. If no model attribute is specified, the nearest
ancestor binding element's model attribute must be used. In the absence of a
model attribute on any ancestor binding element, the first Model in document
order must be used."

As a supplement to the argument above, the following examples may be used to
illustrate how scoped resolution improves the readability of XForms markup
in multi-model situations.

<xf:model id="form1">
	<xf:instance>
		...
	</xf:instance>
</xf:model>

<xf:model id="form2">
	<xf:instance>
		...
	</xf:instance>
</xf:model>

...

<xf:group model="form1">
	<!-- 
	all child binding elements inherit groups model
	removing redundant model attributes for each.
      -->
	<xf:input ref="doc/foo">
		<xf:caption>foo</xf:caption>
	</xf:input>
	<xf:input ref="doc/bar">
		<xf:caption>bar</xf:caption>
	</xf:input>
</xf:group>


<xf:repeat model="form2" nodeset="some/nodeset">
	<!-- 
	all child binding elements inherit repeat's model
	removing redundant model attributes for each.
      -->
	<xf:input ref="foo">
		<xf:caption>foo</xf:caption>
	</xf:input>
	<xf:input ref="bar">
		<xf:caption>bar</xf:caption>
	</xf:input>
</xf:repeat>

Previous drafts stated that if no model attribute was specified, the first
model in document order was to be used as default. This caused problems for
authors as they assumed models would propagate to child elements:

<xf:repeat model="form2" nodeset="some/nodeset">
	<!-- 
	child binding elements still reference form1 even though
	ancestor repeat uses form2. Non-intuitive.
	-->
	<xf:input ref="foo"/>
</xf:repeat>

The current draft states that the model must be specified on all binding
elements in multi-model documents. This seems like overkill. The model is
easily established by interrogating ancestor elements.

<xf:repeat model="form2" nodeset="some/nodeset">
	<!--
	must specify model on each child even though ancestor
	specifies.
	-->
	<xf:input model="form2" ref="foo"/>
</xf:repeat>

Thanks,

- Ryan Tomayko

Sterling Commerce

Received on Wednesday, 28 August 2002 11:02:50 UTC