XSLTools

docs/structure.html

211:a4006b6da1a0
2005-08-25 paulb [project @ 2005-08-25 14:43:34 by paulb] Changed the path encoding to UTF-8 - if this is not correct, ISO-8859-1 will be tried anyway.
     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">     2 <html xmlns="http://www.w3.org/1999/xhtml">     3 <head>     4   <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type" />     5   <title>Creating Applications: Add Structure</title>     6   <meta name="generator"     7  content="amaya 8.1a, see http://www.w3.org/Amaya/" />     8   <link href="styles.css" rel="stylesheet" type="text/css" />     9 </head>    10 <body>    11 <h1>Creating Applications: Add Structure</h1>    12 <p>Earlier, we defined the <a href="data.html">structure of the form    13 data</a>, and during the <a href="design.html">template design</a>    14 activity, it was    15 necessary to consider this structure information and how it should be    16 presented.    17 In XSLForms templates, we need to explicitly connect such information    18 about the structure of the data to the HTML elements representing it by    19 adding special attributes to the HTML code.</p>    20 <p> Consider the interesting parts of the template side by side with    21 the structure information:</p>    22 <pre style="">&lt;structure&gt;                                   <span    23  style="font-weight: bold;">&lt;body&gt;<br /><br /></span>  &lt;item                                         <span    24  style="font-weight: bold;">&lt;div&gt;</span><br />                                                  &lt;p&gt;<br />        value="some value"&gt;                         Some item: <span    25  style="font-weight: bold;">&lt;input name="value" type="text" value="some value" /&gt;</span><br />                                                    &lt;input name="remove" type="submit" value="Remove" /&gt;<br />                                                  &lt;/p&gt;<br />                                                  &lt;p&gt;<br />                                                    Itself containing more items:<br />                                                  &lt;/p&gt;<br />    &lt;subitem                                      <span    26  style="font-weight: bold;">&lt;p&gt;<br />            </span>&nbsp;subvalue="some other value"/&gt;          Sub-item: <span    27  style="font-weight: bold;">&lt;input name="subvalue" type="text" value="some other value" /&gt;</span><br />                                                    &lt;input name="remove2" type="submit" value="Remove" /&gt;<br />                                                  <span    28  style="font-weight: bold;">&lt;/p&gt;</span><br />                                                  &lt;p&gt;<br />                                                    &lt;input name="add2" type="submit" value="Add subitem" /&gt;<br />                                                  &lt;/p&gt;<br />  &lt;/item&gt;                                       <span    29  style="font-weight: bold;">&lt;/div&gt;</span><br />                                                &lt;p&gt;<br />                                                  &lt;input name="add" type="submit" value="Add item" /&gt;<br />                                                &lt;/p&gt;<br /><br />&lt;/structure&gt;                                  <span    30  style="font-weight: bold;">&lt;/body&gt;</span></pre>    31 <p>To make such connections, we will annotate the&nbsp;HTML code using    32 special attributes and values.</p>    33 <ul>    34 </ul>    35 <h2>Annotating the Template</h2>    36 <p>Taking the template extract from above, we add special annotations    37 to produce something like this:</p>    38 <pre style="">&lt;structure&gt;                                   &lt;body <span    39  style="font-weight: bold;">template:element="structure"</span>&gt;<br /><br />  &lt;item                                         &lt;div <span    40  style="font-weight: bold;">template:element="item"</span>&gt;<br />                                                  &lt;p&gt;<br />        value="some value"&gt;                         Some item: &lt;input <span    41  style="font-weight: bold;">template:attribute="value"</span> name="<span    42  style="font-weight: bold;">{template:this-attribute()}</span>" type="text" value="<span    43  style="font-weight: bold;">{$this-value}</span>" /&gt;<br />                                                    &lt;input name="remove" type="submit" value="Remove" /&gt;<br />                                                  &lt;/p&gt;<br />                                                  &lt;p&gt;<br />                                                    Itself containing more items:<br />                                                  &lt;/p&gt;<br />    &lt;subitem                                      &lt;p <span    44  style="font-weight: bold;">template:element="subitem"</span>&gt;<br />            &nbsp;subvalue="some other value"/&gt;          Sub-item: &lt;input <span    45  style="font-weight: bold;">template:attribute="subvalue"</span> name="<span    46  style="font-weight: bold;">{template:this-attribute()}</span>" type="text" value="<span    47  style="font-weight: bold;">{$this-value}</span>" /&gt;<br />                                                    &lt;input name="remove2" type="submit" value="Remove" /&gt;<br />                                                  &lt;/p&gt;<br />                                                  &lt;p&gt;<br />                                                    &lt;input name="add2" type="submit" value="Add subitem" /&gt;<br />                                                  &lt;/p&gt;<br />  &lt;/item&gt;                                       &lt;/div&gt;<br />                                                &lt;p&gt;<br />                                                  &lt;input name="add" type="submit" value="Add item" /&gt;<br />                                                &lt;/p&gt;<br /><br />&lt;/structure&gt;                                  &lt;/body&gt;</pre>    48 <p style="">    49 The following annotations have been added:</p>    50 <ul>    51   <li>For elements in the structure,&nbsp;<code>template:element</code>    52 attributes have been added to the corresponding HTML elements in the    53 template.</li>    54   <li>For attributes in the structure,&nbsp;<code>template:attribute</code>    55 attributes have been added to the corresponding&nbsp;HTML&nbsp;<code>elements    56 in the template.</code></li>    57 </ul>    58 <p>In addition, some of the attributes in the original HTML code have    59 been changed:</p>    60 <ul>    61   <li>The&nbsp;<code>input</code> elements'&nbsp;<code>name</code>    62 attributes have been redefined to use the special&nbsp;<code>{template:this-attribute()}</code>    63 value.</li>    64   <li>The&nbsp;<code>input</code> elements'&nbsp;<code>value</code>    65 attributes have been redefined to use the special&nbsp;<code>{$this-value}</code>    66 value.</li>    67 </ul>    68 <p>Whereas the first set of annotations reproduce the desired    69 structure, the latter modifications are really housekeeping measures to    70 make sure that the final output contains the correct names and values    71 for each of the form fields shown to the user.</p>    72 <h2>Completing the Template</h2>    73 <p>The template in full should now look something like this:</p>    74 <pre>&lt;?xml version="1.0"?&gt;<br />&lt;html xmlns="http://www.w3.org/1999/xhtml"<br />      <span    75  style="font-weight: bold;">xmlns:template="http://www.boddie.org.uk/ns/xmltools/template"</span>&gt;<br />&lt;head&gt;<br />  &lt;title&gt;Example&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body template:element="structure"&gt;<br />&lt;form action="" method="POST"&gt;<br /><br />&lt;!-- Template text between the start and the interesting part. --&gt;<br /><br />&lt;div template:element="item"&gt;<br />  &lt;p&gt;<br />    Some item: &lt;input template:attribute="value" name="{template:this-attribute()}" type="text" value="{$this-value}" /&gt;<br />    &lt;input name="remove" type="submit" value="Remove" /&gt;<br />  &lt;/p&gt;<br />  &lt;p&gt;<br />    Itself containing more items:<br />  &lt;/p&gt;<br />  &lt;p template:element="subitem"&gt;<br />    Sub-item: &lt;input template:attribute="subvalue" name="{template:this-attribute()}" type="text" value="{$this-value}" /&gt;<br />    &lt;input name="remove2" type="submit" value="Remove" /&gt;<br />  &lt;/p&gt;<br />  &lt;p&gt;<br />    &lt;input name="add2" type="submit" value="Add subitem" /&gt;<br />  &lt;/p&gt;<br />&lt;/div&gt;<br />&lt;p&gt;<br />  &lt;input name="add" type="submit" value="Add item" /&gt;<br />&lt;/p&gt;<br /><br />&lt;!-- Template text between the interesting part and the end. --&gt;<br /><br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</pre>    76 <p>Note also that a namespace declaration is required for the&nbsp;<code>template</code>    77 attributes, and it is usually best to put this declaration on the    78 top-level&nbsp;<code>html</code> element in the template, as shown in    79 the above example code.</p>    80 <p>Whilst the above annotations permit the template to display the data    81 in XML documents containing form data, the other aspects of the user    82 interface - the addition and removal of items and subitems - are not    83 yet fully modelled in the template. These things will be added to the    84 template as&nbsp;<a href="selectors.html">selectors</a> as part of the    85 next activity in the development <a href="overview.html">process</a>.</p>    86 </body>    87 </html>