- From: Steven Pemberton <steven.pemberton@cwi.nl>
- Date: Fri, 16 Jun 2023 13:37:06 +0000
- To: XForms Users Community Group <public-xformsusers@w3.org>, XForms Users Community Group Issue Tracker <sysbot+tracker@w3.org>
Working towards this specification, I came across some discussion
questions.
Data communication, which happens via the mutual @ref on the <control/> and
<interface/>
Parent:
<control id="child" resource="child.xhtml" ref="instance('data')/common"/>
Child:
<interface id="parent" ref="instance('values')/shared"/>
During processing the two (sub-)instances are shared. A change in one
appears as an equivalent change in the other, in either direction.
How do we define whether the parent or child initialises the sub-instance?
My feeling is that the child should be in control: it specifies what it
expects; so on the interface element there should be some indication
whether it is initialised from outside or not. We can make one the default,
so you only have to specify the other. I feel that no initialisation from
outside should be the default (since that is the default when there is no
<interface/> element anyway).
How should initialisation work? I suspect something like for targetref in
submission.
https://www.w3.org/community/xformsusers/wiki/XForms_2.0#Replacing_Data_with_the_Submission_Response
The incoming data overwrites the part of the instance marked in the
<interface/> element, if initialised from outside, and the child
sub-instance replaces the parent sub-instance otherwise.
Do we have to say about anything about the shape of the two sub-instances
then? There's not much for targetref under submission. Require it to be an
element?
===================================
Some Examples. I haven't yet come to a conclusion about how to signal how
the child instance should be initialised, so used init="parent" as a
placeholder.
Embedding a form that just outputs the date:
Parent: <control resource="date.xhtml" label="Today's date and time"/>
Child (has no <interface/> element: <output value="now()"/>
===================================
Selecting a game to play:
<select1 ref="game" label="select a game to play">
<item label="minesweeper">minesweeper.xml</item>
<item label="slider">slider.xml</item>
<item label="noughts and crosses">xox.xml</item>
</select1>
<control resource="{game}"/>
Children have no interface element
===================================
Histograms
Parent:
<instance>
<data xmlns="">
<before>
<y>9</y><y>15</y><y>11</y><y>6</y><y>5</y><y>10</y><y>8</y>
</before>
<after>
<y>8</y><y>3</y><y>12</y><y>14</y><y>9</y><y>16</y><y>14</y>
</after>
</data>
</instance>
...
<control resource="histogram.xhtml" ref="before" label="Then"/>
<control resource="histogram.xhtml" ref="after" label="Now"/>
Child:
<interface ref="data" init="parent"/>
Presumably what is referenced as before/y in the parent is referencd as
data/y in the child
===================================
A child not being initialised
Parent:
<instance>
<data xmlns="">
<testfile>test.xml</testfile>
</data>
</instance>
<instance id="results"/>
...
<control ref="instance('results')" resource="{testfile}"/>
Child:
<instance>
<data xmlns="">
<values>...</values>
<results>
<percent/>
<success/>
<failure/>
</results>
</data>
</instance>
<interface ref="data"/>
===================================
A child being initialised
Parent:
<instance id="data">
<data xmlns="">
<values>
<a>1</a>
<b>2</b>
<c>3</c>
</value>
<sum/>
</data>
</instance>
...
<control ref="instance('data')" resource="add.xhtml"/>
<output ref="instance('data')/sum"/>
In add.xhtml:
<instance>
<input xmlns=""/>
</instance>
<interface ref="/input" init="parent"/>
<bind ref="sum" calculate="sum(values/*)"/>
===================================
A child that displays a map to set a location
Parent:
<instance>
<locations xmlns="">
<home x="" y=""/>
<dest x="" y=""/>
</locations>
</instance> ...
<control ref="home" resource="map.xf" label="Please locate your home
location"/>
<control ref="dest" resource="map.xf" label="Please locate your
destination"/>
Child:
<instance id="result">
<result xmlns=""/>
</instance>
<interface ref="instance('result')"/>
===================================
Testsuite
<instance>
<testsuite xmlns="">
<testcase>
<filename>boolean-from-string.xml</filename>
<tests>
<test res="" req="true">1</test>
<test res="" req="false">0</test>
<result/>
</tests>
</testcase>
<testcase>
...
</testcase>
</testsuite>
</instance>
<repeat ref="testcase">
<control resource="{filename}" ref="tests"/>
</repeat>
Child:
<model>
<instance>
<tests xmlns=""/>
</instance>
<interface ref="tests" init="parent"/>
</model>
===================================
Steven
Received on Friday, 16 June 2023 13:37:15 UTC