tao-test/app/tao/doc/QTI/qti_model.html

7509 lines
315 KiB
HTML
Raw Blame History

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>IMS Question and Test Interoperability Information Model v2.0</title>
<link rel="alternate" media="print" href="http://www.imsglobal.org/printer.cfm">
<link rel="stylesheet" href="imsqti_infov2p0_files/stylesheet.css" type="text/css">
</head><body>
<table summary="layout table" width="100%" border="0" cellspacing="0">
<tbody>
<tr>
<td valign="middle" width="19%"><img src="imsqti_infov2p0_files/speclogo.jpg" alt="IMS Logo" height="173" width="117"></td>
<td valign="middle" width="81%">
<h1>IMS Question and Test Interoperability Information Model</h1>
<h2>Version 2.0 Final Specification</h2>
<h2>
</h2>
</td>
</tr>
</tbody>
</table>
<p>Copyright <20> 2005 IMS Global Learning Consortium, Inc. All Rights Reserved.<br>
The IMS Logo is a registered trademark of IMS/GLC.<br>
Document Name: IMS Question and Test Interoperability Information Model<br>
Revision: 24 January 2005<br>
</p>
<hr>
<p></p>
<p></p>
<table summary="This table describes" border="0" cellpadding="5" cellspacing="0">
<tbody>
<tr>
<td>Date Issued:<br>
</td>
<td>24 January 2005<br>
</td>
</tr>
<tr>
<td>Latest version:<br>
</td>
<td><a href="http://www.imsglobal.org/question/qti_v2p0/imsqti_infov2p0.html">
http://www.imsglobal.org/question/qti_v2p0/imsqti_infov2p0.html</a><br>
</td>
</tr>
<tr>
<td>Register comments or implementations:<br>
</td>
<td><a href="http://www.imsglobal.org/developers/ims/imsforum/categories.cfm?catid=23">http://www.imsglobal.org/developers/ims/imsforum/categories.cfm?catid=23</a><br>
</td>
</tr>
<tr>
<td colspan="2" rowspan="1">
<p><b>IPR and Distribution Notices</b></p>
<p>Recipients of this document are requested to submit,
with
their comments, notification of any relevant patent claims or other
intellectual property rights of which they may be aware that might be
infringed by any implementation
of the specification set forth in this document, and to provide
supporting documentation.</p>
<p>IMS takes no position regarding the validity or scope of
any
intellectual property or other rights that might be claimed to pertain
to the implementation or use of the technology described in this
document or the extent to which any license under such rights might or
might not be available; neither does it represent that it has made any
effort to identify any such rights. Information on IMS's procedures
with respect to rights in IMS specifications can be found at the IMS
Intellectual Property Rights web page: <a href="http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf">http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf</a>.</p>
<p>Copyright <20> IMS Global Learning Consortium
2006. All
Rights Reserved.</p>
<p>If you wish to distribute this document or use this
document
to implement a product or service, you must complete a valid license
registration with IMS and receive an email from IMS granting the
license. To register, follow the instructions on the IMS website: <a href="http://www.imsglobal.org/specificationdownload.cfm">http://www.imsglobal.org/specificationdownload.cfm</a>.</p>
<p>This document may be copied and furnished to others by
Licensee organizations registered on the IMS website provided that the
above copyright notice and this paragraph are included on all such
copies. However, this document itself may not be modified in any way,
such as by removing the copyright notice or references to IMS, except
as needed for the purpose of developing IMS specifications, under the
auspices of a chartered IMS work group.</p>
<p>Use of this specification to develop products or
services is
governed by the license with IMS found on the IMS website:&nbsp;<a href="http://www.imsglobal.org/question/qti_v2p0/qtiv2p0speclicense.html">http://www.imsglobal.org/question/qti_v2p0/qtiv2p0speclicense.html</a>.</p>
<p>The limited permissions granted above are perpetual and
will
not be revoked by IMS or its successors or assigns.</p>
<p>THIS SPECIFICATION IS BEING OFFERED WITHOUT ANY WARRANTY
WHATSOEVER, AND IN PARTICULAR, ANY WARRANTY OF NONINFRINGEMENT IS
EXPRESSLY DISCLAIMED. ANY USE OF THIS SPECIFICATION SHALL BE MADE
ENTIRELY AT THE IMPLEMENTER'S OWN RISK, AND NEITHER THE CONSORTIUM, NOR
ANY OF ITS MEMBERS OR SUBMITTERS, SHALL HAVE ANY LIABILITY WHATSOEVER
TO ANY IMPLEMENTER OR THIRD PARTY FOR ANY DAMAGES OF ANY NATURE
WHATSOEVER, DIRECTLY OR INDIRECTLY, ARISING FROM THE USE OF THIS
SPECIFICATION.</p>
<p></p>
</td>
</tr>
</tbody>
</table>
<h2><a name="section10000">Table of Contents</a></h2>
<dl>
<dt><a name="section10000">1. </a><a href="#section10001">Introduction</a></dt>
<dt>2. <a href="#section10002">References</a></dt>
<dt>3. <a href="#section10003">Definitions</a></dt>
<dt>4. <a href="#section10042">Items</a></dt>
<dt>5. <a href="#section10043">Item Variables</a></dt>
<dd>
<dl>
<dt>5.1. <a href="#section10044">Response Variables</a></dt>
<dt>5.2. <a href="#section10045">Outcome Variables</a></dt>
</dl>
</dd>
<dt>6. <a href="#section10046">Content Model</a></dt>
<dd>
<dl>
<dt>6.1. <a href="#section10047">Basic Classes</a></dt>
<dt>6.2. <a href="#section10048">XHTML Elements</a></dt>
<dd>
<dl>
<dt>6.2.1. <a href="#section10049">Text Elements</a></dt>
<dt>6.2.2. <a href="#section10050">List Elements</a></dt>
<dt>6.2.3. <a href="#section10051">Object Elements</a></dt>
<dt>6.2.4. <a href="#section10052">Presentation Elements</a></dt>
<dt>6.2.5. <a href="#section10053">Table Elements</a></dt>
<dt>6.2.6. <a href="#section10054">Image Element</a></dt>
<dt>6.2.7. <a href="#section10055">Hypertext Element</a></dt>
</dl>
</dd>
<dt>6.3. <a href="#section10056">MathML</a></dt>
<dd>
<dl>
<dt>6.3.1. <a href="#section10057">Combining Template Variables and MathML</a></dt>
</dl>
</dd>
<dt>6.4. <a href="#section10058">Variable Content</a></dt>
<dd>
<dl>
<dt>6.4.1. <a href="#section10059">Number Formatting Rules</a></dt>
</dl>
</dd>
<dt>6.5. <a href="#section10060">Formatting Items with Stylesheets</a></dt>
</dl>
</dd>
<dt>7. <a href="#section10061">Interactions</a></dt>
<dd>
<dl>
<dt>7.1. <a href="#section10062">Simple Interactions</a></dt>
<dt>7.2. <a href="#section10063">Text-based Interactions</a></dt>
<dt>7.3. <a href="#section10064">Graphical Interactions</a></dt>
<dt>7.4. <a href="#section10065">Miscellaneous Interactions</a></dt>
<dt>7.5. <a href="#section10066">Alternative Ways to End an Attempt</a></dt>
</dl>
</dd>
<dt>8. <a href="#section10067">Response Processing</a></dt>
<dd>
<dl>
<dt>8.1. <a href="#section10068">Response Processing Templates</a></dt>
<dd>
<dl>
<dt>8.1.1. <a href="#section10069">Standard Templates</a></dt>
</dl>
</dd>
<dt>8.2. <a href="#section10070">Generalized Response Processing</a></dt>
</dl>
</dd>
<dt>9. <a href="#section10071">Modal Feedback</a></dt>
<dt>10. <a href="#section10072">Expressions</a></dt>
<dd>
<dl>
<dt>10.1. <a href="#section10073">Operators</a></dt>
</dl>
</dd>
<dt>11. <a href="#section10074">Item Templates</a></dt>
<dd>
<dl>
<dt>11.1. <a href="#section10075">Using Template Variables in an the Item's Body</a></dt>
<dt>11.2. <a href="#section10076">Template Processing</a></dt>
</dl>
</dd>
<dt>12. <a href="#section10077">Basic Data Types</a></dt>
</dl>
<h2><a name="section10001">1. Introduction</a></h2>
<h2><a name="section10002">2. References</a></h2>
<dl>
<dt><a name="ref_CMI">CMI
</a></dt>
<dd><a name="ref_CMI">IEEE 1484.11.1, Standard for Learning Technology - Data Model for Content Object Communication
</a></dd>
<dt><a name="ref_ISO11404">ISO11404
</a></dt>
<dd><a name="ref_ISO11404">ISO11404:1996 Information technology
&#8212; Programming languages, their environments and system software
interfaces &#8212; Language-independent datatypes
</a></dd>
<dd><a name="ref_ISO11404">Published: 1996
</a></dd>
<dt><a name="ref_ISO8601">ISO8601
</a></dt>
<dd><a name="ref_ISO8601">ISO8601:2000 Data elements and interchange formats &#8211; Information interchange &#8211; Representation of dates and times
</a></dd>
<dd><a name="ref_ISO8601">Published: 2000
</a></dd>
<dt><a name="ref_ISO_9899">ISO_9899
</a></dt>
<dd><a name="ref_ISO_9899">ISO/IEC 9899:1999 Programming Languages - C
</a></dd>
<dt><a name="ref_MathML">MathML
</a></dt>
<dd><a name="ref_MathML">Mathematical Markup Language (MathML), Version Version 2.0 (Second Edition)
</a></dd>
<dd><a href="http://www.w3.org/TR/2003/REC-MathML2-20031021/">http://www.w3.org/TR/2003/REC-MathML2-20031021/</a></dd>
<dd>Published: 2003-10-21</dd>
<dt><a name="ref_RFC2045">RFC2045
</a></dt>
<dd><a name="ref_RFC2045">RFC 2045-2048 Multipurpose Internet Mail Extensions (MIME)
</a></dd>
<dt><a name="ref_RR">RR
</a></dt>
<dd><a name="ref_RR">IMS Question &amp; Test Interoperability: Results Reporting Specification, Version 1.2
</a></dd>
<dd><a name="ref_RR">Published: 2002-02
</a></dd>
<dt><a name="ref_URI">URI
</a></dt>
<dd><a name="ref_URI">RFC 2396 Uniform Resource Identifiers (URI): Generic Syntax
</a></dd>
<dd><a name="ref_URI">Published: 1998-08
</a></dd>
<dt><a name="ref_XHTML">XHTML
</a></dt>
<dd><a name="ref_XHTML">XHTML 1.1: The Extensible HyperText Markup Language
</a></dd>
<dt><a name="ref_XHTML_MOD">XHTML_MOD
</a></dt>
<dd><a name="ref_XHTML_MOD">XHTML Modularization
</a></dd>
<dd><a href="http://www.w3.org/MarkUp/modularization">http://www.w3.org/MarkUp/modularization</a></dd>
<dt><a name="ref_XML">XML
</a></dt>
<dd><a name="ref_XML">Extensible Markup Language (XML), Version 1.0 (second edition)
</a></dd>
<dd><a name="ref_XML">Published: 2000-10
</a></dd>
<dt><a name="ref_XML_SCHEMA2">XML_SCHEMA2
</a></dt>
<dd><a name="ref_XML_SCHEMA2">XML Schema Part 2: Datatypes
</a></dd>
<dd><a href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/">http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/</a></dd>
</dl>
<h2><a name="section10003">3. Definitions</a></h2>
<p><a name="term10004"><b>Adaptive Item</b></a></p>
<p><a name="term10004">An adaptive item is an </a><a href="#term10021">Item</a> that adapts either its appearance, its scoring (<a href="#term10033">Response Processing</a>) or both in response to each of the candidate's
<a href="#term10008">Attempt</a>s. For example, an adaptive item may start by
prompting the candidate with a box for free-text entry but, on receiving an
unsatisfactory answer, present a simple choice <a href="#term10019">Interaction</a>
instead and award fewer marks for subsequently identifying the correct response.
Adaptivity allows authors to create items for use in formative situations which both
help to guide candidates through a given task while also providing an <a href="#term10031">Outcome</a> that takes into consideration their path, enabling better
subsequent content sequencing decisions to be made.</p>
<p><a name="term10005"><b>Adaptive Test</b></a></p>
<p><a name="term10005">Adaptive Tests are out of scope for this specification.</a></p>
<p><a name="term10006"><b>Assessment</b></a></p>
<p><a name="term10006">An Assessment is equivalent to a '</a><a href="#term10039">Test</a>'. It contains the collection of <a href="#term10021">Item</a>s that are used
to determine the level of mastery, or otherwise, that a participant has on a
particular subject. The Assessment contains all of the necessary instructions to
enable variable sequencing of the Items and the corresponding aggregated scoring to
produce the final test score. Assessments are out of scope for this document.</p>
<p><a name="term10007"><b>Assessment Delivery System</b></a></p>
<p><a name="term10007">A system for the administration and
delivery of assessments to candidates. See also </a><a href="#term10017">Delivery Engine</a>.</p>
<p><a name="term10008"><b>Attempt</b></a></p>
<p><a name="term10008">An attempt (at an </a><a href="#term10021">Item</a>) is the
process by which the <a href="#term10012">Candidate</a> interacts with an item in one or
more <a href="#term10013">Candidate Session</a>s, possibly assigning values to or updating
the associated <a href="#term10034">Response Variable</a>s.</p>
<p><a name="term10009"><b>Authoring System</b></a></p>
<p><a name="term10009">A system used by </a><a href="http://www.imsglobal.org/question/qti_v2p0/imsqti_oviewv2p0.html#element10004">author</a>s for creating and editing <a href="#term10021">Item</a>s.</p>
<p><a name="term10010"><b>Base-type</b></a></p>
<p><a name="term10010">A base-type is a predefined data type that
defines a value set from which values for </a><a href="#term10025">Item Variable</a>s are
drawn. These values are indivisible with respect to the <em>runtime model</em>
described by this specification.</p>
<p><a name="term10011"><b>Basic Item</b></a></p>
<p><a name="term10011">A basic item is an </a><a href="#term10021">Item</a>
that contains one and only one <a href="#term10019">Interaction</a>.</p>
<p><a name="term10012"><b>Candidate</b></a></p>
<p><a name="term10012">A person that participates in a test,
assessment or exam by answering questions. See also the actor </a><a href="http://www.imsglobal.org/question/qti_v2p0/imsqti_oviewv2p0.html#element10009">candidate</a>.</p>
<p><a name="term10013"><b>Candidate Session</b></a></p>
<p><a name="term10013">A period of time during which
the candidate is interacting with the </a><a href="#term10021">Item</a> as part of an
<a href="#term10008">Attempt</a>. An attempt may consist of more than one candidate
session. For example, candidates that are not sure of the answer to one question may
navigate to a second question in the same test and return to the first one later.
When they leave the first question they terminate the candidate session but they
<em>do not</em> terminate the <a href="#term10008">Attempt</a>. The attempt is simply
suspended until a subsequent candidate session concludes it, triggering <a href="#term10033">Response Processing</a> and (possibly) <a href="#term10018">Feedback</a>. </p>
<p><a name="term10014"><b>Cloning Engine</b></a></p>
<p><a name="term10014">A cloning engine is a system for
creating multiple similar items (</a><a href="#term10022">Item Clone</a>s) from an <a href="#term10024">Item Template</a>.</p>
<p><a name="term10015"><b>Composite Item</b></a></p>
<p><a name="term10015">A composite item is an </a><a href="#term10021">Item</a> that contains more than one <a href="#term10019">Interaction</a>.</p>
<p><a name="term10016"><b>Container</b></a></p>
<p>
<a name="term10016"> <span>A container is an aggregate data type that can contain multiple
values of the primitive </span></a><a href="#term10010">Base-type</a>s. Containers may be empty.
</p>
<p><a name="term10017"><b>Delivery Engine</b></a></p>
<p><a name="term10017">The process that coordinates the
rendering and delivery of the </a><a href="#term10021">Item</a>(s) and the evaluation of the
responses to produce scores and <a href="#term10018">Feedback</a>.</p>
<p><a name="term10018"><b>Feedback</b></a></p>
<p><a name="term10018">Any material presented to the candidate
conditionally based on the value of an </a><a href="#term10032">Outcome Variable</a>. See also
<a href="#term10020">Integrated Feedback</a> and <a href="#term10027">Modal Feedback</a>
</p>
<p><a name="term10019"><b>Interaction</b></a></p>
<p><a name="term10019">Interactions allow the candidate to
interact with the item. Through an interaction, the candidate selects or constructs
a response. See also the class </a><a href="#element10247">interaction</a>.</p>
<p><a name="term10020"><b>Integrated Feedback</b></a></p>
<p><a name="term10020">Integrated feedback is the
name given to </a><a href="#term10018">Feedback</a> that is integrated into the item's
<a href="#element10096">itemBody</a>. Unlike <a href="#term10027">Modal Feedback</a> the
candidate is free to update their responses while viewing integrated feedback.</p>
<p><a name="term10021"><b>Item</b></a></p>
<p><a name="term10021">The smallest exchangeable assessment object within this
specification. An item is more than a 'Question' in that it contains the question
and instructions to be presented, the </a><a href="#element10355">responseProcessing</a> to be
applied to the candidates response(s) and the <a href="#term10018">Feedback</a> that may
be presented (including hints and solutions). <span>In this
specification items are represented by the <a href="#element10010">assessmentItem</a>
class and the term <em>assessment item</em> is used interchangeably for <em>item</em>.</span>
</p>
<p><a name="term10022"><b>Item Clone</b></a></p>
<p><a name="term10022">Item Clones are items created by an </a><a href="#term10024">Item Template</a>.</p>
<p><a name="term10023"><b>Item Session</b></a></p>
<p><a name="term10023">An item session is the accumulation of all
the </a><a href="#term10008">Attempt</a>s made by a candidate. </p>
<p><a name="term10024"><b>Item Template</b></a></p>
<p><a name="term10024">Item templates are templates that can be
used for producing large numbers of similar </a><a href="#term10021">Item</a>s. Such items are
often called cloned items. Item templates can be used to produce items by a special
purpose <a href="#term10014">Cloning Engine</a> or, where <a href="#term10017">Delivery Engine</a>s support them, be used directly to produce a dynamically
chosen clone at the start of an <a href="#term10023">Item Session</a>. Each item cloned
from an item template is identical except for the values given to a set of <a href="#term10038">Template Variable</a>s. An item is therefore an item template if it declares one
or more template variables and a contains set of <a href="#term10037">Template Processing</a> rules for assigning them values.</p>
<p><a name="term10025"><b>Item Variable</b></a></p>
<p><a name="term10025">A variable that records part of the
state of an </a><a href="#term10023">Item Session</a>. The candidate's responses and any
outcomes assigned by <a href="#term10033">Response Processing</a> are stored in item
variables. Item variables are also used to define <a href="#term10024">Item Template</a>s.
See also the class <a href="#element10039">itemVariable</a>.</p>
<p><a name="term10026"><b>Material</b></a></p>
<p><a name="term10026">Material means all static text, image or media
objects that are intended for the user rather than being interpreted by a processing
system. </a><a href="#term10019">Interaction</a>s are not material.</p>
<p><a name="term10027"><b>Modal Feedback</b></a></p>
<p><a name="term10027">Modal feedback is the name give to
</a><a href="#term10018">Feedback</a> that is presented to the candidate on its own, as
opposed to being integrated into the item's <a href="#element10096">itemBody</a>.</p>
<p><a name="term10028"><b>Multiple Response</b></a></p>
<p><a name="term10028">A multiple response is a
</a><a href="#term10034">Response Variable</a> that is a <a href="#term10016">Container</a> for
multiple values all drawn from the value set defined by one of the <a href="#term10010">Base-type</a>s. A multiple response is processed as an unordered list of these
values. The list may be empty.</p>
<p><a name="term10029"><b>Non-adaptive Item</b></a></p>
<p><a name="term10029">An non-adaptive item is an
</a><a href="#term10021">Item</a> that does not adapt itself in response to the
candidate's <a href="#term10008">Attempt</a>s.</p>
<p><a name="term10030"><b>Ordered Response</b></a></p>
<p><a name="term10030">An ordered response is a </a><a href="#term10034">Response Variable</a> that is a <a href="#term10016">Container</a> for multiple values
all drawn from the value set defined by one of the <a href="#term10010">Base-type</a>s. An
ordered response is processed as an ordered list (sequence) of values. The list may
be empty.</p>
<p><a name="term10031"><b>Outcome</b></a></p>
<p><a name="term10031">The result of an assessment. For an </a><a href="#term10021">Item</a>, an outcome is represented by one or more <a href="#term10032">Outcome Variable</a>s.</p>
<p><a name="term10032"><b>Outcome Variable</b></a></p>
<p><a name="term10032">Outcome variables are declared by
outcome declarations. Their value is set either from a default given in the
declaration itself or by a response rule encountered during </a><a href="#term10033">Response Processing</a>. See also the class <a href="#element10095">outcomeVariable</a>. </p>
<p><a name="term10033"><b>Response Processing</b></a></p>
<p><a name="term10033">The process by which the
values of </a><a href="#term10034">Response Variable</a>s are judged (scored) and the values of
<a href="#term10032">Outcome Variable</a>s are assigned.</p>
<p><a name="term10034"><b>Response Variable</b></a></p>
<p><a name="term10034">Response variables are declared
by response declarations and bound to </a><a href="#term10019">Interaction</a>s in the
<a href="#term10021">Item</a> body, they record the candidate's responses. See also
the class <a href="#element10090">responseVariable</a>
</p>
<p><a name="term10035"><b>Scoring Engine</b></a></p>
<p><a name="term10035">The part of the assessment system that
handles the scoring based on the </a><a href="#term10012">Candidate</a>'s responses and the
<a href="#term10033">Response Processing</a> rules.</p>
<p><a name="term10036"><b>Single Response</b></a></p>
<p><a name="term10036">A single response is a </a><a href="#term10034">Response Variable</a> that can take a single value from the set of values
defined by one of the <a href="#term10010">Base-type</a>s.</p>
<p><a name="term10037"><b>Template Processing</b></a></p>
<p><a name="term10037"> A set of rules used to set
the values of the </a><a href="#term10038">Template Variable</a>s, typically involving some
random process, and thereby select the specific clone to be used for an <a href="#term10023">Item Session</a>. </p>
<p><a name="term10038"><b>Template Variable</b></a></p>
<p><a name="term10038">Template variables are declared
by template declarations and used to record the values required to instantiate an
item template. The values determine which clone from the set of similar items
defined by an </a><a href="#term10024">Item Template</a> is being used for a given <a href="#term10023">Item Session</a>.</p>
<p><a name="term10039"><b>Test</b></a></p>
<p><a name="term10039">See </a><a href="#term10006">Assessment</a>.</p>
<p><a name="term10040"><b>Time Dependent Item</b></a></p>
<p><a name="term10040">A time dependent item is an
</a><a href="#term10021">Item</a> that records the accumulated elapsed time for the
<a href="#term10013">Candidate Session</a>s in a <a href="#term10034">Response Variable</a>
that is used during <a href="#term10033">Response Processing</a>.</p>
<p><a name="term10041"><b>Time Independent Item</b></a></p>
<p><a name="term10041">A time independent item
is an </a><a href="#term10021">Item</a> that does not record the amount of time spent by the
<a href="#term10012">Candidate</a> completing it. In practice, this information may be
collected by a <a href="#term10017">Delivery Engine</a> but it is not used for <a href="#term10033">Response Processing</a> and the method by which it is reported is outside the
scope of this specification.</p>
<h2><a name="section10042">4. Items</a></h2>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10010"><b>Class</b> : <code>assessmentItem</code>
</a></p>
</div>
<a name="element10010"> </a>
<p class="class-subbody"><a name="element10011"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10556">string</a></p>
<p class="class-subbody"><a name="element10012"><b>Attribute</b> : <code>title [1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
The title of an <a href="#element10010">assessmentItem</a> is intended to enable the item to be selected in
situations where the full text of the <a href="#element10096">itemBody</a> is not
available, for example when a candidate is browsing a set of items to determine
the order in which to attempt them. Therefore, delivery engines may reveal the
title to candidates at any time but are not required to do so.</p>
<p class="class-subbody"><a name="element10013"><b>Attribute</b> : <code>label [0..1]: </code></a><a class="class-subbody" href="#element10557">string256</a></p>
<p class="class-subbody"><a name="element10014"><b>Attribute</b> : <code>lang [0..1]: </code></a><a class="class-subbody" href="#element10543">language</a></p>
<p class="class-subbody"><a name="element10015"><b>Attribute</b> : <code>adaptive [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = false<br>
Items are classified into
<a href="#term10004">Adaptive Item</a>s and <a href="#term10029">Non-adaptive Item</a>s.</p>
<p class="class-subbody"><a name="element10016"><b>Attribute</b> : <code>timeDependent [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a></p>
<p class="class-subbody"><a name="element10017"><b>Attribute</b> : <code>toolName [0..1]: </code></a><a class="class-subbody" href="#element10557">string256</a><br>
The tool name
attribute allows the tool creating the item to identify itself. Other processing
systems may use this information to interpret the content of application
specific data, such as <a href="#element10102">label</a>s on the elements
of the item's <a href="#element10096">itemBody</a>.</p>
<p class="class-subbody"><a name="element10018"><b>Attribute</b> : <code>toolVersion [0..1]: </code></a><a class="class-subbody" href="#element10557">string256</a><br>
The tool version
attribute allows the tool creating the item to identify its version. This value
must only be interpreted in the context of the <a href="#element10017">toolName</a>
</p>
<p class="class-subbody"><a name="element10019"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10074">responseDeclaration</a> [*]</p>
<p class="class-subbody"><a name="element10020"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10091">outcomeDeclaration</a> [*]</p>
<p class="class-subbody"><a name="element10021"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10500">templateDeclaration</a> [*]</p>
<p class="class-subbody"><a name="element10022"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10512">templateProcessing</a> [0..1]</p>
<p class="class-subbody"><a name="element10023"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10241">stylesheet</a> [0..*]</p>
<p class="class-subbody"><a name="element10024"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10096">itemBody</a> [0..1]</p>
<p class="class-subbody"><a name="element10025"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10355">responseProcessing</a> [0..1]</p>
<p class="class-subbody"><a name="element10026"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10376">modalFeedback</a> [*]</p>
</div>
<p align="center"><img src="imsqti_infov2p0_files/item_session.png"></p>
<p align="center">Item Sessions</p>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10027"><b>Abstract class</b> : <code>itemSession</code>
</a></p>
</div>
<a name="element10027"> </a>
<p><a name="element10027">itemSession is an abstract class to help illustrate the requirements on </a><a href="#term10017">Delivery Engine</a>s when delivering to candidates items that conform to
this specification.</p>
<p class="class-subbody"><a name="element10028"><b>Associated with</b> : <code></code></a><a class="class-subbody" href="#element10010">assessmentItem</a> [1]<br>
An
itemSession is associated with one and only one <a href="#element10010">assessmentItem</a>.</p>
<p class="class-subbody"><a name="element10029"><b>Attribute</b> : <code>completionStatus [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
<a href="#term10017">Delivery Engine</a>s must maintain the value of the built-in
outcome variable <em>completionStatus</em> as part of the session
state. It starts with the reserved value "not_attempted". At the start of the
first attempt it changes the to the reserved value "unknown". It remains with
this value for the duration of the item session unless set to a different value
by a <a href="#element10372">setOutcomeValue</a> rule in <a href="#element10355">responseProcessing</a>. There are four permitted values:
<em>completed</em>, <em>incomplete</em>, <em>not_attempted</em> and
<em>unknown</em>. Any one of these values may be set during response processing,
for definitions of the meanings see <a href="#ref_CMI">[CMI]</a>. If an <a href="#term10004">Adaptive Item</a> sets completionStatus to <em>complete</em> then the
session must be placed into the closed state, however, an itemSession is
<strong>not</strong> required to wait for the complete signal before
terminating, it may terminate in response to a direct request from the
candidate, through running out of time or through some other exceptional
circumstance. Similarly, <a href="#term10029">Non-adaptive Item</a>s are not
<em>required</em> to set a value for completionStatus, however, <a href="#term10004">Adaptive Item</a>s <em>must</em> maintain a suitable value and should set
completionStatus to "complete" to indicate when the cycle of interaction,
response processing and feedback must stop. <a href="#term10017">Delivery Engine</a>s
are encouraged to use the value of completionStatus when communicating using
<a href="#ref_CMI">[CMI]</a>. See the accompanying integration guide for more
details. </p>
<p class="class-subbody"><a name="element10030"><b>Attribute</b> : <code>duration [0..1]: </code></a><a class="class-subbody" href="#element10540">float</a><br>
Systems that support
<a href="#term10040">Time Dependent Item</a>s must record the duration of the
session. The duration is defined as being the accumulated time (in seconds) of
all <a href="#term10013">Candidate Session</a>s for all <a href="#term10008">Attempt</a>s. In
other words the time between the beginning and the end of the itemSession
<strong>minus</strong> any time the itemSession was in the suspended state. The
resolution of the duration must be at least 1s and should be 0.1s or smaller. If
the resolution is denoted by <em>epsilon</em> then each value of duration
represents the range of values [duration,duration+<em>epsilon</em>). In other
words, duration values are truncated. For items that are not time dependent
duration must <span>not be used.</span>
</p>
<p class="class-subbody"><a name="element10031"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10039">itemVariable</a> [*]<br>
The itemSession keeps track of
the current values assigned to all <a href="#element10039">itemVariable</a>s. The
values of <a href="#element10029">completionStatus</a> and <a href="#element10030">duration</a> are treated as special item variables. They share
the same namespace as the item variables explicitly declared through
<a href="#element10034">variableDeclaration</a>s.</p>
<p class="class-subbody"><a name="element10032"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10033">sessionContext</a> [1]<br>
An
itemSession is also associated with a <a href="#element10033">sessionContext</a> which
provides information about the candidate, when and where the session took place
and so on.</p>
<p>The following diagram illustrates the user-perceived states of the itemSession.
Not all states will apply to every scenario, for example feedback may not be
provided for an item or it may not be allowed in the context in which the item
is being used. Similarly, the candidate may not be permitted to review their
responses and/or examine a model solution. In practice, systems may support only
a limited number of the indicated state transitions and/or support other state
transitions not shown here.</p>
<p>For system developers, an important first step in determining which requirements
apply to their system is to identify which of the user-perceived states are
supported in their system and to match the state transitions indicated in the
diagram to their own event model.</p>
<p align="center"><img src="imsqti_infov2p0_files/lifecycle.png"></p>
<p align="center">Lifecycle of an Item Session</p>
<p>A delivery system notionally creates an instance of an itemSession object when it
first becomes eligible for delivery to the candidate. The itemSession's state is
then maintained and updated in response to the actions of the candidate until
the session is over. At this point the state of the session is turned into a
session report (or thrown away). A delivery system may also allow a session
report from a past session to be used to re-create the session in order to allow
a candidate's responses to be seen in the context of the item itself (and
possibly compared to a solution).</p>
<p>The initial state of an itemSession represents the state after it has been
determined that the item will be delivered to the candidate but before the
delivery has taken place.</p>
<p>In a typical non-<a href="#term10005">Adaptive Test</a> the items are
selected in advance and the candidate's interaction with all items is reported
at the end of the test session, regardless of whether or not the candidate
actually attempted all the items. In effect, itemSessions are created in the
initial state for all items at the start of the test and are maintained in
parallel. In an <a href="#term10005">Adaptive Test</a> the items that are to be
presented are selected during the session based on the responses and outcomes
associated with the items presented so far. Items are selected from a large pool
and the delivery engine only reports the candidate's interaction with items that
have actually been selected.</p>
<p>A candidate's interaction with an item is broken into 0 or more attempts. During
each attempt the candidate interacts with the item through one or more candidate
sessions. At the end of a candidate session the item is placed into the
suspended state ready for the next candidate session. During a candidate session
the <em>itemSession</em> is in the interacting state. Once an attempt has ended
response processing takes place, after response processing a new attempt may be started.</p>
<p>For non-adaptive items, response processing may only be invoked a limited number
of times, typically once. For adaptive items, no such limit is required because
the response processing <em>adapts</em> the values it assigns to the outcome
variables based on the path through the item. In both cases, each invocation of
response processing indicates the end of an attempt. The appearance of the
item's body, and whether any modal feedback is shown, is determined by the
values of the <a href="#element10095">outcomeVariable</a>s.</p>
<p>When no more attempts are allowed the itemSession passes into the closed state.
Once in the closed state the values of the response variables are fixed. A
delivery system or reporting tool may still allow the item to be presented after
it has reached the closed state. This type of presentation takes place in the
review state, summary feedback may also be visible at this point if response
processing has taken place and set a suitable <a href="#element10095">outcomeVariable</a>.</p>
<p>Finally, for systems that support the display of solutions, the itemSession may
pass into the solution state. In this state, the candidate's responses are
temporarily replaced by the correct values supplied in the corresponding
<a href="#element10074">responseDeclaration</a>s (or NULL if none was declared).</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10033"><b>Abstract class</b> : <code>sessionContext</code>
</a></p>
<dl>
<dt><a name="element10033">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10027">itemSession</a></code></dd>
</dl>
</div>
<p>The details of <a href="#element10033">sessionContext</a> will be application specific
and are therefore outside the scope of this document. Applications that handle
result reports using <a href="#ref_RR">[RR]</a> should consider the limits of the data
model imposed on the context element in that specification.</p>
</div>
<h2><a name="section10043">5. Item Variables</a></h2>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10034"><b>Abstract class</b> : <code>variableDeclaration</code>
</a></p>
<dl>
<dt><a name="element10034">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10091">outcomeDeclaration</a>, <a class="class-head" href="#element10074">responseDeclaration</a>, <a class="class-head" href="#element10500">templateDeclaration</a></code></dd>
</dl>
</div>
<p align="center"><img src="imsqti_infov2p0_files/types.png"></p>
<p align="center">Variable Declarations</p>
<p>Item variables are declared by variable declarations. All variables must be
declared except for the built-in session variables referred to below which are
declared implicitly. The purpose of the declaration is to associate an
identifier with the variable and to identify the runtime type of the variable's
value. At runtime (i.e., during an <a href="#element10027">itemSession</a>) the value
of the variable is notionally represented by a class derived from <a href="#element10039">itemVariable</a>
</p>
<p class="class-subbody"><a name="element10035"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The identifiers of
the built-in session variables are reserved. They are <a href="#element10029">completionStatus</a> and <a href="#element10030">duration</a>. All item variables declared in an item share the
same namespace. Different items have different namespaces.</p>
<p class="class-subbody"><a name="element10036"><b>Attribute</b> : <code>cardinality [1]: </code></a><a class="class-subbody" href="#element10049">cardinality</a><br>
Each variable is
either single valued or multi-valued. Multi-valued variables are referred to as
containers and come in <span>ordered, unordered and record</span>
types. See <a href="#element10049">cardinality</a> for more information.</p>
<p class="class-subbody"><a name="element10037"><b>Attribute</b> : <code>baseType [0..1]: </code></a><a class="class-subbody" href="#element10054">baseType</a><br>
The value space from
which the variable's value can be drawn (or in the case of containers, from
which the individual values are drawn) is identified with a <a href="#element10054">baseType</a>. The baseType selects one of a small set of predefined types
that are considered to have atomic values within the runtime data model. <span>Variables with <a href="#element10053">record</a>
cardinality have no base-type.</span>
</p>
<p class="class-subbody"><a name="element10038"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10046">defaultValue</a> [0..1]<br>
An optional
default value for the variable. The point at which a variable is set to its
default value varies depending on the type of item variable.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10039"><b>Abstract class</b> : <code>itemVariable</code>
</a></p>
<dl>
<dt><a name="element10039">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10095">outcomeVariable</a>, <a class="class-head" href="#element10090">responseVariable</a>, <a class="class-head" href="#element10503">templateVariable</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10027">itemSession</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10040"><b>Associated with</b> : <code></code></a><a class="class-subbody" href="#element10034">variableDeclaration</a> [1]<br>
At runtime, item variables are created in the
<a href="#element10027">itemSession</a> each corresponding to a <a href="#element10034">variableDeclaration</a> in the corresponding <a href="#element10010">assessmentItem</a>.</p>
<p class="class-subbody"><a name="element10041"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The purpose of an itemVariable is to
associate the runtime value of the variable with the variable's identifier and
declaration. At runtime the variable has the <a href="#element10036">cardinality</a> and <a href="#element10037">baseType</a> given in the associated declaration</p>
<p class="class-subbody"><a name="element10042"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10043">value</a> [*]<br>
An itemVariable may have no
value at all, in which case it is said to have the special value NULL. For
example, if the candidate has not yet had an opportunity to respond to an
<a href="#element10247">interaction</a> then any associated <a href="#element10090">responseVariable</a> will have a NULL value.
<span>Empty containers and empty strings are always treated as
NULL values.</span>
</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10043"><b>Class</b> : <code>value</code>
</a></p>
<dl>
<dt><a name="element10043">Associated classes:</a></dt>
<dd><code><a class="class-head" href="http://www.imsglobal.org/question/qti_v2p0/imsqti_mdudv2p0.html#element10615">ordinaryStatistic</a>, <a class="class-head" href="#element10046">defaultValue</a>, <a class="class-head" href="#element10078">correctResponse</a>, <a class="class-head" href="#element10039">itemVariable</a></code></dd>
</dl>
</div>
<p>A class that can represent a single value of any <a href="#element10054">baseType</a>
<span>in variable declarations. The base-type is defined by the
<a href="#element10037">baseType</a> attribute of the
declaration except in the case of variables with <a href="#element10053">record</a> cardinality.</span>
</p>
<p class="class-subbody"><a name="element10044"><b>Attribute</b> : <code>fieldIdentifier [0..1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
This attribute is used for specifying the field identifier for a value that
forms part of a <a href="#element10053">record</a>. </p>
<p class="class-subbody"><a name="element10045"><b>Attribute</b> : <code>baseType [0..1]: </code></a><a class="class-subbody" href="#element10054">baseType</a><br>
This
attribute is used for specifying the base-type of a value that forms part of a
<a href="#element10053">record</a>. </p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10046"><b>Class</b> : <code>defaultValue</code>
</a></p>
<dl>
<dt><a name="element10046">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10034">variableDeclaration</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10047"><b>Attribute</b> : <code>interpretation [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
A human readable
interpretation of the default value.</p>
<p class="class-subbody"><a name="element10048"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10043">value</a> [1..*]</p>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10049">Enumeration: <code>cardinality</code></a></h4>
</div>
<a name="element10049"> </a>
<p class="class-subbody"><a name="element10050"><code>single</code></a></p>
<a name="element10050"> </a>
<p class="class-subbody"><a name="element10051"><code>multiple</code></a></p>
<a name="element10051"> </a>
<p class="class-subbody"><a name="element10052"><code>ordered</code></a></p>
<a name="element10052"> </a>
<p class="class-subbody"><a name="element10053"><code>record</code></a></p>
<a name="element10053"> </a>
<p><a name="element10053">An </a><a href="#element10382">expression</a> or <a href="#element10039">itemVariable</a> can
either be single-valued or multi-valued. A multi-valued expression (or variable)
is called a container. A container contains a list of values, this list may be
empty in which case it is
<span>treated as NULL</span>. All the values in a <span>multiple or ordered</span> container are drawn from the same
value set, however, containers may contain multiple occurrences of the
<em>same</em> value. In other words, [A,B,B,C] is an acceptable value for a
container. A container with cardinality multiple and value [A,B,C] is equivalent
to a similar one with value [C,B,A] whereas these two values would be considered
distinct for containers with cardinality ordered. When used as the value of a
<a href="#element10090">responseVariable</a> this distinction is typified by the
difference between selecting choices in a multi-response multi-choice task and
ranking choices in an order objects task. In the language of <a href="#ref_ISO11404">[ISO11404]</a> a container with multiple cardinality is a "bag-type", a
container with ordered cardinality is a "sequence-type" <span>and a
container with record cardinality is a "record-type"</span>.</p>
<p>The record container type is a special container that contains a set
of independent values each identified by its own identifier and having its own
base-type. This specification does not make use of the record type directly
however it is provided to enable <a href="#element10352">customInteraction</a>s to
manipulate more complex responses and <a href="#element10496">customOperator</a>s to
return more complex values.</p>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10054">Enumeration: <code>baseType</code></a></h4>
</div>
<a name="element10054"> </a>
<p><a name="element10054">A base-type is simply a description of a set of atomic values (atomic to this
specification). Note that several of the baseTypes used to define the runtime
data model have identical definitions to those of the basic data types used to
define the values for attributes in the specification itself. The use of an
enumeration to define the set of baseTypes used in the <em>runtime</em> model,
as opposed to the use of classes with similar names, is designed to help
distinguish between these two distinct levels of modeling.</a></p>
<a name="element10054"> </a>
<p class="class-subbody"><a name="element10055"><code>identifier</code><br>
The set of identifier values is the same as the set of
values defined by the </a><a href="#element10541">identifier</a> class</p>
<p class="class-subbody"><a name="element10056"><code>boolean</code><br>
The set of boolean values is the same as the set of values
defined by the </a><a href="#element10537">boolean</a> class. </p>
<p class="class-subbody"><a name="element10057"><code>integer</code><br>
The set of integer values is the same as the set of values
defined by the </a><a href="#element10542">integer</a> class.</p>
<p class="class-subbody"><a name="element10058"><code>float</code><br>
The set of float values is the same as the set of values defined
by the </a><a href="#element10540">float</a> class.</p>
<p class="class-subbody"><a name="element10059"><code>string</code><br>
The set of string values is the same as the set of values
defined by the </a><a href="#element10556">string</a> class.</p>
<p class="class-subbody"><a name="element10060"><code>point</code><br>
A point value represents an integer tuple corresponding to a
graphic point. The two integers correspond to the horizontal (x-axis) and
vertical (y-axis) positions respectively. The up/down and left/right senses of
the axes are context dependent.</a></p>
<a name="element10060"> </a>
<p class="class-subbody"><a name="element10061"><code>pair</code><br>
A pair value represents a pair of identifiers corresponding to an
association between two objects. The association is undirected so (A,B) and
(B,A) are equivalent.</a></p>
<a name="element10061"> </a>
<p class="class-subbody"><a name="element10062"><code>directedPair</code><br>
A directedPair value represents a pair of identifiers
corresponding to a directed association between two objects. The two identifiers
correspond to the source and destination objects.</a></p>
<a name="element10062"> </a>
<p class="class-subbody"><a name="element10063"><code>duration</code><br>
A duration value specifies a distance (in time) between two
time points. In other words, a time period as defined by </a><a href="#ref_ISO8601">[ISO8601]</a>. Durations are measured in seconds and may have a fractional part.</p>
<p class="class-subbody"><a name="element10064"><code>file</code><br>
A file value is any sequence of octets (bytes) qualified by a
content-type and an optional filename given to the file (for example, by the
candidate when uploading it as part of an </a><a href="#element10247">interaction</a>).
The content type of the file is one of the MIME types defined by <a href="#ref_RFC2045">[RFC2045]</a>.</p>
<p class="class-subbody"><a name="element10065"><code>uri</code><br>
A URI value is a Uniform Resource Identifier as defined by </a><a href="#ref_URI">[URI]</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10066"><b>Class</b> : <code>mapping</code>
</a></p>
<dl>
<dt><a name="element10066">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10074">responseDeclaration</a>, <a class="class-head" href="http://www.imsglobal.org/question/qti_v2p0/imsqti_mdudv2p0.html#element10617">categorizedStatistic</a></code></dd>
</dl>
</div>
<p>A special class used to create a mapping from a source set of any <a href="#element10054">baseType</a> to a single float. When mapping containers the result is the
<em>sum</em> of the mapped values from the target set. See <a href="#element10391">mapResponse</a> for details.</p>
<p class="class-subbody"><a name="element10067"><b>Attribute</b> : <code>lowerBound [0..1]: </code></a><a class="class-subbody" href="#element10540">float</a><br>
The lower bound for
the result of mapping a container. If unspecified there is no lower-bound.</p>
<p class="class-subbody"><a name="element10068"><b>Attribute</b> : <code>upperBound [0..1]: </code></a><a class="class-subbody" href="#element10540">float</a><br>
The upper bound for
the result of mapping a container. If unspecified there is no upper-bound.</p>
<p class="class-subbody"><a name="element10069"><b>Attribute</b> : <code>defaultValue [1]: </code></a><a class="class-subbody" href="#element10540">float</a> = 0<br>
The default
value from the target set to be used when no explicit mapping for a source value
is given.</p>
<p class="class-subbody"><a name="element10070"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10071">mapEntry</a> [1..*]<br>
The map is defined
by a set of mapEntries, each of which maps a single value from the source set
onto a single float.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10071"><b>Class</b> : <code>mapEntry</code>
</a></p>
<dl>
<dt><a name="element10071">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10066">mapping</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10072"><b>Attribute</b> : <code>mapKey [1]: </code></a><a class="class-subbody" href="#element10043">value</a><br>
The source value</p>
<p class="class-subbody"><a name="element10073"><b>Attribute</b> : <code>mappedValue [1]: </code></a><a class="class-subbody" href="#element10540">float</a><br>
The mapped value</p>
</div>
<h3><a name="section10044">5.1. Response Variables</a></h3>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10074"><b>Class</b> : <code>responseDeclaration (</code></a><a class="class-head" href="#element10034">variableDeclaration</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10010">assessmentItem</a></code></dd>
</dl>
</div>
<p>Response variables are declared by response declarations and bound to
<a href="#element10247">interaction</a>s in the <a href="#element10096">itemBody</a>.</p>
<p>
<a href="#element10027">itemSession</a> defines one built-in pre-bound response
variable: <a href="#element10030">duration</a>.</p>
<p class="class-subbody"><a name="element10075"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10078">correctResponse</a> [0..1]<br>
A
response declaration may assign an optional correctResponse. This value may
indicate the only possible value of the response variable to be considered
correct or merely just <em>a</em> correct value. For responses that are
being measured against a more complex scale <span>than
correct/incorrect</span> this value should be set to the <span>(or an)</span> optimal value. Finally, for responses for
which no such optimal value is defined the correctResponse must be omitted.
If a delivery system supports the display of a solution then it should
display the correct values of responses (where defined) to the candidate.
When correct values are displayed they must be clearly distinguished from
the candidate's own responses (which may be hidden completely if necessary).</p>
<p class="class-subbody"><a name="element10076"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10066">mapping</a> [0..1]<br>
The mapping
provides a mapping from the set of base values to a set of numeric values
for the purposes of response processing. See <a href="#element10391">mapResponse</a> for information on how to use the mapping.</p>
<p class="class-subbody"><a name="element10077"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10081">areaMapping</a> [0..1]<br>
The
areaMapping, which may only be present in declarations of variables with
<a href="#element10054">baseType</a> point, provides an alternative form of
mapping which tests against areas of the coordinate space instead of mapping
single values (i.e., single points).</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10078"><b>Class</b> : <code>correctResponse</code>
</a></p>
<dl>
<dt><a name="element10078">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10074">responseDeclaration</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10079"><b>Attribute</b> : <code>interpretation [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
A human
readable interpretation of the correct value.</p>
<p class="class-subbody"><a name="element10080"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10043">value</a> [1..*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10081"><b>Class</b> : <code>areaMapping</code>
</a></p>
<dl>
<dt><a name="element10081">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10074">responseDeclaration</a></code></dd>
</dl>
</div>
<p>A special class used to create a mapping from a source set of <a href="#element10060">point</a> values to a target set of float values. When mapping
containers the result is the <em>sum</em> of the mapped values from the
target set. See <a href="#element10393">mapResponsePoint</a> for details. The
attributes have the same meaning as the similarly named attributes on
<a href="#element10066">mapping</a>.</p>
<p class="class-subbody"><a name="element10082"><b>Attribute</b> : <code>lowerBound [0..1]: </code></a><a class="class-subbody" href="#element10540">float</a></p>
<p class="class-subbody"><a name="element10083"><b>Attribute</b> : <code>upperBound [0..1]: </code></a><a class="class-subbody" href="#element10540">float</a></p>
<p class="class-subbody"><a name="element10084"><b>Attribute</b> : <code>defaultValue [1]: </code></a><a class="class-subbody" href="#element10540">float</a> = 0</p>
<p class="class-subbody"><a name="element10085"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10086">areaMapEntry</a> [1..*] {ordered}<br>
The map is defined by a set of areaMapEntries, each of
which maps an area of the coordinate space onto a single float. When mapping
points each area is tested in turn, with those listed first taking priority
in the case where areas overlap and a point falls in the intersection.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10086"><b>Class</b> : <code>areaMapEntry</code>
</a></p>
<dl>
<dt><a name="element10086">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10081">areaMapping</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10087"><b>Attribute</b> : <code>shape [1]: </code></a><a class="class-subbody" href="#element10550">shape</a><br>
The shape of the area.</p>
<p class="class-subbody"><a name="element10088"><b>Attribute</b> : <code>coords [1]: </code></a><a class="class-subbody" href="#element10538">coords</a><br>
The size and position of the area,
interpreted in conjunction with the shape.</p>
<p class="class-subbody"><a name="element10089"><b>Attribute</b> : <code>mappedValue [1]: </code></a><a class="class-subbody" href="#element10540">float</a><br>
The mapped value</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10090"><b>Abstract class</b> : <code>responseVariable (</code></a><a class="class-head" href="#element10039">itemVariable</a>)
</p>
</div>
<p>At runtime, response variables are instantiated as part of an <a href="#element10027">itemSession</a>. Their values are always initialized to NULL (no value)
regardless of whether or not a default value is given in the declaration. A
response variable with a NULL value indicates that the candidate has not
offered a response, either because they have not attempted the item at all
or because they have attempted it and chosen not to provide a response.
</p>
<p>If a default value has been provided for a response variable then the
variable is set to this value at the start of the first attempt. If the
candidate never attempts the item, in other words, the <a href="#element10027">itemSession</a> passes straight from the initial state to the closed
state without going through the interacting state, then the response
variable remains NULL and the default value is never used.</p>
<p>Implementors of <a href="#term10017">Delivery Engine</a>'s should take care when
implementing user interfaces for items with default response variable
values. If the associated interaction is left in the default state (i.e.,
representing the default value) then it is important that the system is
confident that the candidate intended to submit this value and has not
simply failed to notice that a default has been provided. This is especially
true if the candidate's attempt ended due to some external event, such as
running out of time. The techniques required to distinguish between these
cases are an issue for user interface design and are therefore out of scope
for this specification.</p>
</div>
<h3><a name="section10045">5.2. Outcome Variables</a></h3>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10091"><b>Class</b> : <code>outcomeDeclaration (</code></a><a class="class-head" href="#element10034">variableDeclaration</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10010">assessmentItem</a></code></dd>
</dl>
</div>
<p>Outcome variables are declared by outcome declarations. Their value is set
either from a default given in the declaration itself or by a <a href="#element10359">responseRule</a> during <a href="#element10355">responseProcessing</a>.</p>
<p>
<a href="#element10027">itemSession</a> defines one built-in outcome variable:
<a href="#element10029">completionStatus</a>. </p>
<p class="class-subbody"><a name="element10092"><b>Attribute</b> : <code>interpretation [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
A human
interpretation of the variable's value.</p>
<p class="class-subbody"><a name="element10093"><b>Attribute</b> : <code>longInterpretation [0..1]: </code></a><a class="class-subbody" href="#element10558">uri</a><br>
An optional
link to an extended interpretation of the outcome variable's value.</p>
<p class="class-subbody"><a name="element10094"><b>Attribute</b> : <code>normalMaximum [0..1]: </code></a><a class="class-subbody" href="#element10540">float</a><br>
The normalMaximum attribute optionally defines the maximum
<em>magnitude</em> of numeric outcome variables, it must be a positive
value. If given, the outcome's value can be divided by normalMaximum and
then truncated (if necessary) to obtain a normalized score in the range
[-1.0,1.0]. normalMaximum has no affect on <a href="#element10355">responseProcessing</a> or the values that the outcome variable itself
can take.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10095"><b>Abstract class</b> : <code>outcomeVariable (</code></a><a class="class-head" href="#element10039">itemVariable</a>)
</p>
</div>
<p>Outcome variables are instantiated as part of an <a href="#element10027">itemSession</a>. Their values may be initialized with a default value
and/or set during <a href="#element10355">responseProcessing</a>. If no default
value is given in the declaration then the outcome variable is initialized
to NULL <em>unless</em> the outcome is of a numeric type (<a href="#element10057">integer</a> or <a href="#element10058">float</a>) in which
case it is initialized to 0.</p>
<p>For <a href="#term10029">Non-adaptive Item</a>s, the values of the outcome variables
are reset to their default values prior to each invocation of <a href="#element10355">responseProcessing</a>. For <a href="#term10004">Adaptive Item</a>s the
outcome variables <em>retain</em> the values that were assigned to them
during the previous invocation of response processing. For more information,
see <a href="#section10067">Response Processing</a>.</p>
</div>
<h2><a name="section10046">6. Content Model</a></h2>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10096"><b>Class</b> : <code>itemBody (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10010">assessmentItem</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10097"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10105">block</a> [*]</p>
<p>The item body contains the text, graphics, media objects and interactions that
describe the item's content and information about how it is structured. The body
is presented by combining it with stylesheet information, either explicitly or
implicitly using the default style rules of the delivery or authoring system.</p>
<p>The body must be presented to the candidate when the associated <a href="#element10027">itemSession</a> is in the interacting state. In this state, the candidate
must be able to interact with each of the visible <a href="#element10247">interaction</a>s and therefore set or update the values of the associated
<a href="#element10090">responseVariable</a>s. The body may be presented to the
candidate when the item session is in the closed or review state. In these
states, although the candidate's responses should be visible, the interactions
must be disabled so as to prevent the candidate from setting or updating the
values of the associated response variables. Finally, the body may be presented
to the candidate in the solution state, in which case the correct values of the
response variables must be visible and the associated interactions disabled.</p>
</div>
<p>The content model employed by this specification uses many concepts taken directly
from <a href="#ref_XHTML">[XHTML]</a>. In effect, this part of the specification defines a
profile of XHTML. Only some of the elements defined in XHTML are allowable in an
<a href="#element10010">assessmentItem</a> and of those that are, some have additional
constraints placed on their attributes. Finally, this specification defines some new
elements which are used to represent the <a href="#element10247">interaction</a>s and to
control the display of <a href="#term10020">Integrated Feedback</a> and content restricted
to one or more of the defined content <a href="#element10559">view</a>s.</p>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10098"><b>Abstract class</b> : <code>bodyElement</code>
</a></p>
<dl>
<dt><a name="element10098">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10115">atomicBlock</a>, <a class="class-head" href="#element10114">atomicInline</a>, <a class="class-head" href="#element10180">caption</a>, <a class="class-head" href="#element10254">choice</a>, <a class="class-head" href="#element10182">col</a>, <a class="class-head" href="#element10183">colgroup</a>, <a class="class-head" href="#element10127">div</a>, <a class="class-head" href="#element10145">dl</a>, <a class="class-head" href="#element10147">dlElement</a>, <a class="class-head" href="#element10174">hr</a>, <a class="class-head" href="#element10247">interaction</a>, <a class="class-head" href="#element10096">itemBody</a>, <a class="class-head" href="#element10156">li</a>, <a class="class-head" href="#element10158">object</a>, <a class="class-head" href="#element10152">ol</a>, <a class="class-head" href="#element10237">printedVariable</a>, <a class="class-head" href="#element10252">prompt</a>, <a class="class-head" href="#element10112">simpleBlock</a>, <a class="class-head" href="#element10110">simpleInline</a>, <a class="class-head" href="#element10185">table</a>, <a class="class-head" href="#element10193">tableCell</a>, <a class="class-head" href="#element10206">tbody</a>, <a class="class-head" href="#element10504">templateElement</a>, <a class="class-head" href="#element10209">tfoot</a>, <a class="class-head" href="#element10212">thead</a>, <a class="class-head" href="#element10214">tr</a>, <a class="class-head" href="#element10154">ul</a></code></dd>
</dl>
</div>
<p>The root class of all content objects in the item content model is the
bodyElement. It defines a number of attributes that are common to all elements
of the content model.</p>
<p class="class-subbody"><a name="element10099"><b>Attribute</b> : <code>id [0..1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The id of a body element
must be unique within the item.</p>
<p class="class-subbody"><a name="element10100"><b>Attribute</b> : <code>class [*]: </code></a><a class="class-subbody" href="#element10246">styleclass</a><br>
Classes
can be assigned to individual body elements. Multiple class names can be given.
These class names identify the element as being a member of the listed classes.
Membership of a class can be used by authoring systems to distinguish between
content objects that are not differentiated by this specification. Typically,
this information is used to apply different formatting based on definitions in
an associated stylesheet.</p>
<p class="class-subbody"><a name="element10101"><b>Attribute</b> : <code>lang [0..1]: </code></a><a class="class-subbody" href="#element10543">language</a><br>
The main
language of the element. This attribute is optional and will usually be
inherited from the enclosing element.</p>
<p class="class-subbody"><a name="element10102"><b>Attribute</b> : <code>label [0..1]: </code></a><a class="class-subbody" href="#element10557">string256</a><br>
The label attribute
provides authoring systems with a mechanism for labeling elements of the
content model with application specific data. If an item uses labels then values
for the associated <a href="#element10017">toolName</a> and
<a href="#element10018">toolVersion</a> attributes must also be provided.</p>
</div>
<h3><a name="section10047">6.1. Basic Classes</a></h3>
<p><a name="section10047">Underpinning the content model are a number of abstract classes
that are used to group elements of the body into categories that define peer-groups.</a></p>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10103"><b>Abstract class</b> : <code>objectFlow</code>
</a></p>
<dl>
<dt><a name="element10103">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10106">flow</a>, <a class="class-head" href="#element10164">param</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10158">object</a></code></dd>
</dl>
</div>
<p>Elements that can appear within an <a href="#element10158">object</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10104"><b>Abstract class</b> : <code>inline</code>
</a></p>
<dl>
<dt><a name="element10104">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10249">inlineInteraction</a>, <a class="class-head" href="#element10107">inlineStatic</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10110">simpleInline</a>, <a class="class-head" href="#element10148">dt</a>, <a class="class-head" href="#element10180">caption</a>, <a class="class-head" href="#element10115">atomicBlock</a></code></dd>
</dl>
</div>
<p>Elements that behave as spans of text, such as the contents of paragraphs.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10105"><b>Abstract class</b> : <code>block</code>
</a></p>
<dl>
<dt><a name="element10105">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10250">blockInteraction</a>, <a class="class-head" href="#element10108">blockStatic</a>, <a class="class-head" href="#element10352">customInteraction</a>, <a class="class-head" href="#element10338">positionObjectStage</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10096">itemBody</a>, <a class="class-head" href="#element10112">simpleBlock</a></code></dd>
</dl>
</div>
<p>Elements that provide structure to the text, such as paragraphs, tables etc.
Most elements are either <a href="#element10104">inline</a> or <a href="#element10105">block</a> elements.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10106"><b>Abstract class</b> : <code>flow (</code></a><a class="class-head" href="#element10103">objectFlow</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10250">blockInteraction</a>, <a class="class-head" href="#element10352">customInteraction</a>, <a class="class-head" href="#element10109">flowStatic</a>, <a class="class-head" href="#element10249">inlineInteraction</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10193">tableCell</a>, <a class="class-head" href="#element10127">div</a>, <a class="class-head" href="#element10150">dd</a>, <a class="class-head" href="#element10156">li</a></code></dd>
</dl>
</div>
<p>Elements that can appear inside list items, table cells, etc. which includes
block-type and inline-type elements.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10107"><b>Abstract class</b> : <code>inlineStatic (</code></a><a class="class-head" href="#element10104">inline</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10114">atomicInline</a>, <a class="class-head" href="#element10286">gap</a>, <a class="class-head" href="#element10310">hottext</a>, <a class="class-head" href="#element10225">math</a>, <a class="class-head" href="#element10158">object</a>, <a class="class-head" href="#element10237">printedVariable</a>, <a class="class-head" href="#element10110">simpleInline</a>, <a class="class-head" href="#element10510">templateInline</a>, <a class="class-head" href="#element10117">textRun</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10310">hottext</a>, <a class="class-head" href="#element10252">prompt</a>, <a class="class-head" href="#element10510">templateInline</a></code></dd>
</dl>
</div>
<p>A sub-class of <a href="#element10104">inline</a> that excludes <a href="#element10247">interaction</a>s.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10108"><b>Abstract class</b> : <code>blockStatic (</code></a><a class="class-head" href="#element10105">block</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10115">atomicBlock</a>, <a class="class-head" href="#element10127">div</a>, <a class="class-head" href="#element10145">dl</a>, <a class="class-head" href="#element10174">hr</a>, <a class="class-head" href="#element10225">math</a>, <a class="class-head" href="#element10152">ol</a>, <a class="class-head" href="#element10112">simpleBlock</a>, <a class="class-head" href="#element10185">table</a>, <a class="class-head" href="#element10508">templateBlock</a>, <a class="class-head" href="#element10154">ul</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10508">templateBlock</a>, <a class="class-head" href="#element10282">gapMatchInteraction</a>, <a class="class-head" href="#element10307">hottextInteraction</a></code></dd>
</dl>
</div>
<p>A sub-class of <a href="#element10105">block</a> that excludes <a href="#element10247">interaction</a>s.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10109"><b>Abstract class</b> : <code>flowStatic (</code></a><a class="class-head" href="#element10106">flow</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10115">atomicBlock</a>, <a class="class-head" href="#element10114">atomicInline</a>, <a class="class-head" href="#element10127">div</a>, <a class="class-head" href="#element10145">dl</a>, <a class="class-head" href="#element10310">hottext</a>, <a class="class-head" href="#element10174">hr</a>, <a class="class-head" href="#element10225">math</a>, <a class="class-head" href="#element10158">object</a>, <a class="class-head" href="#element10152">ol</a>, <a class="class-head" href="#element10237">printedVariable</a>, <a class="class-head" href="#element10112">simpleBlock</a>, <a class="class-head" href="#element10110">simpleInline</a>, <a class="class-head" href="#element10185">table</a>, <a class="class-head" href="#element10508">templateBlock</a>, <a class="class-head" href="#element10510">templateInline</a>, <a class="class-head" href="#element10117">textRun</a>, <a class="class-head" href="#element10154">ul</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10277">simpleAssociableChoice</a>, <a class="class-head" href="#element10376">modalFeedback</a>, <a class="class-head" href="#element10267">simpleChoice</a></code></dd>
</dl>
</div>
<p>A sub-class of <a href="#element10106">flow</a> that excludes <a href="#element10247">interaction</a>s.</p>
</div>
<p>The following classes define a small number of common element types
used by XHTML.</p>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10110"><b>Abstract class</b> : <code>simpleInline (</code></a><a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>, <a class="class-head" href="#element10107">inlineStatic</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10222">a</a>, <a class="class-head" href="#element10118">abbr</a>, <a class="class-head" href="#element10119">acronym</a>, <a class="class-head" href="#element10172">b</a>, <a class="class-head" href="#element10173">big</a>, <a class="class-head" href="#element10124">cite</a>, <a class="class-head" href="#element10125">code</a>, <a class="class-head" href="#element10126">dfn</a>, <a class="class-head" href="#element10129">em</a>, <a class="class-head" href="#element10234">feedbackInline</a>, <a class="class-head" href="#element10175">i</a>, <a class="class-head" href="#element10136">kbd</a>, <a class="class-head" href="#element10139">q</a>, <a class="class-head" href="#element10141">samp</a>, <a class="class-head" href="#element10176">small</a>, <a class="class-head" href="#element10142">span</a>, <a class="class-head" href="#element10143">strong</a>, <a class="class-head" href="#element10177">sub</a>, <a class="class-head" href="#element10178">sup</a>, <a class="class-head" href="#element10179">tt</a>, <a class="class-head" href="#element10144">var</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10111"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10104">inline</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10112"><b>Abstract class</b> : <code>simpleBlock (</code></a><a class="class-head" href="#element10108">blockStatic</a>, <a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10121">blockquote</a>, <a class="class-head" href="#element10233">feedbackBlock</a>, <a class="class-head" href="#element10235">rubricBlock</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10113"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10105">block</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10114"><b>Abstract class</b> : <code>atomicInline (</code></a><a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>, <a class="class-head" href="#element10107">inlineStatic</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10123">br</a>, <a class="class-head" href="#element10216">img</a></code></dd>
</dl>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10115"><b>Abstract class</b> : <code>atomicBlock (</code></a><a class="class-head" href="#element10108">blockStatic</a>, <a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10120">address</a>, <a class="class-head" href="#element10130">h1</a>, <a class="class-head" href="#element10131">h2</a>, <a class="class-head" href="#element10132">h3</a>, <a class="class-head" href="#element10133">h4</a>, <a class="class-head" href="#element10134">h5</a>, <a class="class-head" href="#element10135">h6</a>, <a class="class-head" href="#element10137">p</a>, <a class="class-head" href="#element10138">pre</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10116"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10104">inline</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10117"><b>Class</b> : <code>textRun (</code></a><a class="class-head" href="#element10109">flowStatic</a>, <a class="class-head" href="#element10107">inlineStatic</a>)
</p>
</div>
<p>A text run is simply a run of characters. Unlike all other elements in the
content model it is not a sub-class of <a href="#element10098">bodyElement</a>. To
assign attributes to a run of text you must use the <a href="#element10142">span</a> element instead.</p>
</div>
<h3><a name="section10048">6.2. XHTML Elements</a></h3>
<p><a name="section10048">The structural elements of the content model that are taken from </a><a href="#ref_XHTML">[XHTML]</a> are documented in groups according to their suggested
classification in <a href="#ref_XHTML_MOD">[XHTML_MOD]</a>. Only those attributes listed here
may be used (including attributes inherited from parent classes). By default,
elements and attributes have the same interpretation and restrictions as the
corresponding elements and attributes in <a href="#ref_XHTML">[XHTML]</a>.</p>
<h4><a name="section10049">6.2.1. Text Elements</a></h4>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10118"><b>Class</b> : <code>abbr (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
Note that
the title attribute defined by XHTML is not supported.</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10119"><b>Class</b> : <code>acronym (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
Note
that the title attribute defined by XHTML is not supported.</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10120"><b>Class</b> : <code>address (</code></a><a class="class-head" href="#element10115">atomicBlock</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10121"><b>Class</b> : <code>blockquote (</code></a><a class="class-head" href="#element10112">simpleBlock</a>)
</p>
</div>
<p class="class-subbody"><a name="element10122"><b>Attribute</b> : <code>cite [0..1]: </code></a><a class="class-subbody" href="#element10558">uri</a></p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10123"><b>Class</b> : <code>br (</code></a><a class="class-head" href="#element10114">atomicInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10124"><b>Class</b> : <code>cite (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10125"><b>Class</b> : <code>code (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10126"><b>Class</b> : <code>dfn (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10127"><b>Class</b> : <code>div (</code></a><a class="class-head" href="#element10108">blockStatic</a>, <a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>)
</p>
</div>
<p class="class-subbody"><a name="element10128"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10106">flow</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10129"><b>Class</b> : <code>em (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10130"><b>Class</b> : <code>h1 (</code></a><a class="class-head" href="#element10115">atomicBlock</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10131"><b>Class</b> : <code>h2 (</code></a><a class="class-head" href="#element10115">atomicBlock</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10132"><b>Class</b> : <code>h3 (</code></a><a class="class-head" href="#element10115">atomicBlock</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10133"><b>Class</b> : <code>h4 (</code></a><a class="class-head" href="#element10115">atomicBlock</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10134"><b>Class</b> : <code>h5 (</code></a><a class="class-head" href="#element10115">atomicBlock</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10135"><b>Class</b> : <code>h6 (</code></a><a class="class-head" href="#element10115">atomicBlock</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10136"><b>Class</b> : <code>kbd (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10137"><b>Class</b> : <code>p (</code></a><a class="class-head" href="#element10115">atomicBlock</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10138"><b>Class</b> : <code>pre (</code></a><a class="class-head" href="#element10115">atomicBlock</a>)
</p>
</div>
<p>Although pre inherits from atomicBlock it must not contain, either
directly or indirectly, any of the following objects: <a href="#element10216">img</a>, <a href="#element10158">object</a>, <a href="#element10173">big</a>,
<a href="#element10176">small</a>, <a href="#element10177">sub</a>, <a href="#element10178">sup</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10139"><b>Class</b> : <code>q (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
<p class="class-subbody"><a name="element10140"><b>Attribute</b> : <code>cite [0..1]: </code></a><a class="class-subbody" href="#element10558">uri</a></p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10141"><b>Class</b> : <code>samp (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10142"><b>Class</b> : <code>span (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10143"><b>Class</b> : <code>strong (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10144"><b>Class</b> : <code>var (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<h4><a name="section10050">6.2.2. List Elements</a></h4>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10145"><b>Class</b> : <code>dl (</code></a><a class="class-head" href="#element10108">blockStatic</a>, <a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>)
</p>
</div>
<p class="class-subbody"><a name="element10146"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10147">dlElement</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10147"><b>Abstract class</b> : <code>dlElement (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10150">dd</a>, <a class="class-head" href="#element10148">dt</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10145">dl</a></code></dd>
</dl>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10148"><b>Class</b> : <code>dt (</code></a><a class="class-head" href="#element10147">dlElement</a>)
</p>
</div>
<p class="class-subbody"><a name="element10149"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10104">inline</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10150"><b>Class</b> : <code>dd (</code></a><a class="class-head" href="#element10147">dlElement</a>)
</p>
</div>
<p class="class-subbody"><a name="element10151"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10106">flow</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10152"><b>Class</b> : <code>ol (</code></a><a class="class-head" href="#element10108">blockStatic</a>, <a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>)
</p>
</div>
<p class="class-subbody"><a name="element10153"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10156">li</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10154"><b>Class</b> : <code>ul (</code></a><a class="class-head" href="#element10108">blockStatic</a>, <a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>)
</p>
</div>
<p class="class-subbody"><a name="element10155"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10156">li</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10156"><b>Class</b> : <code>li (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10154">ul</a>, <a class="class-head" href="#element10152">ol</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10157"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10106">flow</a> [*]</p>
</div>
<h4><a name="section10051">6.2.3. Object Elements</a></h4>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10158"><b>Class</b> : <code>object (</code></a><a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>, <a class="class-head" href="#element10107">inlineStatic</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10348">drawingInteraction</a>, <a class="class-head" href="#element10334">positionObjectInteraction</a>, <a class="class-head" href="#element10338">positionObjectStage</a>, <a class="class-head" href="#element10319">graphicInteraction</a>, <a class="class-head" href="#element10290">gapImg</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10159"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10103">objectFlow</a> [*]</p>
<p class="class-subbody"><a name="element10160"><b>Attribute</b> : <code>data [1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
The
data attribute provides a URI for locating the data associated with the object.</p>
<p class="class-subbody"><a name="element10161"><b>Attribute</b> : <code>type [1]: </code></a><a class="class-subbody" href="#element10545">mimeType</a></p>
<p class="class-subbody"><a name="element10162"><b>Attribute</b> : <code>width [0..1]: </code></a><a class="class-subbody" href="#element10544">length</a></p>
<p class="class-subbody"><a name="element10163"><b>Attribute</b> : <code>height [0..1]: </code></a><a class="class-subbody" href="#element10544">length</a></p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10164"><b>Class</b> : <code>param (</code></a><a class="class-head" href="#element10103">objectFlow</a>)
</p>
</div>
<p class="class-subbody"><a name="element10165"><b>Attribute</b> : <code>name [1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
The name of the parameter, as
interpreted by the object.</p>
<p class="class-subbody"><a name="element10166"><b>Attribute</b> : <code>value [1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
The value to pass to
the object for the named parameter. This value is subject to template
variable expansion. If the value is the name of a template variable that
was declared with the <a href="#element10501">paramVariable</a> set to <em>true</em> then the
template variable's <em>value</em> is passed to the object as the value
for the given parameter.</p>
<p>When expanding a template variable as a parameter value, types other than
<a href="#element10055">identifier</a>s, <a href="#element10059">string</a>s and <a href="#element10065">uri</a>s must
be converted to strings. Numeric types are converted to strings using
the "%i" or "%G" formats as appropriate (see <a href="#element10237">printedVariable</a> for a discussion of numeric formatting). Values
of base-type <a href="#element10056">boolean</a> are expanded to one
of the strings "true" or "false". Values of base-type <a href="#element10060">point</a> are expanded to two space-separated integers in
the order horizontal coordinate, vertical coordinate, using "%i" format.
Values of base-type <a href="#element10061">pair</a> and <a href="#element10062">directedPair</a> are converted to a string consisting of
the two identifiers, space separated. Values of base-type <a href="#element10063">duration</a> are converted using "%G" format. Values of
base-type <a href="#element10064">file</a> cannot be used in
parameter expansion.</p>
<p>If the <a href="#element10167">valuetype</a> is <em>REF</em> the template
variable must be of base-type <a href="#element10065">uri</a>.</p>
<p class="class-subbody"><a name="element10167"><b>Attribute</b> : <code>valuetype [1]: </code></a><a class="class-subbody" href="#element10169">paramType</a> = DATA<br>
This
specification supports the use of <em>DATA</em> and <em>REF</em> but <strong>not</strong>
<em>OBJECT</em>.
</p>
<p class="class-subbody"><a name="element10168"><b>Attribute</b> : <code>type [0..1]: </code></a><a class="class-subbody" href="#element10545">mimeType</a><br>
Used to provide a
type for values <span>
<a href="#element10167">valuetype</a> REF.</span>
</p>
</div>
<div class="class-body">
<div class="class-head">
<h6><a name="element10169">Enumeration: <code>paramType</code></a></h6>
</div>
<a name="element10169"> </a>
<p class="class-subbody"><a name="element10170"><code>DATA</code></a></p>
<a name="element10170"> </a>
<p class="class-subbody"><a name="element10171"><code>REF</code></a></p>
<a name="element10171">
</a></div>
<h4><a name="section10052">6.2.4. Presentation Elements</a></h4>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10172"><b>Class</b> : <code>b (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10173"><b>Class</b> : <code>big (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10174"><b>Class</b> : <code>hr (</code></a><a class="class-head" href="#element10108">blockStatic</a>, <a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10175"><b>Class</b> : <code>i (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10176"><b>Class</b> : <code>small (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10177"><b>Class</b> : <code>sub (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10178"><b>Class</b> : <code>sup (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10179"><b>Class</b> : <code>tt (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<h4><a name="section10053">6.2.5. Table Elements</a></h4>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10180"><b>Class</b> : <code>caption (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10185">table</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10181"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10104">inline</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10182"><b>Class</b> : <code>col (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10185">table</a>, <a class="class-head" href="#element10183">colgroup</a></code></dd>
</dl>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10183"><b>Class</b> : <code>colgroup (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10185">table</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10184"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10182">col</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10185"><b>Class</b> : <code>table (</code></a><a class="class-head" href="#element10108">blockStatic</a>, <a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>)
</p>
</div>
<p class="class-subbody"><a name="element10186"><b>Attribute</b> : <code>summary [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a></p>
<p class="class-subbody"><a name="element10187"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10180">caption</a> [0..1]</p>
<p class="class-subbody"><a name="element10188"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10182">col</a> [*]<br>
If a table <em>directly</em> contains a
col then it must not contain any <a href="#element10183">colgroup</a> elements.</p>
<p class="class-subbody"><a name="element10189"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10183">colgroup</a> [*]<br>
If a table contains a colgroup
it must not <em>directly</em> contain any <a href="#element10182">col</a> elements.</p>
<p class="class-subbody"><a name="element10190"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10212">thead</a> [0..1]</p>
<p class="class-subbody"><a name="element10191"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10209">tfoot</a> [0..1]</p>
<p class="class-subbody"><a name="element10192"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10206">tbody</a> [1..*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10193"><b>Abstract class</b> : <code>tableCell (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10208">td</a>, <a class="class-head" href="#element10211">th</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10214">tr</a></code></dd>
</dl>
</div>
<p>In XHTML, table cells are represented by either <a href="#element10211">th</a> or <a href="#element10208">td</a> and these share the following
attributes and content model:</p>
<p class="class-subbody"><a name="element10194"><b>Attribute</b> : <code>headers [*]: </code></a><a class="class-subbody" href="#element10541">identifier</a></p>
<p class="class-subbody"><a name="element10195"><b>Attribute</b> : <code>scope [0..1]: </code></a><a class="class-subbody" href="#element10201">tableCellScope</a></p>
<p class="class-subbody"><a name="element10196"><b>Attribute</b> : <code>abbr [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a></p>
<p class="class-subbody"><a name="element10197"><b>Attribute</b> : <code>axis [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a></p>
<p class="class-subbody"><a name="element10198"><b>Attribute</b> : <code>rowspan [0..1]: </code></a><a class="class-subbody" href="#element10542">integer</a></p>
<p class="class-subbody"><a name="element10199"><b>Attribute</b> : <code>colspan [0..1]: </code></a><a class="class-subbody" href="#element10542">integer</a></p>
<p class="class-subbody"><a name="element10200"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10106">flow</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<h6><a name="element10201">Enumeration: <code>tableCellScope</code></a></h6>
</div>
<a name="element10201"> </a>
<p class="class-subbody"><a name="element10202"><code>row</code></a></p>
<a name="element10202"> </a>
<p class="class-subbody"><a name="element10203"><code>col</code></a></p>
<a name="element10203"> </a>
<p class="class-subbody"><a name="element10204"><code>rowgroup</code></a></p>
<a name="element10204"> </a>
<p class="class-subbody"><a name="element10205"><code>colgroup</code></a></p>
<a name="element10205"> </a></div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10206"><b>Class</b> : <code>tbody (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10185">table</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10207"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10214">tr</a> [1..*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10208"><b>Class</b> : <code>td (</code></a><a class="class-head" href="#element10193">tableCell</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10209"><b>Class</b> : <code>tfoot (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10185">table</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10210"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10211">th</a> [1..*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10211"><b>Class</b> : <code>th (</code></a><a class="class-head" href="#element10193">tableCell</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10209">tfoot</a></code></dd>
</dl>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10212"><b>Class</b> : <code>thead (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10185">table</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10213"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10214">tr</a> [1..*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10214"><b>Class</b> : <code>tr (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10206">tbody</a>, <a class="class-head" href="#element10212">thead</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10215"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10193">tableCell</a> [1..*]</p>
</div>
<h4><a name="section10054">6.2.6. Image Element</a></h4>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10216"><b>Class</b> : <code>img (</code></a><a class="class-head" href="#element10114">atomicInline</a>)
</p>
</div>
<p class="class-subbody"><a name="element10217"><b>Attribute</b> : <code>src [1]: </code></a><a class="class-subbody" href="#element10558">uri</a></p>
<p class="class-subbody"><a name="element10218"><b>Attribute</b> : <code>alt [1]: </code></a><a class="class-subbody" href="#element10557">string256</a></p>
<p class="class-subbody"><a name="element10219"><b>Attribute</b> : <code>longdesc [0..1]: </code></a><a class="class-subbody" href="#element10558">uri</a></p>
<p class="class-subbody"><a name="element10220"><b>Attribute</b> : <code>height [0..1]: </code></a><a class="class-subbody" href="#element10544">length</a></p>
<p class="class-subbody"><a name="element10221"><b>Attribute</b> : <code>width [0..1]: </code></a><a class="class-subbody" href="#element10544">length</a></p>
</div>
<h4><a name="section10055">6.2.7. Hypertext Element</a></h4>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10222"><b>Class</b> : <code>a (</code></a><a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
<p>Although <a href="#element10222">a</a> inherits from <a href="#element10110">simpleInline</a> it must not contain, either directly or
indirectly, another <a href="#element10222">a</a>.</p>
<p class="class-subbody"><a name="element10223"><b>Attribute</b> : <code>href [1]: </code></a><a class="class-subbody" href="#element10558">uri</a></p>
<p class="class-subbody"><a name="element10224"><b>Attribute</b> : <code>type [0..1]: </code></a><a class="class-subbody" href="#element10545">mimeType</a></p>
</div>
<h3><a name="section10056">6.3. MathML</a></h3>
<p>
<a name="section10056"> </a><a href="#ref_MathML">[MathML]</a> defines a Markup Language for describing mathematical
notation using XML. The primary purpose of MathML is to provide a language for
embedding mathematical expressions into other documents, in particular into HTML documents.</p>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10225"><b>Class</b> : <code>math (</code></a><a class="class-head" href="#element10108">blockStatic</a>, <a class="class-head" href="#element10109">flowStatic</a>, <a class="class-head" href="#element10107">inlineStatic</a>)
</p>
</div>
<p>The math class is defined externally by the MathML specification. It can
behave in the item's content model as an inline, block or flow element.</p>
</div>
<h4><a name="section10057">6.3.1. Combining Template Variables and MathML</a></h4>
<p><a name="section10057">It is often desirable to vary elements of a mathematical expression when
creating item templates. Although it is impossible to embed objects such as
</a><a href="#element10237">printedVariable</a> defined for that purpose within a
<a href="#element10225">math</a> object the techniques described in this
section can be used to achieve a similar effect.</p>
<p>In MathML, numbers are represented either by the &lt;mn&gt; or
&lt;cn&gt; elements, for presentation or content representation
respectively. Similarly, &lt;mi&gt; and &lt;ci&gt; represent
identifiers. If <a href="#element10502">mathVariable</a> is
set in a template variable's declaration then all instances of
&lt;mi&gt; and &lt;ci&gt; that match the name of the
template variable must be replaced by &lt;mn&gt; and
&lt;cn&gt; respectively with the template variable's value as their content.</p>
<p>It is possible that this technique of expanding template variables will be
extended to other elements of MathML in future.</p>
<h3><a name="section10058">6.4. Variable Content</a></h3>
<p><a name="section10058">This specification defines two methods by which the content of an </a><a href="#element10010">assessmentItem</a> can vary depending on the state of the <a href="#element10027">itemSession</a>.</p>
<p>The first method is based on the value of an <a href="#element10095">outcomeVariable</a>.</p>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10226"><b>Abstract class</b> : <code>feedbackElement</code>
</a></p>
<dl>
<dt><a name="element10226">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10233">feedbackBlock</a>, <a class="class-head" href="#element10234">feedbackInline</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10227"><b>Attribute</b> : <code>outcomeIdentifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The
identifier of an outcome variable that must have a base-type of <a href="#element10055">identifier</a> and be of either <a href="#element10050">single</a> or <a href="#element10051">multiple</a>
cardinality. The visibility of the feedbackElement is controlled by
assigning a value (or values) to this outcome variable during <a href="#element10355">responseProcessing</a>.</p>
<p class="class-subbody"><a name="element10228"><b>Attribute</b> : <code>showHide [1]: </code></a><a class="class-subbody" href="#element10230">showHide</a> = show<br>
The
showHide attribute determines how the visibility of the feedbackElement is
controlled. If set to <a href="#element10231">show</a> then the feedback
is hidden by default and shown only if the associated outcome variable
matches, or contains, the value of the <a href="#element10229">identifier</a> attribute. If set to <a href="#element10232">hide</a> then the feedback is shown by default and hidden if
the associated outcome variable matches, or contains, the value of the
<a href="#element10229">identifier</a> attribute.</p>
<p class="class-subbody"><a name="element10229"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The identifier
that determines the visibility of the feedback in conjunction with the
<a href="#element10228">showHide</a> attribute.</p>
<p>A feedback element that forms part of a <a href="#term10029">Non-adaptive Item</a>
must not contain an <a href="#element10247">interaction</a> object, either
directly or indirectly.</p>
<p>When an <a href="#element10247">interaction</a> is contained in a hidden feedback
element it must also be hidden. The candidate must not be able to set or
update the value of the associated <a href="#element10090">responseVariable</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<h5><a name="element10230">Enumeration: <code>showHide</code></a></h5>
</div>
<a name="element10230"> </a>
<p class="class-subbody"><a name="element10231"><code>show</code></a></p>
<a name="element10231"> </a>
<p class="class-subbody"><a name="element10232"><code>hide</code></a></p>
<a name="element10232"> </a></div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10233"><b>Class</b> : <code>feedbackBlock (</code></a><a class="class-head" href="#element10226">feedbackElement</a>, <a class="class-head" href="#element10112">simpleBlock</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10234"><b>Class</b> : <code>feedbackInline (</code></a><a class="class-head" href="#element10226">feedbackElement</a>, <a class="class-head" href="#element10110">simpleInline</a>)
</p>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10235"><b>Class</b> : <code>rubricBlock (</code></a><a class="class-head" href="#element10112">simpleBlock</a>)
</p>
</div>
<p class="class-subbody"><a name="element10236"><b>Attribute</b> : <code>view [1..*]: </code></a><a class="class-subbody" href="#element10559">view</a><br>
The views in which the
rubric block's content are to be shown.</p>
<p>A rubric block identifies part of an <a href="#element10010">assessmentItem</a>'s
<a href="#element10096">itemBody</a> that represents instructions to one or
more of the actors that view the item. Although rubric blocks are defined as
<a href="#element10112">simpleBlock</a>s they must not contain <a href="#element10247">interaction</a>s.</p>
</div>
<p>The visibility of nested <a href="#element10098">bodyElement</a>s or <a href="#element10235">rubricBlock</a>s is determined by the outermost element. In other words, if
an element is determined to be hidden then all of its content is hidden
including conditionally visible elements for which the conditions are satisfied
and that therefore would otherwise be visible.</p>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10237"><b>Class</b> : <code>printedVariable (</code></a><a class="class-head" href="#element10098">bodyElement</a>, <a class="class-head" href="#element10109">flowStatic</a>, <a class="class-head" href="#element10107">inlineStatic</a>)
</p>
</div>
<p class="class-subbody"><a name="element10238"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The <a href="#element10095">outcomeVariable</a> or <a href="#element10503">templateVariable</a> that must
have been defined and have <a href="#element10050">single</a>
cardinality. The values of <a href="#element10090">responseVariable</a>s cannot be
printed directly as their values are implicitly known to the candidate
through the <a href="#element10247">interaction</a>s they are bound to. If
necessary, their values can be assigned to <a href="#element10095">outcomeVariable</a>s during <a href="#element10355">responseProcessing</a>
and displayed to the candidate as part of a <a href="#element10098">bodyElement</a> visible only in the appropriate feedback states.</p>
<p>If the variable's value is NULL then the element is ignored.</p>
<p>Variables of <a href="#element10054">baseType</a>
<a href="#element10059">string</a> are treated as simple runs of text.</p>
<p>Variables of <a href="#element10054">baseType</a>
<a href="#element10057">integer</a> or <a href="#element10058">float</a> are converted to runs of text (strings) using the
<span>formatting rules described below. Float values should
only be formatted in the e, E, f, g, G, r or R styles.</span>.</p>
<p>Variables of <a href="#element10054">baseType</a>
<a href="#element10063">duration</a> are
<span>treated as floats, representing the duration in seconds</span>.</p>
<p class="class-subbody"><a name="element10239"><b>Attribute</b> : <code>format [0..1]: </code></a><a class="class-subbody" href="#element10557">string256</a><br>
The format conversion specifier to use when converting numerical values to
strings. See <a href="#section10059">Number Formatting Rules</a> for details. </p>
<p class="class-subbody"><a name="element10240"><b>Attribute</b> : <code>base [0..1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 10<br>
The number base to use when converting integer variables to
strings with the <em>i</em> conversion type code.</p>
<p>Variables of <a href="#element10054">baseType</a>
<a href="#element10064">file</a> are rendered using a control that
enables the user to open the file. The control should display the name
associated with the file, if any.</p>
<p>Variables of <a href="#element10054">baseType</a>
<a href="#element10065">uri</a> are rendered using a control that enables
the user to open the identified resource, for example, by following a
hypertext link in the case of a URL.</p>
</div>
<h4><a name="section10059">6.4.1. Number Formatting Rules</a></h4>
<p><a name="section10059">The syntax of the </a><a href="#element10239">format</a> attribute is
based on the format conversion specifiers defined in the C programming
language <a href="#ref_ISO_9899">[ISO_9899]</a> for use with <em>printf</em> and related functions.</p>
<p>Each conversion specifier starts with a '%' character and is followed by zero
or more flag characters (#, 0, -, " " <em>[space]</em> and +), an optional
digit string indicating the minimum field width, an optional precision
(consisting of a "." followed by zero or more digits) and finally one of the
conversion type codes: E, e, f, G, g, r, R, i, o, X, or x. These are
interpreted according to the C standard with the exception of <em>i</em>,
which may be used to format numbers in bases other than 10 using the
<a href="#element10240">base</a> attribute, and
<em>r</em>/<em>R</em> which round to the number of significant figures given
by the precision in the same way as <em>g</em>/<em>G</em> except that
scientific format is <em>only</em> used if the requested number of
significant figures is less than the number of digits to the left of the
decimal point.</p>
<h3><a name="section10060">6.5. Formatting Items with Stylesheets</a></h3>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10241"><b>Class</b> : <code>stylesheet</code>
</a></p>
<dl>
<dt><a name="element10241">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10010">assessmentItem</a></code></dd>
</dl>
</div>
<p>Used to associate an external stylesheet with an <a href="#element10010">assessmentItem</a>.</p>
<p class="class-subbody"><a name="element10242"><b>Attribute</b> : <code>href [1]: </code></a><a class="class-subbody" href="#element10558">uri</a><br>
The identifier or location of
the external stylesheet.</p>
<p class="class-subbody"><a name="element10243"><b>Attribute</b> : <code>type [1]: </code></a><a class="class-subbody" href="#element10545">mimeType</a><br>
The type of the external stylesheet.</p>
<p class="class-subbody"><a name="element10244"><b>Attribute</b> : <code>media [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
An optional media
descriptor that describes the media to which this stylesheet applies.</p>
<p class="class-subbody"><a name="element10245"><b>Attribute</b> : <code>title [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
An optional title for
the stylesheet.</p>
</div>
<div class="class-body">
<div class="class-head">
<h5><a name="element10246">Datatype: <code>styleclass</code></a></h5>
</div>
<a name="element10246">The type used when referring to a class definition, for example
in a stylesheet. Class names cannot contain spaces.</a></div>
<h2><a name="section10061">7. Interactions</a></h2>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10247"><b>Abstract class</b> : <code>interaction (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10250">blockInteraction</a>, <a class="class-head" href="#element10352">customInteraction</a>, <a class="class-head" href="#element10249">inlineInteraction</a>, <a class="class-head" href="#element10334">positionObjectInteraction</a></code></dd>
</dl>
</div>
<p>Interactions allow the candidate to <em>interact</em> with the item. Through an
interaction, the candidate selects or constructs a response. The candidate's
responses are stored in the <a href="#element10090">responseVariable</a>s. Each
interaction is associated with (at least) one response variable.</p>
<p class="class-subbody"><a name="element10248"><b>Attribute</b> : <code>responseIdentifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The response variable
associated with the interaction.</p>
<p>The state of the interaction reflects the value of the associated response
variable.
</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10249"><b>Abstract class</b> : <code>inlineInteraction (</code></a><a class="class-head" href="#element10106">flow</a>, <a class="class-head" href="#element10104">inline</a>, <a class="class-head" href="#element10247">interaction</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10353">endAttemptInteraction</a>, <a class="class-head" href="#element10293">inlineChoiceInteraction</a>, <a class="class-head" href="#element10303">textEntryInteraction</a></code></dd>
</dl>
</div>
<p>An interaction that appears <a href="#element10104">inline</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10250"><b>Abstract class</b> : <code>blockInteraction (</code></a><a class="class-head" href="#element10105">block</a>, <a class="class-head" href="#element10106">flow</a>, <a class="class-head" href="#element10247">interaction</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10269">associateInteraction</a>, <a class="class-head" href="#element10259">choiceInteraction</a>, <a class="class-head" href="#element10348">drawingInteraction</a>, <a class="class-head" href="#element10304">extendedTextInteraction</a>, <a class="class-head" href="#element10282">gapMatchInteraction</a>, <a class="class-head" href="#element10319">graphicInteraction</a>, <a class="class-head" href="#element10307">hottextInteraction</a>, <a class="class-head" href="#element10273">matchInteraction</a>, <a class="class-head" href="#element10263">orderInteraction</a>, <a class="class-head" href="#element10341">sliderInteraction</a>, <a class="class-head" href="#element10350">uploadInteraction</a></code></dd>
</dl>
</div>
<p>An interaction that behaves like a <a href="#element10105">block</a> in the content
model. Most interactions are of this type.</p>
<p class="class-subbody"><a name="element10251"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10252">prompt</a> [0..1]<br>
An optional prompt for
the interaction.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10252"><b>Class</b> : <code>prompt (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10250">blockInteraction</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10253"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10107">inlineStatic</a> [*]<br>
A prompt must
not contain any <span>nested</span>
<a href="#element10247">interaction</a>s.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10254"><b>Abstract class</b> : <code>choice (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10257">associableChoice</a>, <a class="class-head" href="#element10316">hotspotChoice</a>, <a class="class-head" href="#element10310">hottext</a>, <a class="class-head" href="#element10296">inlineChoice</a>, <a class="class-head" href="#element10267">simpleChoice</a></code></dd>
</dl>
</div>
<p>Many of the interactions involve choosing one or more predefined choices. These
choices all have the following attributes in common:</p>
<p class="class-subbody"><a name="element10255"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The identifier of
the choice. This identifier must not be used by any other choice <em>or item variable</em>.</p>
<p class="class-subbody"><a name="element10256"><b>Attribute</b> : <code>fixed [0..1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = false<br>
If fixed
is true for a choice then the position of this choice within the interaction
must not be changed by the delivery engine even if the immediately enclosing
interaction supports the shuffling of choices. If no value is specified then the
choice is free to be shuffled.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10257"><b>Abstract class</b> : <code>associableChoice (</code></a><a class="class-head" href="#element10254">choice</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10317">associableHotspot</a>, <a class="class-head" href="#element10286">gap</a>, <a class="class-head" href="#element10287">gapChoice</a>, <a class="class-head" href="#element10277">simpleAssociableChoice</a></code></dd>
</dl>
</div>
<p>Other interactions involve associating pairs of predefined choices. These choices
all have the following attribute in common:</p>
<p class="class-subbody"><a name="element10258"><b>Attribute</b> : <code>matchGroup [0..*]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
A set of choices
that this choice may be associated with, all others are excluded. If no
matchGroup is given, or if it is empty, then all other choices may be associated
with this one subject to their own matching constraints.</p>
</div>
<h3><a name="section10062">7.1. Simple Interactions</a></h3>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10259"><b>Class</b> : <code>choiceInteraction (</code></a><a class="class-head" href="#element10250">blockInteraction</a>)
</p>
</div>
<p>The choice interaction presents a set of choices to the candidate. The
candidate's task is to select one or more of the choices, up to a maximum of
<a href="#element10261">maxChoices</a>. There is no
corresponding minimum number of choices. The interaction is always
initialized with no choices selected.
</p>
<p>The choiceInteraction must be bound to a <a href="#element10090">responseVariable</a> with a <a href="#element10054">baseType</a> of
<a href="#element10055">identifier</a> and <a href="#element10050">single</a> or <a href="#element10051">multiple</a> cardinality.</p>
<p class="class-subbody"><a name="element10260"><b>Attribute</b> : <code>shuffle [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = false<br>
If the shuffle
attribute is true then the delivery engine must randomize the order in which
the choices are presented subject to the <a href="#element10256">fixed</a> attribute.</p>
<p class="class-subbody"><a name="element10261"><b>Attribute</b> : <code>maxChoices [1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 1<br>
The maximum number of
choices that the candidate is allowed to select. <span>If
maxChoices is 0 then there is no restriction.</span>
<span>If maxChoices is greater than 1 (or 0) then the
interaction must be bound to a response with <a href="#element10051">multiple</a> cardinality.</span>
</p>
<p class="class-subbody"><a name="element10262"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10267">simpleChoice</a> [1..*]<br>
An
ordered list of the choices that are displayed to the user. The order is the
order of the choices presented to the user unless <a href="#element10260">shuffle</a> is true.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10263"><b>Class</b> : <code>orderInteraction (</code></a><a class="class-head" href="#element10250">blockInteraction</a>)
</p>
</div>
<p>In an order interaction the candidate's task is to reorder the choices, the
order in which the choices are displayed initially is significant.</p>
<p>If a default value is specified for the response variable
associated with an order interaction then its value should be used to
override the order of the choices specified here.</p>
<p>By its nature, an order interaction may be difficult to render in
an unanswered state so implementors should be aware of the issues concerning
the use of default values described in the section on <a href="#element10090">responseVariable</a>s.</p>
<p>The orderInteraction must be bound to a <a href="#element10090">responseVariable</a> with a <a href="#element10054">baseType</a> of
<a href="#element10055">identifier</a> and <a href="#element10052">ordered</a> cardinality only.</p>
<p class="class-subbody"><a name="element10264"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10267">simpleChoice</a> [1..*]<br>
An
ordered list of the choices that are displayed to the user. The order is the
initial order of the choices presented to the user unless <a href="#element10265">shuffle</a> is true.</p>
<p class="class-subbody"><a name="element10265"><b>Attribute</b> : <code>shuffle [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = false<br>
If the shuffle
attribute is true then the delivery engine must randomize the order in which
the choices are initially presented subject to the <a href="#element10256">fixed</a> attribute.</p>
<p class="class-subbody"><a name="element10266"><b>Attribute</b> : <code>orientation [0..1]: </code></a><a class="class-subbody" href="#element10546">orientation</a><br>
The orientation attribute provides a hint to rendering systems
that the ordering has an inherent <a href="#element10547">vertical</a>
or <a href="#element10548">horizontal</a> interpretation.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10267"><b>Class</b> : <code>simpleChoice (</code></a><a class="class-head" href="#element10254">choice</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10263">orderInteraction</a>, <a class="class-head" href="#element10259">choiceInteraction</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10268"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10109">flowStatic</a> [*]</p>
<p>simpleChoice is a choice that contains <a href="#element10109">flowStatic</a>
objects. <span>A simpleChoice must not contain any nested interactions.</span>
</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10269"><b>Class</b> : <code>associateInteraction (</code></a><a class="class-head" href="#element10250">blockInteraction</a>)
</p>
</div>
<p>An associate interaction is a <a href="#element10250">blockInteraction</a> that
presents candidates with a number of choices and allows them to create
associations between them.</p>
<p>The associateInteraction must be bound to a <a href="#element10090">responseVariable</a> with base-type <a href="#element10061">pair</a>
and either <a href="#element10050">single</a> or <a href="#element10051">multiple</a> cardinality.</p>
<p class="class-subbody"><a name="element10270"><b>Attribute</b> : <code>shuffle [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = false<br>
If the shuffle
attribute is true then the delivery engine must randomize the order in which
the choices are presented subject to the <a href="#element10256">fixed</a>
attribute of the choice.</p>
<p class="class-subbody"><a name="element10271"><b>Attribute</b> : <code>maxAssociations [1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 1<br>
The maximum number
of associations that the candidate is allowed to make. <span>If
maxAssociations is 0 then there is no restriction.</span>
<span>If maxAssociations is greater than 1 (or 0) then the
interaction must be bound to a response with <a href="#element10051">multiple</a> cardinality.</span>
</p>
<p class="class-subbody"><a name="element10272"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10277">simpleAssociableChoice</a> [1..*]<br>
An ordered set of choices.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10273"><b>Class</b> : <code>matchInteraction (</code></a><a class="class-head" href="#element10250">blockInteraction</a>)
</p>
</div>
<p>A match interaction is a <a href="#element10250">blockInteraction</a> that presents
candidates with two sets of choices and allows them to create associates
between pairs of choices in the two sets, but not between pairs of choices
in the same set. Further restrictions can still be placed on the allowable
associations using the <a href="#element10278">matchMax</a>
and <a href="#element10258">matchGroup</a> attributes of the choices.</p>
<p>The matchInteraction must be bound to a <a href="#element10090">responseVariable</a> with base-type <a href="#element10062">directedPair</a> and either <a href="#element10050">single</a> or <a href="#element10051">multiple</a> cardinality.</p>
<p class="class-subbody"><a name="element10274"><b>Attribute</b> : <code>shuffle [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = false<br>
If the shuffle
attribute is true then the delivery engine must randomize the order in which
the choices are presented within each set, subject to the <a href="#element10256">fixed</a> attribute of the choices themselves.</p>
<p class="class-subbody"><a name="element10275"><b>Attribute</b> : <code>maxAssociations [1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 1<br>
The maximum number
of associations that the candidate is allowed to make. <span>If
maxAssociations is 0 then there is no restriction.</span>
<span>If maxAssociations is greater than 1 (or 0) then the
interaction must be bound to a response with <a href="#element10051">multiple</a> cardinality.</span>
</p>
<p class="class-subbody"><a name="element10276"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10280">simpleMatchSet</a> [2]<br>
The
two sets of choices, the first set defines the source choices and the second
set the targets.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10277"><b>Class</b> : <code>simpleAssociableChoice (</code></a><a class="class-head" href="#element10257">associableChoice</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10269">associateInteraction</a>, <a class="class-head" href="#element10280">simpleMatchSet</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10278"><b>Attribute</b> : <code>matchMax [1]: </code></a><a class="class-subbody" href="#element10542">integer</a><br>
The maximum number of choices this
choice may be associated with. <span>If matchMax is 0 then there
is no restriction.</span>
</p>
<p class="class-subbody"><a name="element10279"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10109">flowStatic</a> [*]</p>
<p>associableChoice is a choice that contains <a href="#element10109">flowStatic</a>
objects, it must <em>not</em> contain nested interactions.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10280"><b>Class</b> : <code>simpleMatchSet</code>
</a></p>
<dl>
<dt><a name="element10280">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10273">matchInteraction</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10281"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10277">simpleAssociableChoice</a> [*]<br>
An
ordered set of choices for the set.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10282"><b>Class</b> : <code>gapMatchInteraction (</code></a><a class="class-head" href="#element10250">blockInteraction</a>)
</p>
</div>
<p>A gap
<span>match</span> interaction is a <a href="#element10250">blockInteraction</a> that contains a number gaps that the candidate can
fill from an associated set of choices. The candidate must be able to review
the content with the gaps filled in context, as indicated by their choices.</p>
<p>The gapMatchInteraction must be bound to a <a href="#element10090">responseVariable</a> with base-type <a href="#element10062">directedPair</a> and either <a href="#element10050">single</a> or <a href="#element10051">multiple</a>
cardinality, depending on the number of gaps. The choices represent the
source of the pairing and gaps the targets. Each gap can have at most one
choice associated with it. The maximum occurrence of the choices is
controlled by the <a href="#element10288">matchMax</a> attribute of
<a href="#element10287">gapChoice</a>.</p>
<p class="class-subbody"><a name="element10283"><b>Attribute</b> : <code>shuffle [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = false<br>
If the
shuffle attribute is true then the delivery engine must randomize the order
in which the choices are presented (not the gaps), subject to the
<a href="#element10256">fixed</a> attribute of the choices themselves.</p>
<p class="class-subbody"><a name="element10284"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10287">gapChoice</a> [1..*]<br>
An ordered
list of choices for filling the gaps. There may be fewer choices than gaps
if required.</p>
<p class="class-subbody"><a name="element10285"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10108">blockStatic</a> [1..*]<br>
The
content of the interaction is simply a piece of content that contains the
gaps. <span>If the block contains more than one <a href="#element10286">gap</a> then the interaction must be bound to a response with
<a href="#element10051">multiple</a> cardinality.</span>
</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10286"><b>Class</b> : <code>gap (</code></a><a class="class-head" href="#element10257">associableChoice</a>, <a class="class-head" href="#element10107">inlineStatic</a>)
</p>
</div>
<p>gap is an <span>
<a href="#element10107">inlineStatic</a> element</span> that must only appear
within a <a href="#element10282">gapMatchInteraction</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10287"><b>Abstract class</b> : <code>gapChoice (</code></a><a class="class-head" href="#element10257">associableChoice</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10290">gapImg</a>, <a class="class-head" href="#element10289">gapText</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10282">gapMatchInteraction</a></code></dd>
</dl>
</div>
<p>The choices that are used to fill the gaps in a <a href="#element10282">gapMatchInteraction</a> are either simple runs of text or single image
objects, both derived from gapChoice.</p>
<p class="class-subbody"><a name="element10288"><b>Attribute</b> : <code>matchMax [1]: </code></a><a class="class-subbody" href="#element10542">integer</a><br>
The maximum number of choices this
choice may be associated with. <span>If matchMax is 0 there is
no restriction.</span>
</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10289"><b>Class</b> : <code>gapText (</code></a><a class="class-head" href="#element10287">gapChoice</a>)
</p>
</div>
<p>A simple run of text to be inserted into a gap by the user.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10290"><b>Class</b> : <code>gapImg (</code></a><a class="class-head" href="#element10287">gapChoice</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10331">graphicGapMatchInteraction</a></code></dd>
</dl>
</div>
<p>A gap image contains a single image object to be inserted into a gap by the candidate.</p>
<p class="class-subbody"><a name="element10291"><b>Attribute</b> : <code>objectLabel [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
An
optional label for the image object to be inserted.</p>
<p class="class-subbody"><a name="element10292"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10158">object</a> [1]</p>
</div>
<h3><a name="section10063">7.2. Text-based Interactions</a></h3>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10293"><b>Class</b> : <code>inlineChoiceInteraction (</code></a><a class="class-head" href="#element10249">inlineInteraction</a>)
</p>
</div>
<p>A inline choice is an <a href="#element10249">inlineInteraction</a> that presents
the user with a set of choices, each of which is a simple piece of text. The
candidate's task is to select one of the choices. Unlike the <a href="#element10259">choiceInteraction</a>, the delivery engine must allow the candidate to
review their choice within the context of the surrounding text.</p>
<p>The inlineChoiceInteraction must be bound to a <a href="#element10090">responseVariable</a> with a <a href="#element10054">baseType</a> of
<a href="#element10055">identifier</a> and <a href="#element10050">single</a> cardinality only.</p>
<p class="class-subbody"><a name="element10294"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10296">inlineChoice</a> [1..*]<br>
An
ordered list of the choices that are displayed to the user. The order is the
order of the choices presented to the user unless <a href="#element10295">shuffle</a> is true.</p>
<p class="class-subbody"><a name="element10295"><b>Attribute</b> : <code>shuffle [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = false<br>
If the shuffle
attribute is true then the delivery engine must randomize the order in which
the choices are presented subject to the <a href="#element10256">fixed</a> attribute.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10296"><b>Class</b> : <code>inlineChoice (</code></a><a class="class-head" href="#element10254">choice</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10293">inlineChoiceInteraction</a></code></dd>
</dl>
</div>
<p>A simple run of text to be displayed to the user.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10297"><b>Abstract class</b> : <code>stringInteraction</code>
</a></p>
<dl>
<dt><a name="element10297">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10304">extendedTextInteraction</a>, <a class="class-head" href="#element10303">textEntryInteraction</a></code></dd>
</dl>
</div>
<p>String interactions can be bound to numeric response variables, instead of
strings, if desired.</p>
<p class="class-subbody"><a name="element10298"><b>Attribute</b> : <code>base [0..1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 10<br>
If the
string interaction is bound to a numeric response variable then the base
attribute must be used to set the <span>number</span> base in
which to interpret the value entered by the candidate.</p>
<p class="class-subbody"><a name="element10299"><b>Attribute</b> : <code>stringIdentifier [0..1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
If the
string interaction is bound to a numeric response variable then the actual
string entered by the candidate can also be captured by binding the
interaction to a <em>second</em> response variable (of base-type
<a href="#element10059">string</a>).</p>
<p class="class-subbody"><a name="element10300"><b>Attribute</b> : <code>expectedLength [0..1]: </code></a><a class="class-subbody" href="#element10542">integer</a><br>
The
expectedLength attribute provides a hint to the candidate as to the expected
overall length of the desired response. A <a href="#term10017">Delivery Engine</a>
should use the value of this attribute to set the size of the response box,
where applicable.</p>
<p class="class-subbody"><a name="element10301"><b>Attribute</b> : <code>patternMask [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
If given, the
pattern mask specifies a regular expression that the candidate's response
must match in order to be considered valid. The regular expression language
used is defined in Appendix F of <a href="#ref_XML_SCHEMA2">[XML_SCHEMA2]</a>.</p>
<p class="class-subbody"><a name="element10302"><b>Attribute</b> : <code>placeholderText [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
In visual environments, string interactions are typically represented by
empty boxes into which the candidate writes or types. However, in speech
based environments it is helpful to have some placeholder text that can be
used to vocalize the interaction. Delivery engines should use the value of
this attribute (if provided) instead of their default placeholder text when
this is required. Implementors should be aware of the issues concerning the
use of default values described in the section on <a href="#element10090">responseVariable</a>s. </p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10303"><b>Class</b> : <code>textEntryInteraction (</code></a><a class="class-head" href="#element10249">inlineInteraction</a>, <a class="class-head" href="#element10297">stringInteraction</a>)
</p>
</div>
<p>A textEntry interaction is an <a href="#element10249">inlineInteraction</a> that
obtains a simple piece of text from the candidate. Like <a href="#element10293">inlineChoiceInteraction</a>, the delivery engine must allow the
candidate to review their choice within the context of the surrounding text.</p>
<p>The textEntryInteraction must be bound to a <a href="#element10090">responseVariable</a> with <a href="#element10050">single</a>
cardinality only. The <a href="#element10054">baseType</a> must be one of
<a href="#element10059">string</a>, <a href="#element10057">integer</a> or <a href="#element10058">float</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10304"><b>Class</b> : <code>extendedTextInteraction (</code></a><a class="class-head" href="#element10250">blockInteraction</a>, <a class="class-head" href="#element10297">stringInteraction</a>)
</p>
</div>
<p>An extended text interaction is a <a href="#element10250">blockInteraction</a> that
allows the candidate to enter an extended amount of text.</p>
<p>The extendedTextInteraction must be bound to a <a href="#element10090">responseVariable</a> with <a href="#element10054">baseType</a> of
<a href="#element10059">string</a>, <a href="#element10057">integer</a> or <a href="#element10058">float</a>. When
bound to response variable with <a href="#element10050">single</a>
cardinality a single string of text is required from the candidate. When
bound to a response variable with <a href="#element10051">multiple</a>
or <a href="#element10052">ordered</a> cardinality several
<em>separate</em> text strings may be required, see <a href="#element10305">maxStrings</a> below.</p>
<p class="class-subbody"><a name="element10305"><b>Attribute</b> : <code>maxStrings [0..1]: </code></a><a class="class-subbody" href="#element10542">integer</a><br>
The maxStrings
attribute is required when the interaction is bound to a response variable
that is a container. A <a href="#term10017">Delivery Engine</a> must use the value
of this attribute to control the maximum number of separate strings accepted
from the candidate. When multiple strings are accepted, <a href="#element10300">expectedLength</a> applies to <em>each</em> string.</p>
<p class="class-subbody"><a name="element10306"><b>Attribute</b> : <code>expectedLines [0..1]: </code></a><a class="class-subbody" href="#element10542">integer</a><br>
The expectedLines attribute provides a hint to the candidate as to the
expected number of lines of input required. A <a href="#term10017">Delivery Engine</a> should use the value of this attribute to set the
size of the response box, where applicable. </p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10307"><b>Class</b> : <code>hottextInteraction (</code></a><a class="class-head" href="#element10250">blockInteraction</a>)
</p>
</div>
<p>The hottext interaction presents a set of choices to the candidate
represented as selectable runs of text embedded within a surrounding
context, such as a simple passage of text. Like <a href="#element10259">choiceInteraction</a>, the candidate's task is to select one or more of
the choices, up to a maximum of <a href="#element10308">maxChoices</a>. The interaction is initialized from
the <a href="#element10046">defaultValue</a> of the associated <a href="#element10090">responseVariable</a>, a NULL value indicating that no choices are
selected (the usual case).
</p>
<p>The hottextInteraction must be bound to a <a href="#element10090">responseVariable</a> with a <a href="#element10054">baseType</a> of
<a href="#element10055">identifier</a> and <a href="#element10050">single</a> or <a href="#element10051">multiple</a> cardinality.</p>
<p class="class-subbody"><a name="element10308"><b>Attribute</b> : <code>maxChoices [1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 1<br>
The maximum number of
choices that can be selected by the candidate. <span>If
matchChoices is 0 there is no restriction.</span>
<span>If maxChoices is greater than 1 (or 0) then the
interaction must be bound to a response with <a href="#element10051">multiple</a> cardinality.</span>
</p>
<p class="class-subbody"><a name="element10309"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10108">blockStatic</a> [1..*]<br>
The
content of the interaction is simply a piece of content, such as a simple
passage of text, that contains the <a href="#element10310">hottext</a> areas.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10310"><b>Class</b> : <code>hottext (</code></a><a class="class-head" href="#element10254">choice</a>, <a class="class-head" href="#element10109">flowStatic</a>, <a class="class-head" href="#element10107">inlineStatic</a>)
</p>
</div>
<p>A hottext area is used within the content of an <a href="#element10307">hottextInteraction</a> to provide the individual choices. It <em>must not</em> contain any <span>nested</span>
<a href="#element10247">interaction</a>s or other <a href="#element10310">hottext</a> areas.</p>
<p class="class-subbody"><a name="element10311"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10107">inlineStatic</a> [*]</p>
</div>
<h3><a name="section10064">7.3. Graphical Interactions</a></h3>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10312"><b>Abstract class</b> : <code>hotspot</code>
</a></p>
<dl>
<dt><a name="element10312">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10317">associableHotspot</a>, <a class="class-head" href="#element10316">hotspotChoice</a></code></dd>
</dl>
</div>
<p>Some of the graphic interactions involve images with specially defined areas
or <em>hotspots</em>.</p>
<p class="class-subbody"><a name="element10313"><b>Attribute</b> : <code>shape [1]: </code></a><a class="class-subbody" href="#element10550">shape</a><br>
The shape of the hotspot.</p>
<p class="class-subbody"><a name="element10314"><b>Attribute</b> : <code>coords [1]: </code></a><a class="class-subbody" href="#element10538">coords</a><br>
The size and position of the hotspot,
interpreted in conjunction with the shape.</p>
<p class="class-subbody"><a name="element10315"><b>Attribute</b> : <code>hotspotLabel [0..1]: </code></a><a class="class-subbody" href="#element10557">string256</a><br>
The
alternative text for this (hot) area of the image, if specified it
<em>must</em> be treated in the same way as alternative text for
<a href="#element10216">img</a>. For hidden hotspots this label is ignored.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10316"><b>Class</b> : <code>hotspotChoice (</code></a><a class="class-head" href="#element10254">choice</a>, <a class="class-head" href="#element10312">hotspot</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10321">hotspotInteraction</a>, <a class="class-head" href="#element10326">graphicOrderInteraction</a></code></dd>
</dl>
</div>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10317"><b>Class</b> : <code>associableHotspot (</code></a><a class="class-head" href="#element10257">associableChoice</a>, <a class="class-head" href="#element10312">hotspot</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10328">graphicAssociateInteraction</a>, <a class="class-head" href="#element10331">graphicGapMatchInteraction</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10318"><b>Attribute</b> : <code>matchMax [1]: </code></a><a class="class-subbody" href="#element10542">integer</a><br>
The maximum number of choices this
choice may be associated with. <span>If matchMax is 0 there is
no restriction.</span>
</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10319"><b>Abstract class</b> : <code>graphicInteraction (</code></a><a class="class-head" href="#element10250">blockInteraction</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10328">graphicAssociateInteraction</a>, <a class="class-head" href="#element10331">graphicGapMatchInteraction</a>, <a class="class-head" href="#element10326">graphicOrderInteraction</a>, <a class="class-head" href="#element10321">hotspotInteraction</a>, <a class="class-head" href="#element10324">selectPointInteraction</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10320"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10158">object</a> [1]<br>
Each graphical
interaction has an associated image which is given as an object that must be
of an <em>image</em> type, as specified by the <a href="#element10161">type</a> attribute.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10321"><b>Class</b> : <code>hotspotInteraction (</code></a><a class="class-head" href="#element10319">graphicInteraction</a>)
</p>
</div>
<p>A hotspot interaction is a graphical interaction with a corresponding set of
choices that are defined as areas of the graphic image. The candidate's task
is to select one or more of the areas (hotspots). The hotspot interaction
should only be used when the spatial relationship of the choices with
respect to each other (as represented by the graphic image) is important to
the needs of the item. Otherwise, <a href="#element10259">choiceInteraction</a>
should be used instead with separate material for each option.</p>
<p>The delivery engine must clearly indicate the selected area(s) of the image
and may also indicate the unselected areas as well. Interactions with hidden
hotspots are achieved with the <a href="#element10324">selectPointInteraction</a>.</p>
<p>The hotspot interaction must be bound to a <a href="#element10090">responseVariable</a> with a <a href="#element10054">baseType</a> of
<a href="#element10055">identifier</a> and <a href="#element10050">single</a> or <a href="#element10051">multiple</a> cardinality.</p>
<p class="class-subbody"><a name="element10322"><b>Attribute</b> : <code>maxChoices [1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 1<br>
The maximum number of
choices that the candidate is allowed to select. <span>If
maxChoices is 0 there is no restriction.</span>
<span>If maxChoices is greater than 1 (or 0) then the
interaction must be bound to a response with <a href="#element10051">multiple</a> cardinality.</span>
</p>
<p class="class-subbody"><a name="element10323"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10316">hotspotChoice</a> [1..*] {ordered}<br>
The hotspots that define the choices that can be
selected by the candidate. If the delivery system does not support
pointer-based selection then the order in which the choices are given must
be the order in which they are offered to the candidate for selection. For
example, the 'tab order' in simple keyboard navigation. If hotspots overlap
then those listed first hide overlapping hotspots that appear later. The
default hotspot, if defined, must appear last.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10324"><b>Class</b> : <code>selectPointInteraction (</code></a><a class="class-head" href="#element10319">graphicInteraction</a>)
</p>
</div>
<p>Like <a href="#element10321">hotspotInteraction</a>, a select point interaction is
a graphic interaction. The candidate's task is to select one or more points.
The associated response <em>may</em> have an <a href="#element10081">areaMapping</a> that scores the response on the basis of comparing it
against predefined areas but the delivery engine <em>must not</em> indicate
these areas of the image. Only the actual point(s) selected by the candidate
shall be indicated.</p>
<p>The select point interaction must be bound to a <a href="#element10090">responseVariable</a> with a <a href="#element10054">baseType</a> of
<a href="#element10060">point</a> and <a href="#element10050">single</a> or <a href="#element10051">multiple</a> cardinality.</p>
<p class="class-subbody"><a name="element10325"><b>Attribute</b> : <code>maxChoices [1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 1<br>
This attribute is
interpreted as the maximum number of points that the candidate is allowed to
select. <span>If maxChoices is 0 there is no restriction.</span>
<span>If maxChoices is greater than 1 (or 0) then the
interaction must be bound to a response with <a href="#element10051">multiple</a> cardinality.</span>
</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10326"><b>Class</b> : <code>graphicOrderInteraction (</code></a><a class="class-head" href="#element10319">graphicInteraction</a>)
</p>
</div>
<p>A graphic order interaction is a graphic interaction with a corresponding set
of choices that are defined as areas of the graphic image. The candidate's
task is to impose an ordering on the areas (hotspots). The order hotspot
interaction should only be used when the spacial relationship of the choices
with respect to each other (as represented by the graphic image) is
important to the needs of the item. Otherwise, <a href="#element10263">orderInteraction</a> should be used instead with separate material for
each option.</p>
<p>The delivery engine must clearly indicate all defined area(s) of the image.</p>
<p>The order hotspot interaction must be bound to a <a href="#element10090">responseVariable</a> with a <a href="#element10054">baseType</a> of
<a href="#element10055">identifier</a> and <a href="#element10052">ordered</a> cardinality.</p>
<p class="class-subbody"><a name="element10327"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10316">hotspotChoice</a> [1..*]<br>
The
hotspots that define the choices that are to be ordered by the candidate. If
the delivery system does not support pointer-based selection then the order
in which the choices are given must be the order in which they are offered
to the candidate for selection. For example, the 'tab order' in simple
keyboard navigation.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10328"><b>Class</b> : <code>graphicAssociateInteraction (</code></a><a class="class-head" href="#element10319">graphicInteraction</a>)
</p>
</div>
<p>A graphic associate interaction is a graphic interaction with a corresponding
set of choices that are defined as areas of the graphic image. The
candidate's task is to associate the areas (hotspots) with each other. The
graphic associate interaction should only be used when the graphical
relationship of the choices with respect to each other (as represented by
the graphic image) is important to the needs of the item. Otherwise,
<a href="#element10269">associateInteraction</a> should be used instead with
separate <a href="#term10026">Material</a> for each option.</p>
<p>The delivery engine must clearly indicate all defined area(s) of the image.</p>
<p>The associateHotspotInteraction must be bound to a <a href="#element10090">responseVariable</a> with base-type <a href="#element10061">pair</a>
and either <a href="#element10050">single</a> or <a href="#element10051">multiple</a> cardinality.</p>
<p class="class-subbody"><a name="element10329"><b>Attribute</b> : <code>maxAssociations [1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 1<br>
The maximum number
of associations that the candidate is allowed to make. <span>If
maxAssociations is 0 there is no restriction.</span>
<span>If maxAssociations is greater than 1 (or 0) then the
interaction must be bound to a response with <a href="#element10051">multiple</a> cardinality.</span>
</p>
<p class="class-subbody"><a name="element10330"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10317">associableHotspot</a> [1..*]<br>
The hotspots that define the choices that are to be
associated by the candidate. If the delivery system does not support
pointer-based selection then the order in which the choices are given must
be the order in which they are offered to the candidate for selection. For
example, the 'tab order' in simple keyboard navigation.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10331"><b>Class</b> : <code>graphicGapMatchInteraction (</code></a><a class="class-head" href="#element10319">graphicInteraction</a>)
</p>
</div>
<p>A graphic gap-match interaction is a graphical interaction with a set of gaps
that are defined as areas (hotspots) of the graphic image and an additional
set of gap choices that are defined outside the image. The candidate must
associate the gap choices with the gaps in the image and be able to review
the image with the gaps filled in context, as indicated by their choices.
Care should be taken when designing these interactions to ensure that the
gaps in the image are a suitable size to receive the required gap choices.
It must be clear to the candidate which hotspot each choice has been
associated with. When associated, choices must appear wholly inside the gaps
if at all possible and, where overlaps are required, should not hide each
other completely. If the candidate indicates the association by positioning
the choice over the gap (e.g., drag and drop) the system should 'snap' it to
the nearest position that satisfies these requirements. </p>
<p>The graphicGapMatchInteraction must be bound to a <a href="#element10090">responseVariable</a> with base-type <a href="#element10062">directedPair</a> and
<a href="#element10051">multiple</a> cardinality. The choices
represent the source of the pairing and the gaps in the image (the hotspots)
the targets. Unlike the simple <a href="#element10282">gapMatchInteraction</a>,
each gap can have several choices associated with it if desired,
furthermore, the same choice may be associated with an <a href="#element10317">associableHotspot</a> multiple times, in which case the corresponding
directed pair appears multiple times in the value of the response variable.</p>
<p class="class-subbody"><a name="element10332"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10290">gapImg</a> [1..*]<br>
An ordered list of
choices for filling the gaps. There may be fewer choices than gaps if required.</p>
<p class="class-subbody"><a name="element10333"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10317">associableHotspot</a> [1..*]<br>
The hotspots that define the gaps that are to be filled
by the candidate. If the delivery system does not support pointer-based
selection then the order in which the gaps is given must be the order in
which they are offered to the candidate for selection. For example, the 'tab
order' in simple keyboard navigation. The default hotspot must not be defined.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10334"><b>Class</b> : <code>positionObjectInteraction (</code></a><a class="class-head" href="#element10247">interaction</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10338">positionObjectStage</a></code></dd>
</dl>
</div>
<p>The position object interaction consists of a single image which must be
positioned on another graphic image (the stage) by the candidate. Like
<a href="#element10324">selectPointInteraction</a>, the associated response
<em>may</em> have an <a href="#element10081">areaMapping</a> that scores the
response on the basis of comparing it against predefined areas but the
delivery engine <em>must not</em> indicate these areas of the stage. Only
the actual position(s) selected by the candidate shall be indicated.</p>
<p>The position object interaction must be bound to a <a href="#element10090">responseVariable</a> with a <a href="#element10054">baseType</a> of
<a href="#element10060">point</a> and <a href="#element10050">single</a> or <a href="#element10051">multiple</a>
cardinality. The point records the coordinates, with respect to the stage,
of the center point of the image being positioned.</p>
<p class="class-subbody"><a name="element10335"><b>Attribute</b> : <code>centerPoint [0..2]: </code></a><a class="class-subbody" href="#element10542">integer</a><br>
The centrePoint attribute defines the point on the image being positioned
that is to be treated as the center as an offset from the top-left corner of
the image in horizontal, vertical order. By default this is the center of
the image's bounding rectangle.</p>
<p>The stage on which the image is to be positioned may be shared amongst
several position object interactions and is therefore defined in a class of
its own: <a href="#element10338">positionObjectStage</a>.</p>
<p class="class-subbody"><a name="element10336"><b>Attribute</b> : <code>maxChoices [1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 1<br>
The maximum number of
positions (on the stage) that the image can be placed. <span>If
matchChoices is 0 there is no limit.</span>
<span>If maxChoices is greater than 1 (or 0) then the
interaction must be bound to a response with <a href="#element10051">multiple</a> cardinality.</span>
</p>
<p class="class-subbody"><a name="element10337"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10158">object</a> [1]<br>
The image to be
positioned on the stage by the candidate.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10338"><b>Class</b> : <code>positionObjectStage (</code></a><a class="class-head" href="#element10105">block</a>)
</p>
</div>
<p class="class-subbody"><a name="element10339"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10158">object</a> [1]<br>
The image to be used
as a stage onto which individual <a href="#element10334">positionObjectInteraction</a>s allow the candidate to place their objects.</p>
<p class="class-subbody"><a name="element10340"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10334">positionObjectInteraction</a> [1..*]</p>
</div>
<h3><a name="section10065">7.4. Miscellaneous Interactions</a></h3>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10341"><b>Class</b> : <code>sliderInteraction (</code></a><a class="class-head" href="#element10250">blockInteraction</a>)
</p>
</div>
<p>The slider interaction presents the candidate with a control for selecting a
numerical value between a lower and upper bound. It must be bound to a
response variable with <a href="#element10050">single</a> cardinality
with a base-type of either <a href="#element10057">integer</a> or
<a href="#element10058">float</a>.</p>
<p class="class-subbody"><a name="element10342"><b>Attribute</b> : <code>lowerBound [1]: </code></a><a class="class-subbody" href="#element10540">float</a><br>
If the associated
response variable is of type <a href="#element10057">integer</a> then the
lowerBound must be rounded down to the greatest integer less than or equal
to the value given.</p>
<p class="class-subbody"><a name="element10343"><b>Attribute</b> : <code>upperBound [1]: </code></a><a class="class-subbody" href="#element10540">float</a><br>
If the associated
response variable is of type <a href="#element10057">integer</a> then the
upperBound must be rounded up to the least integer greater than or equal to
the value given.</p>
<p class="class-subbody"><a name="element10344"><b>Attribute</b> : <code>step [0..1]: </code></a><a class="class-subbody" href="#element10542">integer</a><br>
The steps that the
control moves in. For example, if the <a href="#element10342">lowerBound</a> and <a href="#element10343">upperBound</a> are [0,10] and step is 2 then the
response would be constrained to the set of values {0,2,4,6,8,10}. If bound
to an <a href="#element10057">integer</a> response the default step is 1,
otherwise the slider is assumed to operate on an approximately continuous scale.</p>
<p class="class-subbody"><a name="element10345"><b>Attribute</b> : <code>stepLabel [0..1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = false<br>
By default, sliders are labeled only at their ends. The
stepLabel attribute controls whether or not each step on the slider should
also be labeled. It is unlikely that delivery engines will be able to
guarantee to label steps so this attribute should be treated only as request.</p>
<p class="class-subbody"><a name="element10346"><b>Attribute</b> : <code>orientation [0..1]: </code></a><a class="class-subbody" href="#element10546">orientation</a><br>
The
orientation attribute provides a hint to rendering systems that the slider
is being used to indicate the value of a quantity with an inherent
<a href="#element10547">vertical</a> or <a href="#element10548">horizontal</a> interpretation. For example, an interaction
that is used to indicate the value of height might set the orientation to
vertical to indicate that rendering it horizontally could spuriously
increase the difficulty of the item.</p>
<p class="class-subbody"><a name="element10347"><b>Attribute</b> : <code>reverse [0..1]: </code></a><a class="class-subbody" href="#element10537">boolean</a><br>
The reverse
attribute provides a hint to rendering systems that the slider is being used
to indicate the value of a quantity for which the normal sense of the upper
and lower bounds is reversed. For example, an interaction that is used to
indicate a depth below sea level might specify both a vertical orientation
and set reverse.</p>
<p>Note that a slider interaction does not have a default or initial position
except where specified by a default value for the associated <a href="#element10090">responseVariable</a>. The currently selected value, if any,
<em>must</em> be clearly indicated to the candidate .</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10348"><b>Class</b> : <code>drawingInteraction (</code></a><a class="class-head" href="#element10250">blockInteraction</a>)
</p>
</div>
<p>The drawing interaction allows the candidate to use a common set of drawing
tools to modify a given graphical image (the canvas). It must be bound to a
<a href="#element10090">responseVariable</a> with base-type <a href="#element10064">file</a> and <a href="#element10050">single</a>
cardinality. The result is a file in the same format as the original image.</p>
<p class="class-subbody"><a name="element10349"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10158">object</a> [1]<br>
The image that acts as
the canvas on which the drawing takes place is given as an object which must
be of an <em>image</em> type, as specified by the <a href="#element10161">type</a> attribute.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10350"><b>Class</b> : <code>uploadInteraction (</code></a><a class="class-head" href="#element10250">blockInteraction</a>)
</p>
</div>
<p>The upload interaction allows the candidate to upload a pre-prepared file
representing their response. It must be bound to a <a href="#element10090">responseVariable</a> with base-type <a href="#element10064">file</a>
and <a href="#element10050">single</a> cardinality.</p>
<p class="class-subbody"><a name="element10351"><b>Attribute</b> : <code>type [0..1]: </code></a><a class="class-subbody" href="#element10545">mimeType</a><br>
The expected
mime-type of the uploaded file.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10352"><b>Class</b> : <code>customInteraction (</code></a><a class="class-head" href="#element10105">block</a>, <a class="class-head" href="#element10106">flow</a>, <a class="class-head" href="#element10247">interaction</a>)
</p>
</div>
<p>The custom interaction provides an opportunity for extensibility of this
specification to include support for interactions not currently documented.</p>
</div>
<h3><a name="section10066">7.5. Alternative Ways to End an Attempt</a></h3>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10353"><b>Class</b> : <code>endAttemptInteraction (</code></a><a class="class-head" href="#element10249">inlineInteraction</a>)
</p>
</div>
<p>The end attempt interaction is a special type of interaction which allows
item authors to provide the candidate with control over the way in which the
candidate terminates an attempt. The candidate can use the interaction to
terminate the attempt (triggering response processing) immediately,
typically to request a hint. It must be bound to a <a href="#element10090">responseVariable</a> with base-type <a href="#element10056">boolean</a> and <a href="#element10050">single</a> cardinality.</p>
<p>If the candidate invokes response processing using an <a href="#element10353">endAttemptInteraction</a> then the associated response variable is set
to true. If response processing is invoked in any other way, either through
a different <a href="#element10353">endAttemptInteraction</a> or through the
default method for the delivery engine, then the associated response
variable is set to false. The default value of the response variable is
always ignored.</p>
<p class="class-subbody"><a name="element10354"><b>Attribute</b> : <code>title [1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
The string that should be
displayed to the candidate as a prompt for ending the attempt using this
interaction. This should be short, preferably one word. A typical value
would be "Hint". For example, in a graphical environment it would be
presented as the label on a button that, when pressed, ends the attempt.</p>
</div>
<h2><a name="section10067">8. Response Processing</a></h2>
<p><a name="section10067">Response processing is the process by which the </a><a href="#term10017">Delivery Engine</a>
assigns outcomes to the <a href="#element10027">itemSession</a> based on the candidate's
responses. The outcomes may be used to provide feedback to the candidate. Feedback
is either provided immediately following the end of the candidate's attempt or it is
provided at some later time, perhaps as part of a summary report on the <a href="#element10027">itemSession</a>.</p>
<p>The end of an attempt, and therefore response processing, must only take place in
direct response to a user action or in response to some expected event, such as the
end of a test. An <a href="#element10027">itemSession</a> that enters the suspended state
may have values for the <a href="#element10090">responseVariable</a>s that have yet to be
submitted for response processing.</p>
<p>For a <a href="#term10029">Non-adaptive Item</a> the values of the <a href="#element10095">outcomeVariable</a>s are reset to their default values (or NULL if no default
is given) before <em>each</em> invocation of response processing. However, although
a <a href="#term10017">Delivery Engine</a>
<em>may</em> invoke response processing multiple times for a <a href="#term10029">Non-adaptive Item</a> it <strong>must</strong> only report the <em>first</em> set
of outcomes produced or limit the number of attempts to some predefined limit agreed
outside the scope of this specification.</p>
<p>For an <a href="#term10004">Adaptive Item</a> the values of the <a href="#element10095">outcomeVariable</a>s are <strong>not</strong> reset to their defaults. A
<a href="#term10017">Delivery Engine</a> that supports <a href="#term10004">Adaptive Item</a>s
<em>must</em> allow the candidate to revise and submit their responses for response
processing and <em>must</em> only report the <em>last</em> set of outcomes produced.
Furthermore, it must present <strong>all</strong> applicable modal
<strong>and</strong> integrated feedback to the candidate. Subsequent response
processing may take into consideration the feedback seen by the candidate when
updating the session outcomes. An adaptive item can signal to the delivery engine
that the candidate has completed the interaction and no more attempts are to be
allowed by setting the built-in outcome variable <a href="#element10029">completionStatus</a> to <em>complete</em>.</p>
<p align="center"><img src="imsqti_infov2p0_files/feedback.png"></p>
<p align="center">Feedback Followed by Further Interaction</p>
<h3><a name="section10068">8.1. Response Processing Templates</a></h3>
<p><a name="section10068">Response processing involves the application of a set of </a><a href="#element10359">responseRule</a>s, including the testing of <a href="#element10360">responseCondition</a>s and the evaluation of expressions involving the item
variables. For delivery engines that are only designed to support very simple
use cases the implementation of a system for carrying out this evaluation,
conditional testing and processing may pose a barrier to the adoption of the specification.</p>
<p>To alleviate this problem, the implementation of generalized response processing
is an optional feature. Engines that don't support it can instead implement a
smaller number of standard response processors called <em>response processing
templates</em> described below. These templates are described using the
processing language defined in this specification and are distributed (in XML
form) along with it. Delivery engines that support generalized response
processing do not need to implement special mechanisms to support them as a
template file can be parsed directly while processing the <a href="#element10010">assessmentItem</a> that refers to it.</p>
<p>Delivery engines that do not support generalized response processing but do
support response processing mechanisms that go beyond the standard templates
described below
<span>should, where possible,</span> define templates of their
own. Authors wishing to write items for those delivery engines can then refer to
these custom templates. Publishing these custom templates will then ensure that
these items can be used with delivery engines that do support generalized
response processing.</p>
<h4><a name="section10069">8.1.1. Standard Templates</a></h4>
<p><a name="auxFile.matchCorrect"><b>Match Correct</b><br>
<code></code></a><a href="http://www.imsglobal.org/question/qti_v2p0/rptemplates/match_correct.xml">rptemplates/match_correct.xml</a></p>
<p>Full template URI: <code>http://www.imsglobal.org/question/qti_v2p0/rptemplates/match_correct</code>
</p>
<p>The match correct response processing template uses the <a href="#element10436">match</a> operator to match the value of a response variable
<em>RESPONSE</em> with its correct value. It sets the outcome variable
<em>SCORE</em> to either 0 or 1 depending on the outcome of the test. A
response variable with called <em>RESPONSE</em> must have been declared
and have an associated correct value. Similarly, the outcome variable
<em>SCORE</em> must also have been declared. The template applies to
responses of <em>any</em>
<a href="#element10054">baseType</a> and <a href="#element10049">cardinality</a>
though bear in mind the limitations of matching more complex data types.
This template shouldn't be used for testing the numerical equality of
responses with base-type <a href="#element10058">float</a>.</p>
<p>Note that this template always sets a value for <em>SCORE</em>, even if
no <em>RESPONSE</em> was given.</p>
<p><a name="auxFile.mapResponse"><b>Map Response</b><br>
<code></code></a><a href="http://www.imsglobal.org/question/qti_v2p0/rptemplates/map_response.xml">rptemplates/map_response.xml</a></p>
<p>Full template URI: <code>http://www.imsglobal.org/question/qti_v2p0/rptemplates/map_response</code>
</p>
<p>The map response processing template uses the <a href="#element10391">mapResponse</a> operator to map the value of a response variable
<em>RESPONSE</em> onto a value for the outcome <em>SCORE</em>. Both
variables must have been declared and <em>RESPONSE</em> must have an
associated <a href="#element10066">mapping</a>. The template applies to
responses of <em>any</em>
<a href="#element10054">baseType</a> and <a href="#element10049">cardinality</a>.
See the notes about <a href="#element10391">mapResponse</a> for details of its
behavior when applied to containers.</p>
<p>If <em>RESPONSE</em> was NULL the <em>SCORE</em> is set to 0.</p>
<p><a name="auxFile.mapResponsePoint"><b>Map Response Point</b><br>
<code></code></a><a href="http://www.imsglobal.org/question/qti_v2p0/rptemplates/map_response_point.xml">rptemplates/map_response_point.xml</a></p>
<p>Full template URI: <code>http://www.imsglobal.org/question/qti_v2p0/rptemplates/map_response_point</code>
</p>
<p>The map response point processing template uses the <a href="#element10393">mapResponsePoint</a> operator to map the value of a response
variable <em>RESPONSE</em> onto a value for the outcome <em>SCORE</em>.
Both variables must been declared and <em>RESPONSE</em> must have
<a href="#element10054">baseType</a>
<a href="#element10060">point</a>. See the notes about <a href="#element10393">mapResponsePoint</a> for details of its behavior when applied to containers.</p>
<p>If <em>RESPONSE</em> was NULL the <em>SCORE</em> is set to 0.</p>
<h3><a name="section10070">8.2. Generalized Response Processing</a></h3>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10355"><b>Class</b> : <code>responseProcessing</code>
</a></p>
<dl>
<dt><a name="element10355">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10010">assessmentItem</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10356"><b>Attribute</b> : <code>template [0..1]: </code></a><a class="class-subbody" href="#element10558">uri</a><br>
If a template
identifier is given it may be used to locate an externally defined
responseProcessing template. The rules obtained from the external template
may be used instead of the rules defined within the item itself, though if
both are given the internal rules are still preferred.</p>
<p class="class-subbody"><a name="element10357"><b>Attribute</b> : <code>templateLocation [0..1]: </code></a><a class="class-subbody" href="#element10558">uri</a><br>
In practice,
the <a href="#element10356">template</a> attribute may well
contain a URN or the URI of a template stored on a remote web server, such
as the standard response processing templates defined by this specification.
When processing an <a href="#element10010">assessmentItem</a> tools working
offline will not be able to obtain the template from a URN or remote URI.
The templateLocation attribute provides an alternative URI, typically a
relative URI to be resolved relative to the location of the assessmentItem
itself, that can be used to obtain a copy of the response processing template.</p>
<p class="class-subbody"><a name="element10358"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10359">responseRule</a> [*]</p>
<p>The mapping from values assigned to <a href="#term10034">Response Variable</a>s by
the candidate onto appropriate values for the item's <a href="#term10032">Outcome Variable</a>s is achieved through a number of rules.</p>
<p align="center"><img src="imsqti_infov2p0_files/response_processing.png"></p>
<p align="center">Response Processing</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10359"><b>Abstract class</b> : <code>responseRule</code>
</a></p>
<dl>
<dt><a name="element10359">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10375">exitResponse</a>, <a class="class-head" href="#element10360">responseCondition</a>, <a class="class-head" href="#element10372">setOutcomeValue</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10370">responseElse</a>, <a class="class-head" href="#element10364">responseIf</a>, <a class="class-head" href="#element10355">responseProcessing</a>, <a class="class-head" href="#element10367">responseElseIf</a></code></dd>
</dl>
</div>
<p>A response rule is either a <a href="#element10360">responseCondition</a> or a
simple action. Response rules define the light-weight programming language
necessary for deriving outcomes from responses (i.e., scoring). Note that
this programming language contains a minimal number of control structures,
more complex scoring rules must be coded in other languages and referred to
using <span>a <a href="#element10496">customOperator</a>
</span>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10360"><b>Class</b> : <code>responseCondition (</code></a><a class="class-head" href="#element10359">responseRule</a>)
</p>
</div>
<p class="class-subbody"><a name="element10361"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10364">responseIf</a> [1]</p>
<p class="class-subbody"><a name="element10362"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10367">responseElseIf</a> [*]</p>
<p class="class-subbody"><a name="element10363"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10370">responseElse</a> [0..1]</p>
<p>If the expression given in a responseIf or responseElseIf evaluates to true
then the sub-rules contained within it are followed and any following
responseElseIf or responseElse parts are ignored for this response condition.</p>
<p>If the expression given in a responseIf or responseElseIf does not evaluate
to true then consideration passes to the next responseElseIf or, if there
are no more responseElseIf parts then the sub-rules of the responseElse are
followed (if specified).</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10364"><b>Class</b> : <code>responseIf</code>
</a></p>
<dl>
<dt><a name="element10364">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10360">responseCondition</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10365"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p class="class-subbody"><a name="element10366"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10359">responseRule</a> [*]</p>
<p>A responseIf part consists of an expression which must have an effective
<a href="#element10054">baseType</a> of <a href="#element10056">boolean</a>
and <a href="#element10050">single</a> cardinality. For more
information about the runtime data model employed see <a href="#section10072">Expressions</a>. It also contains a set of sub-rules. If the expression
is true then the sub-rules are processed, otherwise they are skipped
(including if the expression is NULL) and the following <a href="#element10367">responseElseIf</a> or <a href="#element10370">responseElse</a> parts (if any)
are considered instead.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10367"><b>Class</b> : <code>responseElseIf</code>
</a></p>
<dl>
<dt><a name="element10367">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10360">responseCondition</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10368"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p class="class-subbody"><a name="element10369"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10359">responseRule</a> [*]</p>
<p>responseElseIf is defined in an identical way to <a href="#element10364">responseIf</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10370"><b>Class</b> : <code>responseElse</code>
</a></p>
<dl>
<dt><a name="element10370">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10360">responseCondition</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10371"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10359">responseRule</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10372"><b>Class</b> : <code>setOutcomeValue (</code></a><a class="class-head" href="#element10359">responseRule</a>)
</p>
</div>
<p class="class-subbody"><a name="element10373"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The <a href="#element10095">outcomeVariable</a> to be set.</p>
<p class="class-subbody"><a name="element10374"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]<br>
An expression
which must have an effective <a href="#element10054">baseType</a> and <a href="#element10049">cardinality</a> that matches the base-type and cardinality of the
<a href="#element10095">outcomeVariable</a> being set.</p>
<p>The setOutcomeValue rule sets the value of an <a href="#element10095">outcomeVariable</a> to the value obtained from the associated
<a href="#element10382">expression</a>. An outcome variable can be updated
with reference to a previously assigned value, in other words, the
outcomeVariable being set may appear in the <a href="#element10382">expression</a>
where it takes the value previously assigned to it.</p>
<p>Special care is required when using the numeric base-types
because floating point values can <strong>not</strong> be assigned to
integer variables and vice-versa. The <a href="#element10490">truncate</a>,
<a href="#element10492">round</a> or <a href="#element10494">integerToFloat</a>
operators must be used to achieve numeric type conversion.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10375"><b>Class</b> : <code>exitResponse (</code></a><a class="class-head" href="#element10359">responseRule</a>)
</p>
</div>
<p>The exit response rule terminates response processing immediately (for this invocation).</p>
</div>
<h2><a name="section10071">9. Modal Feedback</a></h2>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10376"><b>Class</b> : <code>modalFeedback</code>
</a></p>
<dl>
<dt><a name="element10376">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10010">assessmentItem</a></code></dd>
</dl>
</div>
<p>Modal feedback is shown to the candidate directly following response processing.
The value of an <a href="#element10095">outcomeVariable</a> is used in conjunction
with the <a href="#element10378">showHide</a> and <a href="#element10379">identifier</a> attributes to determine whether or not the
feedback is shown in a similar way to <a href="#element10226">feedbackElement</a>.</p>
<p class="class-subbody"><a name="element10377"><b>Attribute</b> : <code>outcomeIdentifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a></p>
<p class="class-subbody"><a name="element10378"><b>Attribute</b> : <code>showHide [1]: </code></a><a class="class-subbody" href="#element10230">showHide</a></p>
<p class="class-subbody"><a name="element10379"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a></p>
<p class="class-subbody"><a name="element10380"><b>Attribute</b> : <code>title [0..1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
Delivery
engines are not required to present the title to the candidate but may do so,
for example as the title of a modal pop-up window. </p>
<p class="class-subbody"><a name="element10381"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10109">flowStatic</a> [*]<br>
The content of the
modalFeedback must not contain any <a href="#element10247">interaction</a>s. </p>
</div>
<h2><a name="section10072">10. Expressions</a></h2>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10382"><b>Abstract class</b> : <code>expression</code>
</a></p>
<dl>
<dt><a name="element10382">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10428">and</a>,
<a class="class-head todo" href="#element10432">anyN</a>,
<a class="class-head" href="#element10383">baseValue</a>,
<a class="class-head" href="#element10421">contains</a>,
<a class="class-head" href="#element10389">correct</a>,
<a class="class-head todo" href="#element10496">customOperator</a>,
<a class="class-head todo" href="#element10387">default</a>,
<a class="class-head todo" href="#element10419">delete</a>,
<a class="class-head" href="#element10482">divide</a>,
<a class="class-head todo" href="#element10474">durationGTE</a>,
<a class="class-head todo" href="#element10472">durationLT</a>,
<a class="class-head" href="#element10445">equal</a>,
<a class="class-head todo" href="#element10453">equalRounded</a>,
<a class="class-head todo" href="#element10412">fieldValue</a>,
<a class="class-head" href="#element10466">gt</a>,
<a class="class-head" href="#element10470">gte</a>,
<a class="class-head todo" href="#element10409">index</a>,
<a class="class-head todo" href="#element10460">inside</a>,
<a class="class-head" href="#element10486">integerDivide</a>,
<a class="class-head todo" href="#element10488">integerModulus</a>,
<a class="class-head todo" href="#element10494">integerToFloat</a>,
<a class="class-head" href="#element10407">isNull</a>,
<a class="class-head" href="#element10464">lt</a>,
<a class="class-head" href="#element10468">lte</a>,
<a class="class-head" href="#element10391">mapResponse</a>,
<a class="class-head todo" href="#element10393">mapResponsePoint</a>,
<a class="class-head" href="#element10436">match</a>,
<a class="class-head todo" href="#element10417">member</a>,
<a class="class-head" href="#element10403">multiple</a>,
<a class="class-head" href="#element10426">not</a>,
<a class="class-head" href="#element10395">null</a>,
<a class="class-head" href="#element10430">or</a>,
<a class="class-head" href="#element10405">ordered</a>,
<a class="class-head todo" href="#element10442">patternMatch</a>,
<a class="class-head todo" href="#element10484">power</a>,
<a class="class-head" href="#element10478">product</a>,
<a class="class-head todo" href="#element10415">random</a>,
<a class="class-head" href="#element10400">randomFloat</a>,
<a class="class-head" href="#element10396">randomInteger</a>,
<a class="class-head" href="#element10492">round</a>,
<a class="class-head todo" href="#element10438">stringMatch</a>,
<a class="class-head todo" href="#element10423">substring</a>,
<a class="class-head" href="#element10480">subtract</a>,
<a class="class-head" href="#element10476">sum</a>,
<a class="class-head todo" href="#element10490">truncate</a>,
<a class="class-head" href="#element10385">variable</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head todo" href="#element10428">and</a>,
<a class="class-head" href="#element10466">gt</a>,
<a class="class-head" href="#element10405">ordered</a>,
<a class="class-head" href="#element10482">divide</a>,
<a class="class-head todo" href="#element10530">setCorrectResponse</a>,
<a class="class-head todo" href="#element10415">random</a>,
<a class="class-head" href="#element10364">responseIf</a>,
<a class="class-head todo" href="#element10423">substring</a>,
<a class="class-head todo" href="#element10453">equalRounded</a>,
<a class="class-head todo" href="#element10409">index</a>,
<a class="class-head" href="#element10486">integerDivide</a>,
<a class="class-head" href="#element10470">gte</a>,
<a class="class-head todo" href="#element10472">durationLT</a>,
<a class="class-head" href="#element10421">contains</a>,
<a class="class-head todo" href="#element10474">durationGTE</a>,
<a class="class-head todo" href="#element10417">member</a>,
<a class="class-head" href="#element10464">lt</a>,
<a class="class-head" href="#element10436">match</a>,
<a class="class-head todo" href="#element10519">templateIf</a>,
<a class="class-head" href="#element10478">product</a>,
<a class="class-head" href="#element10403">multiple</a>,
<a class="class-head todo" href="#element10484">power</a>,
<a class="class-head todo" href="#element10494">integerToFloat</a>,
<a class="class-head todo" href="#element10533">setDefaultValue</a>,
<a class="class-head todo" href="#element10496">customOperator</a>,
<a class="class-head todo" href="#element10438">stringMatch</a>,
<a class="class-head todo" href="#element10527">setTemplateValue</a>,
<a class="class-head" href="#element10372">setOutcomeValue</a>,
<a class="class-head" href="#element10426">not</a>,
<a class="class-head todo" href="#element10522">templateElseIf</a>,
<a class="class-head todo" href="#element10488">integerModulus</a>,
<a class="class-head" href="#element10480">subtract</a>,
<a class="class-head" href="#element10367">responseElseIf</a>,
<a class="class-head todo" href="#element10432">anyN</a>,
<a class="class-head" href="#element10492">round</a>,
<a class="class-head todo" href="#element10460">inside</a>,
<a class="class-head" href="#element10445">equal</a>,
<a class="class-head todo" href="#element10412">fieldValue</a>,
<a class="class-head" href="#element10407">isNull</a>,
<a class="class-head todo" href="#element10442">patternMatch</a>,
<a class="class-head" href="#element10468">lte</a>,
<a class="class-head" href="#element10476">sum</a>,
<a class="class-head todo" href="#element10490">truncate</a>,
<a class="class-head" href="#element10430">or</a>,
<a class="class-head todo" href="#element10419">delete</a></code></dd>
</dl>
</div>
<p>Expressions are used to assign values to item variables and to control
conditional actions in response and template processing.</p>
<p>An expression can be a simple reference to the value of an <a href="#element10039">itemVariable</a>, a constant value from one of the value sets defined by
<a href="#element10054">baseType</a>s or a hierarchical expression operator. Like
<a href="#element10039">itemVariable</a>s, each expression can also have the
special value NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10383"><b>Class</b> : <code>baseValue (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10384"><b>Attribute</b> : <code>baseType [1]: </code></a><a class="class-subbody" href="#element10054">baseType</a><br>
The base-type of the value.</p>
<p>The simplest expression returns a <a href="#element10050">single</a> value
from the set defined by the given <a href="#element10054">baseType</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10385"><b>Class</b> : <code>variable (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10386"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a></p>
<p>This expression looks up the value of an <a href="#element10039">itemVariable</a> that
has been declared in a corresponding <a href="#element10034">variableDeclaration</a>
or is one of the built-in variables. The result has the base-type and
cardinality declared for the variable.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10387"><b>Class</b> : <code><span class="todo">default</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10388"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a></p>
<p>This expression looks up the declaration of an <a href="#element10039">itemVariable</a>
and returns the associated <a href="#element10046">defaultValue</a> or NULL if no
default value was declared.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10389"><b>Class</b> : <code>correct (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10390"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a></p>
<p>This expression looks up the declaration of a <a href="#element10090">responseVariable</a> and returns the associated <a href="#element10078">correctResponse</a> or NULL if no correct value was declared.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10391"><b>Class</b> : <code>mapResponse (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10392"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a></p>
<p>This expression looks up the value of a <a href="#element10090">responseVariable</a>
and then transforms it using the associated <a href="#element10076">mapping</a>, which must have been declared. The result
is a single <a href="#element10058">float</a>. If the response variable has
<a href="#element10050">single</a> cardinality then the value returned
is simply the mapped target value from the map. If the response variable <span>has <a href="#element10050">single</a> or <a href="#element10051">multiple</a> cardinality</span> then the value returned is
<em>the sum</em> of the mapped target values. <span>This
expression cannot be applied to variables of <a href="#element10053">record</a> cardinality.</span>
</p>
<p>For example, if a mapping associates the identifiers {A,B,C,D} with the values
{0,1,0.5,0} respectively then mapResponse will map the single value 'C' to the
numeric value 0.5 and the set of values {C,B} to the value 1.5.</p>
<p>If a container contains multiple instances of the <strong>same</strong> value
then that value is counted <strong>once only</strong>. To continue the example
above {B,B,C} would still map to 1.5 and <strong>not</strong> 2.5.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10393"><b>Class</b> : <code><span class="todo">mapResponsePoint</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10394"><b>Attribute</b> : <code>identifier</span> [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a></p>
<p>This expression looks up the value of a <a href="#element10090">responseVariable</a>
that must be of base-type
<span>
<a href="#element10060">point</a>
</span>, and transforms it using the associated <a href="#element10077">areaMapping</a>. The transformation is similar to
<a href="#element10391">mapResponse</a> except that the points are tested against
each area in turn. When mapping containers each <strong>area</strong> can be
mapped <strong>once only</strong>. For example, if the candidate identified two
points that both fall in the same area then the <a href="#element10089">mappedValue</a> is still added to the calculated total just once.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10395"><b>Class</b> : <code>null (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p>null is a simple expression that returns the NULL value - the null value is
treated as if it is of any desired baseType.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10396"><b>Class</b> : <code>randomInteger (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p>Selects a random integer from the specified range <span>[min,max]
satisfying min + step * n for some integer <em>n</em>. For example, with
min=2, max=11 and step=3 the values {2,5,8,11} are possible</span>.</p>
<p class="class-subbody"><a name="element10397"><b>Attribute</b> : <code>min [1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 0</p>
<p class="class-subbody"><a name="element10398"><b>Attribute</b> : <code>max [1]: </code></a><a class="class-subbody" href="#element10542">integer</a></p>
<p class="class-subbody"><a name="element10399"><b>Attribute</b> : <code>step [0..1]: </code></a><a class="class-subbody" href="#element10542">integer</a> = 1</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10400"><b>Class</b> : <code>randomFloat (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p>Selects a random float from the specified range <span>[min,max]</span>.</p>
<p class="class-subbody"><a name="element10401"><b>Attribute</b> : <code>min [1]: </code></a><a class="class-subbody" href="#element10540">float</a> = 0</p>
<p class="class-subbody"><a name="element10402"><b>Attribute</b> : <code>max [1]: </code></a><a class="class-subbody" href="#element10540">float</a></p>
</div>
<h3><a name="section10073">10.1. Operators</a></h3>
<p><a name="section10073">Operators are a family of classes derived from </a><a href="#element10382">expression</a>
that obtain their value (referred to as their result) either by modifying a
single sub-expression or by combining two or more sub-expressions in a specified
way. Operators never effect the values of <a href="#element10039">itemVariable</a>s
directly, in other words, there are no 'side effects'.</p>
<p>All operators have a <a href="#element10054">baseType</a> and <a href="#element10049">cardinality</a> though these may be dependent on the sub-expression(s) they contain.</p>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10403"><b>Class</b> : <code>multiple (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10404"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [*]</p>
<p>The multiple operator takes 0 or more sub-expressions all of which must have
either <a href="#element10050">single</a> or <a href="#element10051">multiple</a> cardinality. Although the sub-expressions may
be of any base-type they must all be of <em>the same</em> base-type. The
result is a container with <a href="#element10051">multiple</a>
cardinality containing the values of the sub-expressions, sub-expressions
with multiple cardinality have their individual values added to the result:
<em>containers cannot contain other containers</em>.
For example, when applied to A, B and {C,D} the multiple operator
results in {A,B,C,D}. All sub-expressions with NULL values are ignored.
If no sub-expressions are given (or all are NULL) then the result is
NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10405"><b>Class</b> : <code>ordered (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10406"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [*]</p>
<p>The ordered operator takes 0 or more sub-expressions all of which must have
either <a href="#element10050">single</a> or <a href="#element10052">ordered</a> cardinality. Although the sub-expressions may
be of any base-type they must all be of <em>the same</em> base-type. The
result is a container with <a href="#element10052">ordered</a>
cardinality containing the values of the sub-expressions, sub-expressions
with ordered cardinality have their individual values added (in order) to
the result: <em>contains cannot contain other containers</em>. For example,
when applied to A, B, {C,D} the ordered operator results in {A,B,C,D}. Note
that the ordered operator never results in an empty container. All
sub-expressions with NULL values are ignored. If no sub-expressions are
given (or all are NULL) then the result is NULL</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10407"><b>Class</b> : <code>isNull (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10408"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p>The isNull operator takes a sub-expression with any base-type and
cardinality. The result is a single boolean with a value of true if the
sub-expression is NULL and false otherwise. <span>Note that
empty containers and empty strings are both treated as NULL.</span>
</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10409"><b>Class</b> : <code><span class="todo">index</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10410"><b>Attribute</b> : <code>n [1]: </code></a><a class="class-subbody" href="#element10542">integer</a></p>
<p class="class-subbody"><a name="element10411"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p>The index operator takes a sub-expression with an <span>ordered</span> container value and any base-type. The result
is the nth value of the container. The result has the same base-type as the
sub-expression but <a href="#element10050">single</a> cardinality. The
first value of a container has index 1, the second 2 and so on. n must be a
positive integer. If n exceeds the number of values in the container then
the result of the index operator is NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10412"><b>Class</b> : <code><span class="todo">fieldValue</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10413"><b>Attribute</b> : <code>fieldIdentifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The
identifier of the field to be selected. </p>
<p class="class-subbody"><a name="element10414"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p>The field-value operator takes a sub-expression with a <a href="#element10053">record</a> container value. The result is the value of the
field with the specified <a href="#element10413">fieldIdentifier</a>.
If there is no field with that identifier then the result of the operator is NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10415"><b>Class</b> : <code><span class="todo">random</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10416"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p>The random operator takes a sub-expression with a <span>multiple or ordered</span> container value and any
base-type. The result is a single value randomly selected from the
container. The result has the same base-type as the sub-expression but
<a href="#element10050">single</a> cardinality. If the
sub-expression is NULL then the result is also NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10417"><b>Class</b> : <code><span class="todo">member</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10418"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The member operator takes two sub-expressions which must both have the same
base-type. The first sub-expression must have <a href="#element10050">single</a> cardinality and the second must be a <span>multiple or ordered</span> container. The result is a
single boolean with a value of true if the value given by the first
sub-expression is in the container defined by the second sub-expression. If
either sub-expression is NULL then the result of the operator is NULL.</p>
<p>The member operator should not be used on sub-expressions with a base-type of
<a href="#element10058">float</a> because of the poorly defined
comparison of values. It <strong>must</strong> not be used on
sub-expressions with a base-type of <a href="#element10063">duration</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10419"><b>Class</b> : <code><span class="todo">delete</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10420"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The delete operator takes two sub-expressions which must both have the same
base-type. The first sub-expression must have <a href="#element10050">single</a> cardinality and the second must be a <span>multiple or ordered</span> container. The result is a new
container derived from the second sub-expression with <em>all</em> instances
of the first sub-expression removed. For example, when applied to A and
{B,A,C,A} the result is the container {B,C}.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10421"><b>Class</b> : <code>contains (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10422"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The contains operator takes two sub-expressions which must both have the same
base-type and cardinality - <span>either multiple or
ordered</span>. The result is a single boolean with a value of true if the
container given by the first sub-expression contains the value given by the
second sub-expression and false if it doesn't. Note that the contains
operator works differently depending on the <a href="#element10049">cardinality</a> of the two sub-expressions. For unordered containers
the values are compared without regard for ordering, for example, [A,B,C]
contains [C,A]. Note that [A,B,C] does not contain [B,B] but that [A,B,B,C]
does. For ordered containers the second sub-expression must be a strict
sub-sequence within the first. In other words, [A,B,C] does not contain
[C,A] but it does contain [B,C].</p>
<p>If either sub-expression is NULL then the result of the operator is NULL.
Like the member operator, the contains operator should not be used on
sub-expressions with a base-type of <a href="#element10058">float</a> and
<strong>must</strong> not be used on sub-expressions with a base-type of
<a href="#element10063">duration</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10423"><b>Class</b> : <code><span class="todo">substring</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10424"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The substring operator takes two sub-expressions which must both have an
effective base-type of <a href="#element10059">string</a> and
<a href="#element10050">single</a> cardinality. The result is a
single boolean with a value of true if the first expression is a substring
of the second expression and false if it isn't. If either sub-expression is
NULL then the result of the operator is NULL.</p>
<p class="class-subbody"><a name="element10425"><b>Attribute</b> : <code>caseSensitive [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = true<br>
Used to control
whether or not the substring is matched case sensitively. If true then the
match is case sensitive and, for example, "Hell" is not a substring of
"Shell". If false then the match is not case sensitive and "Hell"
<em>is</em> a substring of "Shell".</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10426"><b>Class</b> : <code>not (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10427"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p>The not operator takes a single sub-expression with a base-type of
<a href="#element10056">boolean</a> and <a href="#element10050">single</a> cardinality. The result is a single boolean with
a value obtained by the logical negation of the sub-expression's value. If
the sub-expression is NULL then the not operator also results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10428"><b>Class</b> : <code>and (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10429"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1..*]</p>
<p>The and operator takes one or more sub-expressions each with a base-type of
<a href="#element10056">boolean</a> and <a href="#element10050">single</a> cardinality. The result is a single boolean
which is true if all sub-expressions are true and false if any of them are
false. If one or more sub-expressions are NULL and all others are true then
the operator also results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10430"><b>Class</b> : <code>or (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10431"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1..*]</p>
<p>The or operator takes one or more sub-expressions each with a base-type of
<a href="#element10056">boolean</a> and <a href="#element10050">single</a> cardinality. The result is a single boolean
which is true if any of the sub-expressions are true and false if all of
them are false. If one or more sub-expressions are NULL and all the others
are false then the operator also results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10432"><b>Class</b> : <code><span class="todo">anyN</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10433"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1..*]</p>
<p>The anyN operator takes one or more sub-expressions each with a base-type of
<a href="#element10056">boolean</a> and <a href="#element10050">single</a> cardinality. The result is a single boolean
which is true if at least <a href="#element10434">min</a> of the
sub-expressions are true and at most <a href="#element10435">max</a>
of the sub-expressions are true. If more than n - min sub-expressions
are false (where n is the total number of sub-expressions) or more than
max sub-expressions are true then the result is false. If one or more
sub-expressions are NULL then it is possible that neither of these
conditions is satisfied, in which case the operator results in NULL.
For example, if min is 3 and max is 4 and the sub-expressions have
values {true,true,false,NULL} then the operator results in NULL whereas
{true,false,false,NULL} results in false and {true,true,true,NULL}
results in true. The result NULL indicates that the correct value for
the operator cannot be determined.</p>
<p class="class-subbody"><a name="element10434"><b>Attribute</b> : <code>min [1]: </code></a><a class="class-subbody" href="#element10542">integer</a><br>
The minimum number of sub-expressions that
must be true.</p>
<p class="class-subbody"><a name="element10435"><b>Attribute</b> : <code>max [1]: </code></a><a class="class-subbody" href="#element10542">integer</a><br>
The maximum number of sub-expressions that
may be true.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10436"><b>Class</b> : <code>match (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10437"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The match operator takes two sub-expressions which must both have the same
base-type and cardinality. The result is a single boolean with a value of
true if the two expressions represent the same value and false if they do
not. If either sub-expression is NULL then the operator results in NULL.</p>
<p>The match operator must not be confused with broader notions of equality such
as numerical equality. To avoid confusion, the match operator should not be
used to compare subexpressions with base-types of <a href="#element10058">float</a> and <strong>must</strong> not be used on
sub-expressions with a base-type of <a href="#element10063">duration</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10438"><b>Class</b> : <code><span class="todo">stringMatch</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10439"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The stringMatch operator takes two sub-expressions which must have
<a href="#element10050">single</a> and a base-type of <a href="#element10059">string</a>. The result is a single boolean with a value of
true if the two strings match according to the comparison rules defined by
the attributes below and false if they don't. If either sub-expression is
NULL then the operator results in NULL.</p>
<p class="class-subbody"><a name="element10440"><b>Attribute</b> : <code>caseSensitive [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a><br>
Whether or not the match is to be
carried out case sensitively.</p>
<p class="class-subbody"><a name="element10441"><b>Attribute</b> : <code>substring [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = false<br>
If true, then the
comparison returns true if the first string <em>contains</em> the second
one, otherwise it returns true only if they match entirely.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10442"><b>Class</b> : <code><span class="todo">patternMatch</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10443"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p>The patternMatch operator takes a sub-expression which must have <a href="#element10050">single</a> cardinality and a base-type of <a href="#element10059">string</a>. The result is a single boolean with a value of
true if the sub-expression matches the regular expression given by
<a href="#element10444">pattern</a> and false if it doesn't. If
the sub-expression is NULL then the operator results in NULL.</p>
<p class="class-subbody"><a name="element10444"><b>Attribute</b> : <code>pattern [1]: </code></a><a class="class-subbody" href="#element10556">string</a><br>
The syntax for the regular expression
language is as defined in Appendix F of <a href="#ref_XML_SCHEMA2">[XML_SCHEMA2]</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10445"><b>Class</b> : <code>equal (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10446"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The equal operator takes two sub-expressions which must both have
<a href="#element10050">single</a> cardinality and have a
numerical base-type. The result is a single boolean with a value of true if
the two expressions are numerically equal and false if they are not. If
either sub-expression is NULL then the operator results in NULL.</p>
<p class="class-subbody"><a name="element10447"><b>Attribute</b> : <code class="todo">toleranceMode [1]: </code></a><a class="class-subbody" href="#element10449">toleranceMode</a> = exact<br>
When comparing two floating point numbers for equality it
is often desirable to have a tolerance to ensure that spurious errors in
scoring are not introduced by rounding errors. The tolerance mode determines
whether the comparison is done exactly, using an absolute range or a
relative range. </p>
<p class="class-subbody"><a name="element10448"><b>Attribute</b> : <code class="todo">tolerance [0..2]: </code></a><a class="class-subbody" href="#element10540">float</a><br>
If the tolerance
mode is <a href="#element10451">absolute</a> or <a href="#element10452">relative</a> then the tolerance must be specified. The
tolerance consists of two positive numbers, <em>t0</em> and <em>t1</em>,
that define the lower and upper bounds. If only one value is given it is
used for both.</p>
<p>In absolute mode the result of the comparison is true if the value of the
second expression, <em>y</em> is within the following range defined by the
first value, <em>x</em>.</p>
<pre>[x-t0,x+t1]</pre>
<p>In relative mode, <em>t0</em> and <em>t1</em> are treated as percentages and
the following range is used instead.</p>
<pre>[x*(1-t0/100),x*(1+t1/100)]</pre>
</div>
<div class="class-body">
<div class="class-head">
<h5><a name="element10449">Enumeration: <code>toleranceMode</code></a></h5>
</div>
<a name="element10449"> </a>
<p class="class-subbody"><a name="element10450"><code>exact</code></a></p>
<a name="element10450"> </a>
<p class="class-subbody"><a name="element10451"><code>absolute</code></a></p>
<a name="element10451"> </a>
<p class="class-subbody"><a name="element10452"><code>relative</code></a></p>
<a name="element10452"> </a></div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10453"><b>Class</b> : <code><span class="todo">equalRounded</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10454"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The equalRounded operator takes two sub-expressions which must both have
<a href="#element10050">single</a> cardinality and have a
numerical base-type. The result is a single boolean with a value of true if
the two expressions are numerically equal after rounding and false if they
are not. If either sub-expression is NULL then the operator results in NULL.</p>
<p class="class-subbody"><a name="element10455"><b>Attribute</b> : <code>roundingMode [1]: </code></a><a class="class-subbody" href="#element10457">roundingMode</a> = significantFigures<br>
Numbers are rounded to a given number of
<a href="#element10458">significantFigures</a> or <a href="#element10459">decimalPlaces</a>. </p>
<p class="class-subbody"><a name="element10456"><b>Attribute</b> : <code>figures [1]: </code></a><a class="class-subbody" href="#element10542">integer</a><br>
The number of figures
to round to.</p>
<p>For example, if the two values are 1.56 and 1.6 and <a href="#element10458">significantFigures</a> mode is used with <a href="#element10456">figures</a>=2 then the result would be true.</p>
</div>
<div class="class-body">
<div class="class-head">
<h5><a name="element10457">Enumeration: <code>roundingMode</code></a></h5>
</div>
<a name="element10457"> </a>
<p class="class-subbody"><a name="element10458"><code>significantFigures</code></a></p>
<a name="element10458"> </a>
<p class="class-subbody"><a name="element10459"><code>decimalPlaces</code></a></p>
<a name="element10459"> </a></div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10460"><b>Class</b> : <code><span class="todo">inside</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10461"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p>The inside operator takes a single sub-expression which must have a baseType
of <a href="#element10060">point</a>. The result is a single boolean with
a value of true if the given point is inside the area defined by
<a href="#element10462">shape</a> and <a href="#element10463">coords</a>. If the sub-expression is a container the result is
true if <em>any</em> of the points are inside the area. If either
sub-expression is NULL then the operator results in NULL.</p>
<p class="class-subbody"><a name="element10462"><b>Attribute</b> : <code>shape [1]: </code></a><a class="class-subbody" href="#element10550">shape</a><br>
The shape of the area.</p>
<p class="class-subbody"><a name="element10463"><b>Attribute</b> : <code>coords [1]: </code></a><a class="class-subbody" href="#element10538">coords</a><br>
The size and position of the area,
interpreted in conjunction with the shape.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10464"><b>Class</b> : <code>lt (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10465"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The lt operator takes two sub-expressions which must both have <a href="#element10050">single</a> cardinality and have a numerical base-type. The
result is a single boolean with a value of true if the first expression is
numerically less than the second and false if it is greater than or equal to
the second. If either sub-expression is NULL then the operator results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10466"><b>Class</b> : <code>gt (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10467"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The gt operator takes two sub-expressions which must both have <a href="#element10050">single</a> cardinality and have a numerical base-type. The
result is a single boolean with a value of true if the first expression is
numerically greater than the second and false if it is less than or equal to
the second. If either sub-expression is NULL then the operator results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10468"><b>Class</b> : <code>lte (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10469"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The lte operator takes two sub-expressions which must both have <a href="#element10050">single</a> cardinality and have a numerical base-type. The
result is a single boolean with a value of true if the first expression is
numerically less than or equal to the second and false if it is greater than
the second. If either sub-expression is NULL then the operator results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10470"><b>Class</b> : <code>gte (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10471"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The gte operator takes two sub-expressions which must both have <a href="#element10050">single</a> cardinality and have a numerical base-type. The
result is a single boolean with a value of true if the first expression is
numerically less than or equal to the second and false if it is greater than
the second. If either sub-expression is NULL then the operator results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10472"><b>Class</b> : <code><span class="todo">durationLT</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10473"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The durationLT operator takes two sub-expressions which must both have
<a href="#element10050">single</a> cardinality and base-type
<a href="#element10063">duration</a>. The result is a single boolean
with a value of true if the first duration is shorter than the second and
false if it is longer than (or equal) to the second. If either
sub-expression is NULL then the operator results in NULL.</p>
<p>There is no 'durationLTE' or 'durationGT' because equality of duration is
meaningless given the variable precision allowed by <a href="#element10063">duration</a>. Given that duration values are obtained by
truncation rather than rounding it makes sense to test only less-than or
greater-than-equal inequalities only. For example, if we want to determine
if a candidate took less than 10 seconds to complete a task in a system that
reports durations to a resolution of <em>epsilon</em> seconds
(<em>epsilon</em>&lt;1) then a value equal to 10 would cover all
durations in the range [10,10+epsilon).</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10474"><b>Class</b> : <code><span class="todo">durationGTE</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10475"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The durationGTE operator takes two sub-expressions which must both have
<a href="#element10050">single</a> cardinality and base-type
<a href="#element10063">duration</a>. The result is a single boolean
with a value of true if the first duration is longer (or equal, within the
limits imposed by truncation as described above) than the second and false
if it is shorter than the second. If either sub-expression is NULL then the
operator results in NULL.</p>
<p>See <a href="#element10472">durationLT</a> for more information about testing the
equality of durations.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10476"><b>Class</b> : <code>sum (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10477"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1..*]</p>
<p>The sum operator takes 1 or more sub-expressions which all have <a href="#element10050">single</a> cardinality and have numerical base-types. The
result is a single float or, if all sub-expressions are of <a href="#element10057">integer</a> type, a single integer that corresponds to the sum
of the numerical values of the sub-expressions. If any of the
sub-expressions are NULL then the operator results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10478"><b>Class</b> : <code>product (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10479"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1..*]</p>
<p>The product operator takes 1 or more sub-expressions which all have
<a href="#element10050">single</a> cardinality and have numerical
base-types. The result is a single float or, if all sub-expressions are of
<a href="#element10057">integer</a> type, a single integer that
corresponds to the product of the numerical values of the sub-expressions.
If any of the sub-expressions are NULL then the operator results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10480"><b>Class</b> : <code>subtract (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10481"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The subtract operator takes 2 sub-expressions which all have <a href="#element10050">single</a> cardinality and numerical base-types. The result
is a single float or, if both sub-expressions are of <a href="#element10057">integer</a> type, a single integer that corresponds to the
first value minus the second. If either of the sub-expressions is NULL then
the operator results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10482"><b>Class</b> : <code>divide (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10483"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The divide operator takes 2 sub-expressions which both have <a href="#element10050">single</a> cardinality and numerical base-types. The result
is a single float that corresponds to the first expression divided by the
second expression. If either of the sub-expressions is NULL then the
operator results in NULL.</p>
<p>Item authors should make every effort to ensure that the value of the second
expression is never 0, however, if it is zero or the resulting value is
outside the value set defined by <a href="#element10058">float</a> (not
including positive and negative infinity) then the operator should result in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10484"><b>Class</b> : <code><span class="todo">power</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10485"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The power operator takes 2 sub-expression which both have <a href="#element10050">single</a> cardinality and numerical base-types. The result
is a single float that corresponds to the first expression raised to the
power of the second. If either or the sub-expressions is NULL then the
operator results in NULL.</p>
<p>If the resulting value is outside the value set defined by <a href="#element10058">float</a> (not including positive and negative infinity) then
the operator shall result in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10486"><b>Class</b> : <code>integerDivide (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10487"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The integer divide operator takes 2 sub-expressions which both have
<a href="#element10050">single</a> cardinality and base-type
<a href="#element10057">integer</a>. The result is the single integer
that corresponds to the first expression (x) divided by the second
expression (y) rounded down to the greatest integer (i) such that
i&lt;=(x/y). If y is 0, or if either of the sub-expressions is NULL then
the operator results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10488"><b>Class</b> : <code><span class="todo">integerModulus</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10489"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [2]</p>
<p>The integer modulus operator takes 2 sub-expressions which both have
<a href="#element10050">single</a> cardinality and base-type
<a href="#element10057">integer</a>. The result is the single integer
that corresponds to the remainder when the first expression (x) is divided
by the second expression (y). If z is the result of the corresponding
<a href="#element10486">integerDivide</a> operator then the result is x-z*y.
If y is 0, or if either of the sub-expressions is NULL then the operator
results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10490"><b>Class</b> : <code><span class="todo">truncate</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10491"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p>The truncate operator takes a single sub-expression which must have
<a href="#element10050">single</a> cardinality and base-type
<a href="#element10058">float</a>. The result is a value of base-type
<a href="#element10057">integer</a> formed by truncating the value of
the sub-expression towards zero. For example, the value 6.8 becomes 6 and
the value -6.8 becomes -6. If the sub-expression is NULL then the operator
results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10492"><b>Class</b> : <code>round (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10493"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p>The round operator takes a single sub-expression which must have <a href="#element10050">single</a> cardinality and base-type <a href="#element10058">float</a>. The result is a value of base-type <a href="#element10057">integer</a> formed by rounding the value of the
sub-expression. The result is the integer <em>n</em> for all input values in
the range [n-0.5,n+0.5). In other words, 6.8 and 6.5 both round up to 7,
6.49 rounds down to 6 and -6.5 rounds up to <strong>-6</strong>. If the
sub-expression is NULL then the operator results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10494"><b>Class</b> : <code><span class="todo">integerToFloat</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p class="class-subbody"><a name="element10495"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p>The integer to float conversion operator takes a single sub-expression which
must have <a href="#element10050">single</a> cardinality and base-type
<a href="#element10057">integer</a>. The result is a value of base
type <a href="#element10058">float</a> with the same numeric value. If
the sub-expression is NULL then the operator results in NULL.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10496"><b>Class</b> : <code><span class="todo">customOperator</span> (</code></a><a class="class-head" href="#element10382">expression</a>)
</p>
</div>
<p>The custom operator provides an extension mechanism for defining operations
not currently supported by this specification.</p>
<p class="class-subbody"><a name="element10497"><b>Attribute</b> : <code>class [0..1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The class
attribute allows simple sub-classes to be named. The definition of a
sub-class is tool specific and may be inferred from <a href="#element10017">toolName</a> and <a href="#element10018">toolVersion</a>. </p>
<p class="class-subbody"><a name="element10498"><b>Attribute</b> : <code>definition [0..1]: </code></a><a class="class-subbody" href="#element10558">uri</a><br>
A URI that
identifies the definition of the custom operator in the global namespace. </p>
<p>In addition to the <a href="#element10497">class</a> and
<a href="#element10498">definition</a> attributes, sub-classes
may add any number of attributes of their own.</p>
<p class="class-subbody"><a name="element10499"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [*]<br>
Custom
operators can take any number of sub-expressions of any type to be treated
as parameters.</p>
</div>
<h2><a name="section10074">11. Item Templates</a></h2>
<p><a name="section10074">Item templates are templates that can be used for producing large numbers of similar
items. Such items are often called cloned items. Item templates can be used to
produce items by special purpose </a><a href="#term10014">Cloning Engine</a>s or, where
delivery engines support them, be used directly to produce a dynamically chosen
clone at the start of an <a href="#element10027">itemSession</a>.</p>
<p>Each item cloned from an item template is identical except for the values given to a
set of <a href="#element10503">templateVariable</a>s. An <a href="#element10010">assessmentItem</a> is therefore an item template if it contains one or more
<a href="#element10500">templateDeclaration</a>s and a set of <a href="#element10512">templateProcessing</a> rules for assigning them values.</p>
<p>A cloning engine that creates cloned items must assign a different <a href="#element10011">identifier</a> to each clone and record the values of the
template variables used to create it. A report of an <a href="#element10027">itemSession</a> with such a clone can then be transformed into an equivalent
report for the original item template by substituting the item template's
<a href="#element10011">identifier</a> for the cloned item's
<a href="#element10011">identifier</a> and adding the values of the
template variables to the report.</p>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10500"><b>Class</b> : <code>templateDeclaration (</code></a><a class="class-head" href="#element10034">variableDeclaration</a>)
</p>
<dl>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10010">assessmentItem</a></code></dd>
</dl>
</div>
<p>Template declarations declare item variables that are to be used specifically for
the purposes of cloning items. They can have their value set only during
<a href="#element10512">templateProcessing</a>. They are referred to within the
<a href="#element10096">itemBody</a> in order to individualize the clone and
possibly also within the <a href="#element10355">responseProcessing</a> rules if the
cloning process affects the way the item is scored.</p>
<p class="class-subbody"><a name="element10501"><b>Attribute</b> : <code>paramVariable [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a><br>
This
attribute determines whether or not the template variable's value should be
substituted for object parameter values that match its name. See <a href="#element10164">param</a> for more information. </p>
<p class="class-subbody"><a name="element10502"><b>Attribute</b> : <code>mathVariable [1]: </code></a><a class="class-subbody" href="#element10537">boolean</a> = false<br>
This attribute determines whether or not the template variable's
value should be substituted for identifiers that match its name in MathML
expressions. See <a href="#section10057">Combining Template Variables and MathML</a> for more information. </p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10503"><b>Abstract class</b> : <code>templateVariable (</code></a><a class="class-head" href="#element10039">itemVariable</a>)
</p>
</div>
<p>Template variables are instantiated as part of an <a href="#element10027">itemSession</a>. Their values are initialized during <a href="#element10512">templateProcessing</a> and thereafter behave as constants within the session.</p>
</div>
<h3><a name="section10075">11.1. Using Template Variables in an the Item's Body</a></h3>
<p><a name="section10075">Template variables can be referred to by </a><a href="#element10237">printedVariable</a>
objects in the item body. The value of the template variable is used to create
an appropriate run of text that is displayed. Template variables can also be
used to conditionally control content through the two <a href="#element10504">templateElement</a>s in a similar way to outcome variables with
<a href="#element10226">feedbackElement</a>s. </p>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10504"><b>Abstract class</b> : <code>templateElement (</code></a><a class="class-head" href="#element10098">bodyElement</a>)
</p>
<dl>
<dt>Derived classes:</dt>
<dd><code><a class="class-head" href="#element10508">templateBlock</a>, <a class="class-head" href="#element10510">templateInline</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10505"><b>Attribute</b> : <code>templateIdentifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The
identifier of a template variable that must have a base-type of <a href="#element10055">identifier</a> and be of either <a href="#element10050">single</a> or <a href="#element10051">multiple</a>
cardinality. The visibility of the templateElement is controlled by the
value of the variable.</p>
<p class="class-subbody"><a name="element10506"><b>Attribute</b> : <code>showHide [1]: </code></a><a class="class-subbody" href="#element10230">showHide</a> = show</p>
<p class="class-subbody"><a name="element10507"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a></p>
<p>The showHide and identifier attributes determine how the visibility of the
templateElement is controlled in the same way as the similarly named
<a href="#element10228">showHide</a> and <a href="#element10229">identifier</a> attributes of <a href="#element10226">feedbackElement</a>.</p>
<p>A template element must not contain any interactions, either directly or indirectly.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10508"><b>Class</b> : <code>templateBlock (</code></a><a class="class-head" href="#element10108">blockStatic</a>, <a class="class-head" href="#element10109">flowStatic</a>, <a class="class-head" href="#element10504">templateElement</a>)
</p>
</div>
<p class="class-subbody"><a name="element10509"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10108">blockStatic</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10510"><b>Class</b> : <code>templateInline (</code></a><a class="class-head" href="#element10109">flowStatic</a>, <a class="class-head" href="#element10107">inlineStatic</a>, <a class="class-head" href="#element10504">templateElement</a>)
</p>
</div>
<p class="class-subbody"><a name="element10511"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10107">inlineStatic</a> [*]</p>
</div>
<h3><a name="section10076">11.2. Template Processing</a></h3>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10512"><b>Class</b> : <code>templateProcessing</code>
</a></p>
<dl>
<dt><a name="element10512">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10010">assessmentItem</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10513"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10514">templateRule</a> [1..*]<br>
Template processing consists of one or more <a href="#element10514">templateRule</a>s that are followed by the cloning engine or delivery
system in order to assign values to the <a href="#element10503">templateVariable</a>s. Template processing is identical in form to
<a href="#element10355">responseProcessing</a> except that the purpose is to
assign values to <a href="#term10038">Template Variable</a>s, not <a href="#element10095">outcomeVariable</a>s.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10514"><b>Abstract class</b> : <code>templateRule</code>
</a></p>
<dl>
<dt><a name="element10514">Derived classes:</a></dt>
<dd><code><a class="class-head" href="#element10536">exitTemplate</a>, <a class="class-head" href="#element10530">setCorrectResponse</a>, <a class="class-head" href="#element10533">setDefaultValue</a>, <a class="class-head" href="#element10527">setTemplateValue</a>, <a class="class-head" href="#element10515">templateCondition</a></code></dd>
<dt>Associated classes:</dt>
<dd><code><a class="class-head" href="#element10512">templateProcessing</a>, <a class="class-head" href="#element10522">templateElseIf</a>, <a class="class-head" href="#element10519">templateIf</a>, <a class="class-head" href="#element10525">templateElse</a></code></dd>
</dl>
</div>
<p>A template rule is either a <a href="#element10515">templateCondition</a> or a
simple action. Template rules define the light-weight programming language
necessary for creating cloned items. Note that this programming language
contains a minimal number of control structures, more complex cloning rules
are outside the scope of this specification. </p>
<p>An <a href="#element10382">expression</a> used in a templateRule must not refer to
the value of a <a href="#element10090">responseVariable</a> or <a href="#element10095">outcomeVariable</a>. It may only refer to the values of the
<a href="#element10503">templateVariable</a>s.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10515"><b>Class</b> : <code>templateCondition (</code></a><a class="class-head" href="#element10514">templateRule</a>)
</p>
</div>
<p class="class-subbody"><a name="element10516"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10519">templateIf</a> [1]</p>
<p class="class-subbody"><a name="element10517"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10522">templateElseIf</a> [*]</p>
<p class="class-subbody"><a name="element10518"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10525">templateElse</a> [0..1]</p>
<p>If the expression given in the templateIf or templateElseIf evaluates to true
then the sub-rules contained within it are followed and any following
templateElseIf or templateElse parts are ignored for this template condition.</p>
<p>If the expression given in the templateIf or templateElseIf does not evaluate
to true then consideration passes to the next templateElseIf or, if there
are no more templateElseIf parts then the sub-rules of the templateElse are
followed (if specified).</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10519"><b>Class</b> : <code><span class="todo">templateIf</span></code>
</a></p>
<dl>
<dt><a name="element10519">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10515">templateCondition</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10520"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p class="class-subbody"><a name="element10521"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10514">templateRule</a> [*]</p>
<p>A templateIf part consists of an expression which must have an effective
<a href="#element10054">baseType</a> of <a href="#element10056">boolean</a>
and <a href="#element10050">single</a> cardinality. For more
information about the runtime data model employed see <a href="#section10072">Expressions</a>. It also contains a set of sub-rules. If the expression
is true then the sub-rules are processed, otherwise they are skipped
(including if the expression is NULL) and the following <a href="#element10522">templateElseIf</a> or <a href="#element10525">templateElse</a> parts (if any)
are considered instead.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10522"><b>Class</b> : <code><span class="todo">templateElseIf</span></code>
</a></p>
<dl>
<dt><a name="element10522">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10515">templateCondition</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10523"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
<p class="class-subbody"><a name="element10524"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10514">templateRule</a> [*]</p>
<p>templateElseIf is defined in an identical way to <a href="#element10519">templateIf</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10525"><b>Class</b> : <code><span class="todo">templateElse</span></code>
</a></p>
<dl>
<dt><a name="element10525">Associated classes:</a></dt>
<dd><code><a class="class-head" href="#element10515">templateCondition</a></code></dd>
</dl>
</div>
<p class="class-subbody"><a name="element10526"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10514">templateRule</a> [*]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10527"><b>Class</b> : <code>setTemplateValue (</code></a><a class="class-head" href="#element10514">templateRule</a>)
</p>
</div>
<p class="class-subbody"><a name="element10528"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The <a href="#element10503">templateVariable</a> to be set.</p>
<p class="class-subbody"><a name="element10529"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]<br>
An expression
which must have an effective <a href="#element10054">baseType</a> and <a href="#element10049">cardinality</a> that matches the base-type and cardinality of the
<a href="#element10503">templateVariable</a> being set.</p>
<p>The setTemplateValue rules sets the value of a <a href="#element10503">templateVariable</a> to the value obtained from the associated
<a href="#element10382">expression</a>. A template variable can be updated
with reference to a previously assigned value, in other words, the
templateVariable being set may appear in the <a href="#element10382">expression</a> where it takes the value previously assigned to it.</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10530"><b>Class</b> : <code><span class="todo">setCorrectResponse</span> (</code></a><a class="class-head" href="#element10514">templateRule</a>)
</p>
</div>
<p class="class-subbody"><a name="element10531"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The <a href="#element10090">responseVariable</a> to have its correct value set.</p>
<p class="class-subbody"><a name="element10532"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10533"><b>Class</b> : <code>setDefaultValue (</code></a><a class="class-head" href="#element10514">templateRule</a>)
</p>
</div>
<p class="class-subbody"><a name="element10534"><b>Attribute</b> : <code>identifier [1]: </code></a><a class="class-subbody" href="#element10541">identifier</a><br>
The <a href="#element10090">responseVariable</a> or <a href="#element10095">outcomeVariable</a> to have
its default value set.</p>
<p class="class-subbody"><a name="element10535"><b>Contains</b> : <code></code></a><a class="class-subbody" href="#element10382">expression</a> [1]</p>
</div>
<div class="class-body">
<div class="class-head">
<p class="class-head"><a name="element10536"><b>Class</b> : <code>exitTemplate (</code></a><a class="class-head" href="#element10514">templateRule</a>)
</p>
</div>
<p>The exit template rule terminates template processing immediately.</p>
</div>
<h2><a name="section10077">12. Basic Data Types</a></h2>
<div class="class-body">
<div class="class-head">
<h4><a name="element10537">Datatype: <code>boolean</code></a></h4>
</div>
<a name="element10537"> </a>
<p><a name="element10537">A boolean value is either true or false. Note that lexical bindings to strings
such as "Yes", "TRUE", "1", etc. are outside the scope of this document.</a></p>
<a name="element10537"> </a></div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10538">Datatype: <code>coords</code></a></h4>
</div>
<a name="element10538"> </a>
<p><a name="element10538">The coords type provides the coordinates that determine the size and location of
an area defined by a corresponding </a><a href="#element10550">shape</a>.</p>
<p>The coordinates themselves are an ordered list of lengths (as
defined in <a href="#ref_XHTML">[XHTML]</a>). The interpretation of each length value is
dependent on the value of the associated shape as follows.</p>
<ul>
<li>
<a href="#element10552">rect</a>: left-x, top-y, right-x, bottom-y.</li>
<li>
<a href="#element10553">circle</a>: center-x, center-y, radius. Note. When
the radius value is a percentage value, user agents should calculate the
final radius value based on the associated object's width and height. The
radius should be the smaller value of the two.</li>
<li>
<a href="#element10554">poly</a>: x1, y1, x2, y2, ..., xN, yN. The first x
and y coordinate pair and the last should be the same to close the polygon.
When these coordinate values are not the same, user agents should infer an
additional coordinate pair to close the polygon.</li>
<li>
<a href="#element10555">ellipse</a>: center-x, center-y, h-radius, v-radius.
Note that the ellipse shape is deprecated as it is not defined by <a href="#ref_XHTML">[XHTML]</a>.</li>
<li>
<a href="#element10551">default</a>: no coordinates should be given.</li>
</ul>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10539">Datatype: <code>date</code></a></h4>
</div>
<a name="element10539"> </a>
<p><a name="element10539">A fully-specified calendar date, including year, month and day of month from the
reference system defined in </a><a href="#ref_ISO8601">[ISO8601]</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10540">Datatype: <code>float</code></a></h4>
</div>
<a name="element10540"> </a>
<p><a name="element10540">The IEEE double-precision 64-bit floating point type.</a></p>
<a name="element10540"> </a></div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10541">Datatype: <code>identifier</code></a></h4>
</div>
<a name="element10541"> </a>
<p><a name="element10541"> An identifier is simply a logical reference to another object in the item, such
as an </a><a href="#element10039">itemVariable</a> or <a href="#element10254">choice</a>. An
identifier is a string of characters that must start with a Letter or an
underscore ('_') and contain only Letters, underscores, hyphens ('-'), period
('.', a.k.a. full-stop), Digits, CombiningChars and Extenders. Identifiers
containing the period character are reserved for future use. The character
classes Letter, Digit, CombiningChar and Extender are defined in the Extensible
Markup Language (XML) 1.0 (Second Edition) <a href="#ref_XML">[XML]</a>. Note
particularly that identifiers may not contain the colon (':') character.
Identifiers <span>should </span>
have no more than 32 characters. <span> for compatibility with version 1</span>
<span>They are always compared case-sensitively.</span>
</p>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10542">Datatype: <code>integer</code></a></h4>
</div>
<a name="element10542"> </a>
<p><a name="element10542"> An integer value is a whole number in the range [-2147483648,2147483647]. This
is the range of a twos-complement 32-bit integer.</a></p>
<a name="element10542"> </a></div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10543">Datatype: <code>language</code></a></h4>
</div>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10544">Datatype: <code>length</code></a></h4>
</div>
<a name="element10544"> </a>
<p><a name="element10544">The length datatype is as defined in </a><a href="#ref_XHTML">[XHTML]</a>.</p>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10545">Datatype: <code>mimeType</code></a></h4>
</div>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10546">Enumeration: <code>orientation</code></a></h4>
</div>
<a name="element10546"> </a>
<p class="class-subbody"><a name="element10547"><code>vertical</code></a></p>
<a name="element10547"> </a>
<p class="class-subbody"><a name="element10548"><code>horizontal</code></a></p>
<a name="element10548"> </a></div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10549">Datatype: <code>sign</code></a></h4>
</div>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10550">Enumeration: <code>shape</code></a></h4>
</div>
<a name="element10550"> </a>
<p><a name="element10550">A value of a shape is alway accompanied by coordinates (see </a><a href="#element10538">coords</a> and an associated image which provides a context for
interpreting them.</p>
<p class="class-subbody"><a name="element10551"><code>default</code><br>
The default shape refers to the entire area of the associated image.</a></p>
<a name="element10551"> </a>
<p class="class-subbody"><a name="element10552"><code>rect</code><br>
A rectangular region.</a></p>
<a name="element10552"> </a>
<p class="class-subbody"><a name="element10553"><code>circle</code><br>
A circular region</a></p>
<a name="element10553"> </a>
<p class="class-subbody"><a name="element10554"><code>poly</code><br>
An arbitrary polygonal region</a></p>
<a name="element10554"> </a>
<p class="class-subbody"><a name="element10555"><code>ellipse</code><br>
This value is deprecated, but is included for compatibility
with version of 1 of the QTI specification. Systems should use </a><a href="#element10553">circle</a> or <a href="#element10554">poly</a> shapes instead.</p>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10556">Datatype: <code>string</code></a></h4>
</div>
<a name="element10556"> </a>
<p><a name="element10556">A string value is any sequence of characters. A character is anything in the
class Char defined in Extensible Markup Language (XML) 1.0 (Second Edition).</a></p>
<a name="element10556"> </a></div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10557">Datatype: <code>string256</code></a></h4>
</div>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10558">Datatype: <code>uri</code></a></h4>
</div>
<a name="element10558"> </a>
<p><a name="element10558">A Uniform Resource Identifier as defined in </a><a href="#ref_URI">[URI]</a>
</p>
</div>
<div class="class-body">
<div class="class-head">
<h4><a name="element10559">Enumeration: <code>view</code></a></h4>
</div>
<a name="element10559"> </a>
<p class="class-subbody"><a name="element10560"><code>author</code></a></p>
<a name="element10560"> </a>
<p class="class-subbody"><a name="element10561"><code>candidate</code></a></p>
<a name="element10561"> </a>
<p class="class-subbody"><a name="element10562"><code>proctor</code><br>
Sometimes referred to as an <em>invigilator</em>
</a></p>
<a name="element10562"> </a>
<p class="class-subbody"><a name="element10563"><code>scorer</code></a></p>
<a name="element10563"> </a>
<p class="class-subbody"><a name="element10564"><code>tutor</code></a></p>
<a name="element10564"> </a></div>
<a name="element10564"><br>
<br>
</a>
<h2><a name="element10564">About This Document</a></h2>
<p></p>
<table summary="This table describes the document properties" border="1" cellpadding="5" cellspacing="0">
<tbody>
<tr>
<td><strong>Title</strong><br>
</td>
<td>IMS Question and Test Interoperability Information Model<br>
</td>
</tr>
<tr>
<td><strong>Editor</strong><br>
</td>
<td>Steve Lay (University of Cambridge)<br>
</td>
</tr>
<tr>
<td><strong>Version</strong><br>
</td>
<td>2.0<br>
</td>
</tr>
<tr>
<td><strong>Version Date</strong><br>
</td>
<td>24 January 2005<br>
</td>
</tr>
<tr>
<td><strong>Status</strong><br>
</td>
<td><strong>Final Specification</strong><br>
</td>
</tr>
<tr>
<td><strong>Summary</strong><br>
</td>
<td>This document describes the QTI Information Model specification.<br>
</td>
</tr>
<tr>
<td><strong>Revision Information</strong><br>
</td>
<td>24 January 2005<br>
</td>
</tr>
<tr>
<td><strong>Purpose</strong><br>
</td>
<td>This document has been approved by the IMS Technical Board and is made available for adoption.<br>
</td>
</tr>
<tr>
<td><strong>Document Location</strong><br>
</td>
<td><a href="http://www.imsglobal.org/question/qti_v2p0/imsqti_infov2p0.html">
http://www.imsglobal.org/question/qti_v2p0/imsqti_infov2p0.html</a><br>
</td>
</tr>
</tbody>
</table>
<p></p>
<p></p>
<p></p>
<table summary="This table describes" border="1" cellpadding="5" cellspacing="0">
<tbody>
<tr>
<td>To register any comments or questions about this specification please visit: <a href="http://www.imsglobal.org/developers/ims/imsforum/categories.cfm?catid=23">
http://www.imsglobal.org/developers/ims/imsforum/categories.cfm?catid=23</a><br>
</td>
</tr>
</tbody>
</table>
<p></p>
<p></p>
<h3><a name="element10564">List of Contributors</a></h3>
<p><a name="element10564">The following individuals contributed to the development of this document:</a></p>
<p></p>
<table summary="This table describes The list of contributors for this document" border="0" cellpadding="5" cellspacing="0">
<tbody>
<tr>
<th scope="col"><strong>Name</strong></th>
<th scope="col">
<strong>Organization</strong></th>
<th scope="col"><strong>Name</strong></th>
<th scope="col">
<strong>Organization</strong></th>
</tr>
<tr>
<td>Niall Barr<br>
</td>
<td>CETIS<br>
</td>
<td>Joshua Marks<br>
</td>
<td>McGraw-Hill<br>
</td>
</tr>
<tr>
<td>Sam Easterby-Smith<br>
</td>
<td>Canvas Learning<br>
</td>
<td>David Poor<br>
</td>
<td>McGraw-Hill<br>
</td>
</tr>
<tr>
<td>Jeanne Ferrante<br>
</td>
<td>ETS<br>
</td>
<td>Greg Quirus<br>
</td>
<td>ETS<br>
</td>
</tr>
<tr>
<td>Pierre Gorissen<br>
</td>
<td>SURF<br>
</td>
<td>Niall Sclater<br>
</td>
<td>CETIS<br>
</td>
</tr>
<tr>
<td>Regina Hoag<br>
</td>
<td>ETS<br>
</td>
<td>Colin Smythe<br>
</td>
<td>IMS<br>
</td>
</tr>
<tr>
<td>Christian Kaefer<br>
</td>
<td>McGraw-Hill<br>
</td>
<td>GT Springer<br>
</td>
<td>Texas Instruments<br>
</td>
</tr>
<tr>
<td>John Kleeman<br>
</td>
<td>Question Mark<br>
</td>
<td>Colin Tattersall<br>
</td>
<td>OUNL<br>
</td>
</tr>
<tr>
<td>Steve Lay<br>
</td>
<td>UCLES<br>
</td>
<td>Rowin Young<br>
</td>
<td>CETIS<br>
</td>
</tr>
<tr>
<td>Jez Lord<br>
</td>
<td>Canvas Learning<br>
</td>
<td><br>
</td>
<td><br>
</td>
</tr>
</tbody>
</table>
<h2><a name="element10564">Revision History</a></h2>
<p></p>
<table summary="This table describes document revision history" border="1" cellpadding="5" cellspacing="0">
<tbody>
<tr bgcolor="#cccccc">
<th scope="col"><strong>Version No.</strong></th>
<th scope="col"><strong>Release Date</strong></th>
<th scope="col"><strong>Comments</strong></th>
</tr>
<tr>
<td>Base Document 2.0<br>
</td>
<td>09 March 2004<br>
</td>
<td>The first version of the QTI Item v2.0 specification.<br>
</td>
</tr>
<tr>
<td>Public Draft 2.0<br>
</td>
<td>07 June 2004<br>
</td>
<td>The Public Draft version 2.0 of the QTI Item Specification.<br>
</td>
</tr>
<tr>
<td>Final 2.0<br>
</td>
<td>24 January 2005<br>
</td>
<td>The Final version 2.0 of the QTI specification.<br>
</td>
</tr>
</tbody>
</table>
<center>
<p><a name="element10564">&nbsp;</a></p>
<p><a name="element10564">&nbsp;</a></p>
<p><a name="element10564">&nbsp;</a></p>
<p><a name="element10564"><em>IMS Global Learning Consortium, Inc. ("IMS/GLC") is publishing the information contained in this</em> IMS Question and Test Interoperability Information Model <em>("Specification") for purposes of scientific, experimental, and scholarly collaboration only.<br>
<br>
IMS/GLC makes no warranty or representation regarding the accuracy or completeness of the Specification.<br>
This material is provided on an "As Is" and "As Available" basis.<br>
<br>
The Specification is at all times subject to change and revision without notice.<br>
<br>
It is your sole responsibility to evaluate the usefulness, accuracy, and completeness of the Specification as it relates to you.<br>
<br>
IMS/GLC would appreciate receiving your comments and suggestions.<br>
<br>
Please contact IMS/GLC through our website at </em></a><em><a href="http://www.imsglobal.org/">http://www.imsglobal.org</a><br>
<br>
Please refer to Document Name:</em> IMS Question and Test Interoperability Information Model <em>Revision:</em> 24 January 2005</p>
</center>
<hr>
</body></html>