XSLTools

Annotated docs/advice.html

178:7e7d9dbcec62
2005-07-22 paulb [project @ 2005-07-22 18:26:38 by paulb] Tidied up the function names and added some API documentation. Added child-element and child-attribute functions for coherent references to potentially non-existent nodes in the form data.
paulb@167 1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
paulb@167 2
<html xmlns="http://www.w3.org/1999/xhtml">
paulb@167 3
<head>
paulb@167 4
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type" />
paulb@167 5
  <title>Creating Applications: Recommendations and Advice</title>
paulb@167 6
  <meta name="generator"
paulb@167 7
 content="amaya 8.1a, see http://www.w3.org/Amaya/" />
paulb@167 8
  <link href="styles.css" rel="stylesheet" type="text/css" />
paulb@167 9
</head>
paulb@167 10
<body>
paulb@167 11
<h1>Creating Applications: Recommendations and Advice</h1>
paulb@167 12
<ol>
paulb@167 13
</ol>
paulb@167 14
<p>To avoid hard-to-explain problems when designing and testing
paulb@167 15
templates, the following advice may be of some use:</p>
paulb@167 16
<h2>Beware of Nesting Elements in Multiple-Choice Elements</h2>
paulb@167 17
<p>It is not necessarily a good idea to nest elements inside
paulb@167 18
multiple-choice elements like this:</p>
paulb@167 19
<pre>&lt;multi&gt;<br />  &lt;multi-enum value="1"/&gt;<br />  &lt;multi-enum value="1"/&gt;<br />  &lt;multi-enum value="1"/&gt;<br />  &lt;nested value="x"/&gt;<br />&lt;/multi&gt;</pre>
paulb@167 20
<p>The reason for this is that the number of multiple-choice values may
paulb@167 21
vary within your application, and&nbsp;the nested elements will appear
paulb@167 22
at a different position depending on how many such values have been
paulb@167 23
inserted. Whilst this might not affect some applications, at least not
paulb@167 24
to begin with, the usage of more advanced features (<a
paulb@177 25
 href="in-page-updates.html">in-page updates</a>, for example) will
paulb@177 26
probably expose
paulb@167 27
problems due to the way XSLForms reconstructs the XML document data
paulb@167 28
from the input form data.</p>
paulb@177 29
<h2>Beware of Adding Elements into Mixtures of Elements</h2>
paulb@177 30
<p>Although we ignore this rule with the example in this documentation,
paulb@177 31
it is necessary to be aware of problems with adding and removing
paulb@177 32
elements where other elements may reside. Consider part of our form
paulb@177 33
data structure:</p>
paulb@177 34
<pre>&lt;item value="a"&gt;<br />  &lt;type&gt;<br />    &lt;type-enum value="1"/&gt;<br />  &lt;/type&gt;<br />  &lt;subitem value="x"/&gt;<br />&lt;/item&gt;</pre>
paulb@177 35
<p>Provided that we control the process of adding and removing the
paulb@177 36
elements, making sure that they always reside at the end of the element
paulb@177 37
collection inside the&nbsp;<code>item</code> element, and that they
paulb@177 38
always follow a known number of elements, we can avoid issues with more
paulb@177 39
advanced features (<a href="in-page-updates.html">in-page updates</a>,
paulb@177 40
for example), although using such features on the&nbsp;<code>subitem</code>
paulb@177 41
elements themselves may cause problems that may only be resolved by
paulb@177 42
moving the&nbsp;<code>subitem</code> elements into a container element
paulb@177 43
of their own:</p>
paulb@177 44
<pre>&lt;item value="a"&gt;<br />  &lt;type&gt;<br />    &lt;type-enum value="1"/&gt;<br />  &lt;/type&gt;<br />  &lt;subitems&gt;<br />    &lt;subitem value="x"/&gt;<br />  &lt;/subitems&gt;<br />&lt;/item&gt;</pre>
paulb@167 45
<h2>Make Sure the Output Structure Agrees with the Template</h2>
paulb@167 46
<ol>
paulb@167 47
</ol>
paulb@167 48
<p>Since XSLForms templates essentially describe the presentation of an
paulb@167 49
XML document, it is vital that the output form data structure agrees
paulb@167 50
with the template - that is, the output structure can be properly
paulb@167 51
processed by the template and that all parts of the template are
paulb@167 52
displayed as expected. It is also very important to make sure that
paulb@167 53
transformations on the input document produce all
paulb@167 54
the necessary elements for the output document so that the resulting
paulb@167 55
page gives the user the opportunity to specify data that is missing.
paulb@167 56
Consider this section of an example template:</p>
paulb@167 57
<pre>&lt;p template:element="package"&gt;<br />  &lt;p template:element="author"&gt;<br />    Name: &lt;input template:attribute="name" name="{template:this-attribute()}" type="text" value="{$this-value}"/&gt;<br />  &lt;/p&gt;<br />&lt;/p&gt;</pre>
paulb@167 58
<p>Here, if the&nbsp;<code>author</code> element is not found in the
paulb@167 59
output structure, no field will be produced in the Web page, no
paulb@167 60
opportunity will be given for an author to be specified, and no author
paulb@167 61
information will subsequently be editable. One solution is to introduce
paulb@167 62
the&nbsp;<code>author</code> element into the XML document when
paulb@167 63
creating the&nbsp;<code>package</code> element - this should then
paulb@167 64
"bootstrap" the process and ensure that the author details will remain
paulb@167 65
editable as long as the&nbsp;<code>package</code> element exists.</p>
paulb@167 66
<ol>
paulb@167 67
</ol>
paulb@167 68
</body>
paulb@167 69
</html>