<!--
IMS Question & Test Interoperability: Item
Version: 2.0
Public Draft Document
-->

<!-- imsqti_item_v2p0 -->

<!-- Copyright 2004, IMS Global Learning Consortium, Inc.  All Rights Reserved. -->

<!-- =================================================================== -->

<!-- Abstract Classes -->

<!ENTITY % associableChoice.ElementGroup "gap|gapText|gapImg|associableHotspot|simpleAssociableChoice">

<!ENTITY % block.ElementGroup "positionObjectStage|dl|ol|drawingInteraction|gapMatchInteraction|matchInteraction|graphicGapMatchInteraction|hotspotInteraction|graphicOrderInteraction|selectPointInteraction|graphicAssociateInteraction|sliderInteraction|choiceInteraction|customInteraction|hottextInteraction|orderInteraction|extendedTextInteraction|uploadInteraction|associateInteraction|hr|rubricBlock|blockquote|feedbackBlock|ul|table|div|pre|h2|h3|h1|h6|h4|h5|p|address">

<!ENTITY % blockInteraction.ElementGroup "drawingInteraction|gapMatchInteraction|matchInteraction|graphicGapMatchInteraction|hotspotInteraction|graphicOrderInteraction|selectPointInteraction|graphicAssociateInteraction|sliderInteraction|choiceInteraction|customInteraction|hottextInteraction|orderInteraction|extendedTextInteraction|uploadInteraction|associateInteraction">

<!ENTITY % bodyElement.ElementGroup "dt|dd|prompt|colgroup|td|th|tr|img|printedVariable|object|gap|textEntryInteraction|inlineChoiceInteraction|em|code|kbd|span|sub|tt|dfn|sup|var|samp|cite|acronym|big|feedbackInline|abbr|strong|a|b|i|hottext|q|small|br|positionObjectStage|dl|ol|drawingInteraction|gapMatchInteraction|matchInteraction|graphicGapMatchInteraction|hotspotInteraction|graphicOrderInteraction|selectPointInteraction|graphicAssociateInteraction|sliderInteraction|choiceInteraction|customInteraction|hottextInteraction|orderInteraction|extendedTextInteraction|uploadInteraction|associateInteraction|hr|rubricBlock|blockquote|feedbackBlock|ul|table|div|pre|h2|h3|h1|h6|h4|h5|p|address|tbody|li|simpleChoice|caption|itemBody|thead|col|tfoot">

<!ENTITY % choice.ElementGroup "hottext|associableChoice|gap|gapText|gapImg|associableHotspot|simpleAssociableChoice|hotspotChoice|inlineChoice|simpleChoice">

<!ENTITY % dlElement.ElementGroup "dt|dd">

<!ENTITY % expression.ElementGroup "and|gt|ordered|divide|random|substring|variable|null|index|integerDivide|gte|durationLT|contains|member|lt|correct|match|product|multiple|power|mapResponsePoint|mapResponse|randomFloat|stringMatch|not|integerModulus|subtract|durationGTE|anyN|baseValue|default|inside|equal|randomInteger|isNull|patternMatch|lte|sum|or|delete">

<!ENTITY % feedbackElement.ElementGroup "feedbackInline|feedbackBlock">

<!ENTITY % flow.ElementGroup "img|printedVariable|object|gap|textEntryInteraction|inlineChoiceInteraction|em|code|kbd|span|sub|tt|dfn|sup|var|samp|cite|acronym|big|feedbackInline|abbr|strong|a|b|i|hottext|q|small|br|positionObjectStage|dl|ol|drawingInteraction|gapMatchInteraction|matchInteraction|graphicGapMatchInteraction|hotspotInteraction|graphicOrderInteraction|selectPointInteraction|graphicAssociateInteraction|sliderInteraction|choiceInteraction|customInteraction|hottextInteraction|orderInteraction|extendedTextInteraction|uploadInteraction|associateInteraction|hr|rubricBlock|blockquote|feedbackBlock|ul|table|div|pre|h2|h3|h1|h6|h4|h5|p|address">

<!ENTITY % gapChoice.ElementGroup "gapText|gapImg">

<!ENTITY % graphicInteraction.ElementGroup "graphicGapMatchInteraction|hotspotInteraction|graphicOrderInteraction|selectPointInteraction|graphicAssociateInteraction">

<!ENTITY % hotspot.ElementGroup "hotspotChoice|associableHotspot">

<!ENTITY % inline.ElementGroup "img|printedVariable|object|gap|textEntryInteraction|inlineChoiceInteraction|em|code|kbd|span|sub|tt|dfn|sup|var|samp|cite|acronym|big|feedbackInline|abbr|strong|a|b|i|hottext|q|small|br">

<!ENTITY % inlineInteraction.ElementGroup "textEntryInteraction|inlineChoiceInteraction">

<!ENTITY % interaction.ElementGroup "textEntryInteraction|inlineChoiceInteraction|positionObjectInteraction|drawingInteraction|gapMatchInteraction|matchInteraction|graphicGapMatchInteraction|hotspotInteraction|graphicOrderInteraction|selectPointInteraction|graphicAssociateInteraction|sliderInteraction|choiceInteraction|customInteraction|hottextInteraction|orderInteraction|extendedTextInteraction|uploadInteraction|associateInteraction">

<!ENTITY % itemStatistic.ElementGroup "ordinaryStatistic|categorizedStatistic">

<!ENTITY % itemVariable.ElementGroup "responseVariable|templateVariable|outcomeVariable">

<!ENTITY % objectFlow.ElementGroup "img|printedVariable|object|gap|textEntryInteraction|inlineChoiceInteraction|em|code|kbd|span|sub|tt|dfn|sup|var|samp|cite|acronym|big|feedbackInline|abbr|strong|a|b|i|hottext|q|small|br|positionObjectStage|dl|ol|drawingInteraction|gapMatchInteraction|matchInteraction|graphicGapMatchInteraction|hotspotInteraction|graphicOrderInteraction|selectPointInteraction|graphicAssociateInteraction|sliderInteraction|choiceInteraction|customInteraction|hottextInteraction|orderInteraction|extendedTextInteraction|uploadInteraction|associateInteraction|hr|rubricBlock|blockquote|feedbackBlock|ul|table|div|pre|h2|h3|h1|h6|h4|h5|p|address|param">

<!ENTITY % responseRule.ElementGroup "setOutcomeValue|responseCondition|exitResponse|externalResponseProcessing">

<!ENTITY % simpleBlock.ElementGroup "rubricBlock|blockquote|feedbackBlock">

<!ENTITY % simpleInline.ElementGroup "em|code|kbd|span|sub|tt|dfn|sup|var|samp|cite|acronym|big|feedbackInline|abbr|strong|a|b|i|hottext|q|small">

<!ENTITY % stringInteraction.ElementGroup "textEntryInteraction|extendedTextInteraction">

<!ENTITY % tableCell.ElementGroup "td|th">

<!ENTITY % templateRule.ElementGroup "setTemplateValue|exitTemplate|templateCondition|setDefaultValue|setCorrectResponse">

<!ENTITY % terminalBlock.ElementGroup "pre|h2|h3|h1|h6|h4|h5|p|address">

<!ENTITY % variableDeclaration.ElementGroup "responseDeclaration|outcomeDeclaration|templateDeclaration">

<!-- Datatypes -->


<!-- Datatype: URI -->

<!ENTITY % URI.Type "CDATA">


<!-- Enumeration: baseType -->

<!ENTITY % baseType.Type "(boolean|directedPair|duration|file|float|identifier|integer|pair|point|string|uri)">


<!-- Enumeration: cardinality -->

<!ENTITY % cardinality.Type "(multiple|ordered|single)">


<!-- Enumeration: feedbackType -->

<!ENTITY % feedbackType.Type "(adaptive|nonadaptive|none)">

<!ELEMENT feedbackType	(#PCDATA)>


<!-- Enumeration: interactionType -->

<!ENTITY % interactionType.Type "(associateInteraction|choiceInteraction|customInteraction|drawingInteraction|extendedTextInteraction|gapMatchInteraction|graphicAssociateInteraction|graphicGapMatchInteraction|graphicOrderInteraction|hotspotInteraction|hottextInteraction|inlineChoiceInteraction|matchInteraction|orderInteraction|positionObjectInteraction|selectPointInteraction|sliderInteraction|textInteraction|uploadInteraction)">

<!ELEMENT interactionType	(#PCDATA)>


<!-- Enumeration: orientation -->

<!ENTITY % orientation.Type "(horizontal|vertical)">


<!-- Enumeration: paramType -->

<!ENTITY % paramType.Type "(DATA|REF|VARIABLE)">


<!-- Enumeration: shape -->

<!ENTITY % shape.Type "(circle|default|ellipse|poly|rect)">


<!-- Enumeration: showHide -->

<!ENTITY % showHide.Type "(hide|show)">


<!-- Datatype: sign -->

<!ENTITY % sign.Type "CDATA">


<!-- Datatype: styleclass -->

<!ENTITY % styleclass.Type "CDATA">


<!-- Enumeration: view -->

<!ENTITY % view.Type "(author|candidate|proctor|scorer|tutor)">

<!-- Classes -->


<!-- Class: bodyElement -->

<!ENTITY % bodyElement.AttrGroup
"	id		NMTOKEN		#IMPLIED
	class		%styleclass.Type;		#IMPLIED
	xml:lang		CDATA		#IMPLIED
	label		CDATA		#IMPLIED
	">


<!-- Class: objectFlow -->


<!-- Class: flow -->

<!ENTITY % flow.AttrGroup
"	%bodyElement.AttrGroup;
	">


<!-- Class: inline -->

<!ENTITY % inline.AttrGroup
"	%flow.AttrGroup;
	">


<!-- Class: simpleInline -->

<!ENTITY % simpleInline.AttrGroup
"	%inline.AttrGroup;
	">

<!ENTITY % simpleInline.ContentGroup
"((%inline.ElementGroup;)*)">


<!-- Class: a -->

<!ENTITY % a.AttrGroup
"	%simpleInline.AttrGroup;
	href		%URI.Type;		#REQUIRED
	type		CDATA		#IMPLIED
	">

<!ENTITY % a.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT a	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST a	%a.AttrGroup; >


<!-- Class: abbr -->

<!ENTITY % abbr.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % abbr.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT abbr	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST abbr	%abbr.AttrGroup; >


<!-- Class: acronym -->

<!ENTITY % acronym.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % acronym.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT acronym	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST acronym	%acronym.AttrGroup; >


<!-- Class: block -->

<!ENTITY % block.AttrGroup
"	%flow.AttrGroup;
	">


<!-- Class: terminalBlock -->

<!ENTITY % terminalBlock.AttrGroup
"	%block.AttrGroup;
	">

<!ENTITY % terminalBlock.ContentGroup
"((%inline.ElementGroup;)*)">


<!-- Class: address -->

<!ENTITY % address.AttrGroup
"	%terminalBlock.AttrGroup;
	">

<!ENTITY % address.ContentGroup
"(%terminalBlock.ContentGroup;)">

<!ELEMENT address	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST address	%address.AttrGroup; >


<!-- Class: expression -->


<!-- Class: and -->

<!ENTITY % and.ContentGroup
"((%expression.ElementGroup;)+)">

<!ELEMENT and	(%and.ContentGroup;) >


<!-- Class: anyN -->

<!ENTITY % anyN.AttrGroup
"	min		NMTOKEN		#REQUIRED
	max		NMTOKEN		#REQUIRED
	">

<!ENTITY % anyN.ContentGroup
"((%expression.ElementGroup;)+)">

<!ELEMENT anyN	(%anyN.ContentGroup;) >

<!ATTLIST anyN	%anyN.AttrGroup; >


<!-- Class: areaMapEntry -->

<!ENTITY % areaMapEntry.AttrGroup
"	shape		%shape.Type;		#REQUIRED
	coords		CDATA		#REQUIRED
	mappedValue		CDATA		#REQUIRED
	">

<!ELEMENT areaMapEntry	EMPTY >

<!ATTLIST areaMapEntry	%areaMapEntry.AttrGroup; >


<!-- Class: areaMapping -->

<!ENTITY % areaMapping.AttrGroup
"	lowerBound		CDATA		#IMPLIED
	upperBound		CDATA		#IMPLIED
	defaultValue		CDATA		#REQUIRED
	">

<!ENTITY % areaMapping.ContentGroup
"(areaMapEntry+)">

<!ELEMENT areaMapping	(%areaMapping.ContentGroup;) >

<!ATTLIST areaMapping	%areaMapping.AttrGroup; >


<!-- Class: assessmentItem -->

<!ENTITY % assessmentItem.AttrGroup
"	identifier		CDATA		#REQUIRED
	title		CDATA		#REQUIRED
	label		CDATA		#IMPLIED
	xml:lang		CDATA		#IMPLIED
	adaptive		CDATA		#REQUIRED
	timeDependent		CDATA		#REQUIRED
	toolName		CDATA		#IMPLIED
	toolVersion		CDATA		#IMPLIED
	">

<!ENTITY % assessmentItem.ContentGroup
"(responseDeclaration*,outcomeDeclaration*,templateDeclaration*,templateProcessing?,stylesheet*,itemBody?,responseProcessing?,modalFeedback*)">

<!ELEMENT assessmentItem	(%assessmentItem.ContentGroup;) >

<!ATTLIST assessmentItem	%assessmentItem.AttrGroup; >


<!-- Class: assessmentRef -->

<!ENTITY % assessmentRef.AttrGroup
"	identifier		CDATA		#REQUIRED
	partIdentifier		NMTOKEN		#IMPLIED
	">

<!ELEMENT assessmentRef	EMPTY >

<!ATTLIST assessmentRef	%assessmentRef.AttrGroup; >


<!-- Class: choice -->

<!ENTITY % choice.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	fixed		CDATA		#IMPLIED
	">


<!-- Class: associableChoice -->

<!ENTITY % associableChoice.AttrGroup
"	%choice.AttrGroup;
	matchGroup		NMTOKENS		#IMPLIED
	">

<!ELEMENT associableChoice	EMPTY >

<!ATTLIST associableChoice	%associableChoice.AttrGroup; >


<!-- Class: hotspot -->

<!ENTITY % hotspot.AttrGroup
"	shape		%shape.Type;		#REQUIRED
	coords		CDATA		#REQUIRED
	hotspotLabel		CDATA		#IMPLIED
	">


<!-- Class: associableHotspot -->

<!ENTITY % associableHotspot.AttrGroup
"	%associableChoice.AttrGroup;
	%hotspot.AttrGroup;
	matchMax		NMTOKEN		#REQUIRED
	">

<!ELEMENT associableHotspot	EMPTY >

<!ATTLIST associableHotspot	%associableHotspot.AttrGroup; >


<!-- Class: interaction -->

<!ENTITY % interaction.AttrGroup
"	responseIdentifier		NMTOKEN		#REQUIRED
	">

<!ELEMENT interaction	EMPTY >

<!ATTLIST interaction	%interaction.AttrGroup; >


<!-- Class: blockInteraction -->

<!ENTITY % blockInteraction.AttrGroup
"	%block.AttrGroup;
	%interaction.AttrGroup;
	">

<!ENTITY % blockInteraction.ContentGroup
"(prompt?)">


<!-- Class: associateInteraction -->

<!ENTITY % associateInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	shuffle		CDATA		#REQUIRED
	maxAssociations		NMTOKEN		#REQUIRED
	">

<!ENTITY % associateInteraction.ContentGroup
"(%blockInteraction.ContentGroup;,simpleAssociableChoice+)">

<!ELEMENT associateInteraction	(%associateInteraction.ContentGroup;) >

<!ATTLIST associateInteraction	%associateInteraction.AttrGroup; >


<!-- Class: b -->

<!ENTITY % b.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % b.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT b	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST b	%b.AttrGroup; >


<!-- Class: baseValue -->

<!ENTITY % baseValue.AttrGroup
"	baseType		%baseType.Type;		#REQUIRED
	">

<!ELEMENT baseValue	(#PCDATA)>

<!ATTLIST baseValue	%baseValue.AttrGroup; >


<!-- Class: big -->

<!ENTITY % big.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % big.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT big	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST big	%big.AttrGroup; >


<!-- Class: simpleBlock -->

<!ENTITY % simpleBlock.AttrGroup
"	%block.AttrGroup;
	">

<!ENTITY % simpleBlock.ContentGroup
"((%block.ElementGroup;)*)">


<!-- Class: blockquote -->

<!ENTITY % blockquote.AttrGroup
"	%simpleBlock.AttrGroup;
	">

<!ENTITY % blockquote.ContentGroup
"(%simpleBlock.ContentGroup;)">

<!ELEMENT blockquote	(%blockquote.ContentGroup;) >

<!ATTLIST blockquote	%blockquote.AttrGroup; >


<!-- Class: boolean -->

<!ELEMENT boolean	(#PCDATA)>


<!-- Class: br -->

<!ENTITY % br.AttrGroup
"	%inline.AttrGroup;
	">

<!ELEMENT br	EMPTY >

<!ATTLIST br	%br.AttrGroup; >


<!-- Pseudo-class: canComputerScore -->

<!ELEMENT canComputerScore	(#PCDATA)>


<!-- Class: caption -->

<!ENTITY % caption.AttrGroup
"	%bodyElement.AttrGroup;
	">

<!ENTITY % caption.ContentGroup
"((%inline.ElementGroup;)*)">

<!ELEMENT caption	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST caption	%caption.AttrGroup; >


<!-- Class: itemStatistic -->

<!ENTITY % itemStatistic.AttrGroup
"	name		NMTOKEN		#REQUIRED
	context		%URI.Type;		#REQUIRED
	caseCount		NMTOKEN		#IMPLIED
	stdError		CDATA		#IMPLIED
	stdDeviation		CDATA		#IMPLIED
	lastUpdated		CDATA		#IMPLIED
	">

<!ENTITY % itemStatistic.ContentGroup
"(assessmentRef+)">

<!ELEMENT itemStatistic	(%itemStatistic.ContentGroup;) >

<!ATTLIST itemStatistic	%itemStatistic.AttrGroup; >


<!-- Class: categorizedStatistic -->

<!ENTITY % categorizedStatistic.AttrGroup
"	%itemStatistic.AttrGroup;
	">

<!ENTITY % categorizedStatistic.ContentGroup
"(%itemStatistic.ContentGroup;,mapping)">

<!ELEMENT categorizedStatistic	(%categorizedStatistic.ContentGroup;) >

<!ATTLIST categorizedStatistic	%categorizedStatistic.AttrGroup; >


<!-- Class: choiceInteraction -->

<!ENTITY % choiceInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	shuffle		CDATA		#REQUIRED
	maxChoices		NMTOKEN		#REQUIRED
	">

<!ENTITY % choiceInteraction.ContentGroup
"(%blockInteraction.ContentGroup;,simpleChoice+)">

<!ELEMENT choiceInteraction	(%choiceInteraction.ContentGroup;) >

<!ATTLIST choiceInteraction	%choiceInteraction.AttrGroup; >


<!-- Class: cite -->

<!ENTITY % cite.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % cite.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT cite	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST cite	%cite.AttrGroup; >


<!-- Class: code -->

<!ENTITY % code.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % code.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT code	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST code	%code.AttrGroup; >


<!-- Class: col -->

<!ENTITY % col.AttrGroup
"	%bodyElement.AttrGroup;
	">

<!ELEMENT col	EMPTY >

<!ATTLIST col	%col.AttrGroup; >


<!-- Class: colgroup -->

<!ENTITY % colgroup.AttrGroup
"	%bodyElement.AttrGroup;
	">

<!ENTITY % colgroup.ContentGroup
"(col*)">

<!ELEMENT colgroup	(%colgroup.ContentGroup;) >

<!ATTLIST colgroup	%colgroup.AttrGroup; >


<!-- Pseudo-class: composite -->

<!ELEMENT composite	(#PCDATA)>


<!-- Class: contains -->

<!ENTITY % contains.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT contains	(%contains.ContentGroup;) >


<!-- Class: coords -->

<!ENTITY % coords.ContentGroup
"(length*)">

<!ELEMENT coords	(#PCDATA)>


<!-- Class: correct -->

<!ENTITY % correct.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	">

<!ELEMENT correct	EMPTY >

<!ATTLIST correct	%correct.AttrGroup; >


<!-- Class: correctResponse -->

<!ENTITY % correctResponse.AttrGroup
"	interpretation		CDATA		#IMPLIED
	">

<!ENTITY % correctResponse.ContentGroup
"(value+)">

<!ELEMENT correctResponse	(%correctResponse.ContentGroup;) >

<!ATTLIST correctResponse	%correctResponse.AttrGroup; >


<!-- Class: customInteraction -->

<!ENTITY % customInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	">

<!ENTITY % customInteraction.ContentGroup
"(%blockInteraction.ContentGroup;,object)">

<!ELEMENT customInteraction	(%customInteraction.ContentGroup;) >

<!ATTLIST customInteraction	%customInteraction.AttrGroup; >


<!-- Class: date -->

<!ELEMENT date	(#PCDATA)>


<!-- Class: dlElement -->

<!ENTITY % dlElement.AttrGroup
"	%bodyElement.AttrGroup;
	">


<!-- Class: dd -->

<!ENTITY % dd.AttrGroup
"	%dlElement.AttrGroup;
	">

<!ENTITY % dd.ContentGroup
"((%flow.ElementGroup;)*)">

<!ELEMENT dd	(#PCDATA|%flow.ElementGroup;)* >

<!ATTLIST dd	%dd.AttrGroup; >


<!-- Class: default -->

<!ENTITY % default.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	">

<!ELEMENT default	EMPTY >

<!ATTLIST default	%default.AttrGroup; >


<!-- Class: defaultValue -->

<!ENTITY % defaultValue.AttrGroup
"	interpretation		CDATA		#IMPLIED
	">

<!ENTITY % defaultValue.ContentGroup
"(value+)">

<!ELEMENT defaultValue	(%defaultValue.ContentGroup;) >

<!ATTLIST defaultValue	%defaultValue.AttrGroup; >


<!-- Class: delete -->

<!ENTITY % delete.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT delete	(%delete.ContentGroup;) >


<!-- Class: dfn -->

<!ENTITY % dfn.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % dfn.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT dfn	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST dfn	%dfn.AttrGroup; >


<!-- Class: div -->

<!ENTITY % div.AttrGroup
"	%block.AttrGroup;
	">

<!ENTITY % div.ContentGroup
"((%flow.ElementGroup;)*)">

<!ELEMENT div	(#PCDATA|%flow.ElementGroup;)* >

<!ATTLIST div	%div.AttrGroup; >


<!-- Class: divide -->

<!ENTITY % divide.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT divide	(%divide.ContentGroup;) >


<!-- Class: dl -->

<!ENTITY % dl.AttrGroup
"	%block.AttrGroup;
	">

<!ENTITY % dl.ContentGroup
"((%dlElement.ElementGroup;)*)">

<!ELEMENT dl	(%dl.ContentGroup;) >

<!ATTLIST dl	%dl.AttrGroup; >


<!-- Class: drawingInteraction -->

<!ENTITY % drawingInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	">

<!ENTITY % drawingInteraction.ContentGroup
"(%blockInteraction.ContentGroup;,object)">

<!ELEMENT drawingInteraction	(%drawingInteraction.ContentGroup;) >

<!ATTLIST drawingInteraction	%drawingInteraction.AttrGroup; >


<!-- Class: dt -->

<!ENTITY % dt.AttrGroup
"	%dlElement.AttrGroup;
	">

<!ENTITY % dt.ContentGroup
"((%inline.ElementGroup;)*)">

<!ELEMENT dt	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST dt	%dt.AttrGroup; >


<!-- Class: durationGTE -->

<!ENTITY % durationGTE.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT durationGTE	(%durationGTE.ContentGroup;) >


<!-- Class: durationLT -->

<!ENTITY % durationLT.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT durationLT	(%durationLT.ContentGroup;) >


<!-- Class: em -->

<!ENTITY % em.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % em.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT em	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST em	%em.AttrGroup; >


<!-- Class: equal -->

<!ENTITY % equal.AttrGroup
"	significantFigures		NMTOKEN		#IMPLIED
	decimalPlaces		NMTOKEN		#IMPLIED
	tolerance		CDATA		#IMPLIED
	">

<!ENTITY % equal.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT equal	(%equal.ContentGroup;) >

<!ATTLIST equal	%equal.AttrGroup; >


<!-- Class: responseRule -->


<!-- Class: exitResponse -->

<!ELEMENT exitResponse	EMPTY >


<!-- Class: templateRule -->


<!-- Class: exitTemplate -->

<!ELEMENT exitTemplate	EMPTY >


<!-- Class: stringInteraction -->

<!ENTITY % stringInteraction.AttrGroup
"	base		NMTOKEN		#IMPLIED
	stringIdentifier		NMTOKEN		#IMPLIED
	expectedLength		NMTOKEN		#IMPLIED
	patternMask		CDATA		#IMPLIED
	">

<!ELEMENT stringInteraction	EMPTY >

<!ATTLIST stringInteraction	%stringInteraction.AttrGroup; >


<!-- Class: extendedTextInteraction -->

<!ENTITY % extendedTextInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	%stringInteraction.AttrGroup;
	maxStrings		NMTOKEN		#IMPLIED
	">

<!ENTITY % extendedTextInteraction.ContentGroup
"(%blockInteraction.ContentGroup;)">

<!ELEMENT extendedTextInteraction	(%extendedTextInteraction.ContentGroup;) >

<!ATTLIST extendedTextInteraction	%extendedTextInteraction.AttrGroup; >


<!-- Class: externalResponseProcessing -->

<!ENTITY % externalResponseProcessing.AttrGroup
"	location		%URI.Type;		#REQUIRED
	outcomeIdentifier		NMTOKEN		#REQUIRED
	">

<!ENTITY % externalResponseProcessing.ContentGroup
"(param*)">

<!ELEMENT externalResponseProcessing	(%externalResponseProcessing.ContentGroup;) >

<!ATTLIST externalResponseProcessing	%externalResponseProcessing.AttrGroup; >


<!-- Class: feedbackElement -->

<!ENTITY % feedbackElement.AttrGroup
"	outcomeIdentifier		NMTOKEN		#REQUIRED
	showHide		%showHide.Type;		#REQUIRED
	identifier		NMTOKEN		#REQUIRED
	">


<!-- Class: feedbackBlock -->

<!ENTITY % feedbackBlock.AttrGroup
"	%feedbackElement.AttrGroup;
	%simpleBlock.AttrGroup;
	">

<!ENTITY % feedbackBlock.ContentGroup
"(%simpleBlock.ContentGroup;)">

<!ELEMENT feedbackBlock	(%feedbackBlock.ContentGroup;) >

<!ATTLIST feedbackBlock	%feedbackBlock.AttrGroup; >


<!-- Class: feedbackInline -->

<!ENTITY % feedbackInline.AttrGroup
"	%feedbackElement.AttrGroup;
	%simpleInline.AttrGroup;
	">

<!ENTITY % feedbackInline.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT feedbackInline	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST feedbackInline	%feedbackInline.AttrGroup; >


<!-- Class: float -->

<!ELEMENT float	(#PCDATA)>


<!-- Class: gap -->

<!ENTITY % gap.AttrGroup
"	%associableChoice.AttrGroup;
	%inline.AttrGroup;
	">

<!ELEMENT gap	EMPTY >

<!ATTLIST gap	%gap.AttrGroup; >


<!-- Class: gapChoice -->

<!ENTITY % gapChoice.AttrGroup
"	%associableChoice.AttrGroup;
	matchMax		NMTOKEN		#REQUIRED
	">


<!-- Class: gapImg -->

<!ENTITY % gapImg.AttrGroup
"	%gapChoice.AttrGroup;
	">

<!ENTITY % gapImg.ContentGroup
"(object)">

<!ELEMENT gapImg	(%gapImg.ContentGroup;) >

<!ATTLIST gapImg	%gapImg.AttrGroup; >


<!-- Class: gapMatchInteraction -->

<!ENTITY % gapMatchInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	">

<!ENTITY % gapMatchInteraction.ContentGroup
"(%blockInteraction.ContentGroup;,(%gapChoice.ElementGroup;)+,(%block.ElementGroup;)+)">

<!ELEMENT gapMatchInteraction	(%gapMatchInteraction.ContentGroup;) >

<!ATTLIST gapMatchInteraction	%gapMatchInteraction.AttrGroup; >


<!-- Class: gapText -->

<!ENTITY % gapText.AttrGroup
"	%gapChoice.AttrGroup;
	">

<!ELEMENT gapText	(#PCDATA)>

<!ATTLIST gapText	%gapText.AttrGroup; >


<!-- Class: graphicInteraction -->

<!ENTITY % graphicInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	">

<!ENTITY % graphicInteraction.ContentGroup
"(%blockInteraction.ContentGroup;,object)">


<!-- Class: graphicAssociateInteraction -->

<!ENTITY % graphicAssociateInteraction.AttrGroup
"	%graphicInteraction.AttrGroup;
	maxAssociations		NMTOKEN		#REQUIRED
	">

<!ENTITY % graphicAssociateInteraction.ContentGroup
"(%graphicInteraction.ContentGroup;,associableHotspot+)">

<!ELEMENT graphicAssociateInteraction	(%graphicAssociateInteraction.ContentGroup;) >

<!ATTLIST graphicAssociateInteraction	%graphicAssociateInteraction.AttrGroup; >


<!-- Class: graphicGapMatchInteraction -->

<!ENTITY % graphicGapMatchInteraction.AttrGroup
"	%graphicInteraction.AttrGroup;
	">

<!ENTITY % graphicGapMatchInteraction.ContentGroup
"(%graphicInteraction.ContentGroup;,gapImg+,associableHotspot+)">

<!ELEMENT graphicGapMatchInteraction	(%graphicGapMatchInteraction.ContentGroup;) >

<!ATTLIST graphicGapMatchInteraction	%graphicGapMatchInteraction.AttrGroup; >


<!-- Class: graphicOrderInteraction -->

<!ENTITY % graphicOrderInteraction.AttrGroup
"	%graphicInteraction.AttrGroup;
	">

<!ENTITY % graphicOrderInteraction.ContentGroup
"(%graphicInteraction.ContentGroup;,hotspotChoice+)">

<!ELEMENT graphicOrderInteraction	(%graphicOrderInteraction.ContentGroup;) >

<!ATTLIST graphicOrderInteraction	%graphicOrderInteraction.AttrGroup; >


<!-- Class: gt -->

<!ENTITY % gt.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT gt	(%gt.ContentGroup;) >


<!-- Class: gte -->

<!ENTITY % gte.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT gte	(%gte.ContentGroup;) >


<!-- Class: h1 -->

<!ENTITY % h1.AttrGroup
"	%terminalBlock.AttrGroup;
	">

<!ENTITY % h1.ContentGroup
"(%terminalBlock.ContentGroup;)">

<!ELEMENT h1	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST h1	%h1.AttrGroup; >


<!-- Class: h2 -->

<!ENTITY % h2.AttrGroup
"	%terminalBlock.AttrGroup;
	">

<!ENTITY % h2.ContentGroup
"(%terminalBlock.ContentGroup;)">

<!ELEMENT h2	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST h2	%h2.AttrGroup; >


<!-- Class: h3 -->

<!ENTITY % h3.AttrGroup
"	%terminalBlock.AttrGroup;
	">

<!ENTITY % h3.ContentGroup
"(%terminalBlock.ContentGroup;)">

<!ELEMENT h3	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST h3	%h3.AttrGroup; >


<!-- Class: h4 -->

<!ENTITY % h4.AttrGroup
"	%terminalBlock.AttrGroup;
	">

<!ENTITY % h4.ContentGroup
"(%terminalBlock.ContentGroup;)">

<!ELEMENT h4	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST h4	%h4.AttrGroup; >


<!-- Class: h5 -->

<!ENTITY % h5.AttrGroup
"	%terminalBlock.AttrGroup;
	">

<!ENTITY % h5.ContentGroup
"(%terminalBlock.ContentGroup;)">

<!ELEMENT h5	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST h5	%h5.AttrGroup; >


<!-- Class: h6 -->

<!ENTITY % h6.AttrGroup
"	%terminalBlock.AttrGroup;
	">

<!ENTITY % h6.ContentGroup
"(%terminalBlock.ContentGroup;)">

<!ELEMENT h6	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST h6	%h6.AttrGroup; >


<!-- Class: hotspotChoice -->

<!ENTITY % hotspotChoice.AttrGroup
"	%choice.AttrGroup;
	%hotspot.AttrGroup;
	">

<!ELEMENT hotspotChoice	EMPTY >

<!ATTLIST hotspotChoice	%hotspotChoice.AttrGroup; >


<!-- Class: hotspotInteraction -->

<!ENTITY % hotspotInteraction.AttrGroup
"	%graphicInteraction.AttrGroup;
	maxChoices		NMTOKEN		#REQUIRED
	">

<!ENTITY % hotspotInteraction.ContentGroup
"(%graphicInteraction.ContentGroup;,hotspotChoice+)">

<!ELEMENT hotspotInteraction	(%hotspotInteraction.ContentGroup;) >

<!ATTLIST hotspotInteraction	%hotspotInteraction.AttrGroup; >


<!-- Class: hottext -->

<!ENTITY % hottext.AttrGroup
"	%choice.AttrGroup;
	%simpleInline.AttrGroup;
	">

<!ENTITY % hottext.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT hottext	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST hottext	%hottext.AttrGroup; >


<!-- Class: hottextInteraction -->

<!ENTITY % hottextInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	maxChoices		NMTOKEN		#REQUIRED
	">

<!ENTITY % hottextInteraction.ContentGroup
"(%blockInteraction.ContentGroup;,(%block.ElementGroup;)+)">

<!ELEMENT hottextInteraction	(%hottextInteraction.ContentGroup;) >

<!ATTLIST hottextInteraction	%hottextInteraction.AttrGroup; >


<!-- Class: hr -->

<!ENTITY % hr.AttrGroup
"	%block.AttrGroup;
	">

<!ELEMENT hr	EMPTY >

<!ATTLIST hr	%hr.AttrGroup; >


<!-- Class: i -->

<!ENTITY % i.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % i.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT i	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST i	%i.AttrGroup; >


<!-- Class: identifier -->

<!ELEMENT identifier	(#PCDATA)>


<!-- Class: img -->

<!ENTITY % img.AttrGroup
"	%inline.AttrGroup;
	src		%URI.Type;		#REQUIRED
	alt		CDATA		#REQUIRED
	longdesc		%URI.Type;		#IMPLIED
	height		CDATA		#IMPLIED
	width		CDATA		#IMPLIED
	">

<!ELEMENT img	EMPTY >

<!ATTLIST img	%img.AttrGroup; >


<!-- Class: index -->

<!ENTITY % index.AttrGroup
"	n		NMTOKEN		#REQUIRED
	">

<!ENTITY % index.ContentGroup
"((%expression.ElementGroup;))">

<!ELEMENT index	(%index.ContentGroup;) >

<!ATTLIST index	%index.AttrGroup; >


<!-- Class: inlineChoice -->

<!ENTITY % inlineChoice.AttrGroup
"	%choice.AttrGroup;
	">

<!ELEMENT inlineChoice	(#PCDATA)>

<!ATTLIST inlineChoice	%inlineChoice.AttrGroup; >


<!-- Class: inlineInteraction -->

<!ENTITY % inlineInteraction.AttrGroup
"	%inline.AttrGroup;
	%interaction.AttrGroup;
	">


<!-- Class: inlineChoiceInteraction -->

<!ENTITY % inlineChoiceInteraction.AttrGroup
"	%inlineInteraction.AttrGroup;
	shuffle		CDATA		#REQUIRED
	">

<!ENTITY % inlineChoiceInteraction.ContentGroup
"(inlineChoice+)">

<!ELEMENT inlineChoiceInteraction	(%inlineChoiceInteraction.ContentGroup;) >

<!ATTLIST inlineChoiceInteraction	%inlineChoiceInteraction.AttrGroup; >


<!-- Class: inside -->

<!ENTITY % inside.AttrGroup
"	shape		%shape.Type;		#REQUIRED
	coords		CDATA		#REQUIRED
	">

<!ENTITY % inside.ContentGroup
"((%expression.ElementGroup;))">

<!ELEMENT inside	(%inside.ContentGroup;) >

<!ATTLIST inside	%inside.AttrGroup; >


<!-- Class: integer -->

<!ELEMENT integer	(#PCDATA)>


<!-- Class: integerDivide -->

<!ENTITY % integerDivide.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT integerDivide	(%integerDivide.ContentGroup;) >


<!-- Class: integerModulus -->

<!ENTITY % integerModulus.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT integerModulus	(%integerModulus.ContentGroup;) >


<!-- Class: isNull -->

<!ENTITY % isNull.ContentGroup
"((%expression.ElementGroup;))">

<!ELEMENT isNull	(%isNull.ContentGroup;) >


<!-- Class: itemBody -->

<!ENTITY % itemBody.AttrGroup
"	%bodyElement.AttrGroup;
	">

<!ENTITY % itemBody.ContentGroup
"((%block.ElementGroup;)*)">

<!ELEMENT itemBody	(%itemBody.ContentGroup;) >

<!ATTLIST itemBody	%itemBody.AttrGroup; >


<!-- Class: itemProfile -->

<!ELEMENT itemProfile	EMPTY >


<!-- Class: itemSession -->

<!ENTITY % itemSession.AttrGroup
"	completion_status		NMTOKEN		#REQUIRED
	duration		CDATA		#IMPLIED
	">

<!ENTITY % itemSession.ContentGroup
"((%itemVariable.ElementGroup;)*,sessionContext)">


<!-- Pseudo-class: itemTemplate -->

<!ELEMENT itemTemplate	(#PCDATA)>


<!-- Class: itemVariable -->

<!ENTITY % itemVariable.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	">

<!ENTITY % itemVariable.ContentGroup
"(value*)">


<!-- Class: kbd -->

<!ENTITY % kbd.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % kbd.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT kbd	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST kbd	%kbd.AttrGroup; >


<!-- Class: language -->

<!ELEMENT language	(#PCDATA)>


<!-- Class: length -->

<!ELEMENT length	(#PCDATA)>


<!-- Class: li -->

<!ENTITY % li.AttrGroup
"	%bodyElement.AttrGroup;
	">

<!ENTITY % li.ContentGroup
"((%flow.ElementGroup;)*)">

<!ELEMENT li	(#PCDATA|%flow.ElementGroup;)* >

<!ATTLIST li	%li.AttrGroup; >


<!-- Class: lt -->

<!ENTITY % lt.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT lt	(%lt.ContentGroup;) >


<!-- Class: lte -->

<!ENTITY % lte.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT lte	(%lte.ContentGroup;) >


<!-- Class: mapEntry -->

<!ENTITY % mapEntry.AttrGroup
"	mapKey		CDATA		#REQUIRED
	mappedValue		CDATA		#REQUIRED
	">

<!ELEMENT mapEntry	EMPTY >

<!ATTLIST mapEntry	%mapEntry.AttrGroup; >


<!-- Class: mapResponse -->

<!ENTITY % mapResponse.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	">

<!ELEMENT mapResponse	EMPTY >

<!ATTLIST mapResponse	%mapResponse.AttrGroup; >


<!-- Class: mapResponsePoint -->

<!ENTITY % mapResponsePoint.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	">

<!ELEMENT mapResponsePoint	EMPTY >

<!ATTLIST mapResponsePoint	%mapResponsePoint.AttrGroup; >


<!-- Class: mapping -->

<!ENTITY % mapping.AttrGroup
"	lowerBound		CDATA		#IMPLIED
	upperBound		CDATA		#IMPLIED
	defaultValue		CDATA		#REQUIRED
	">

<!ENTITY % mapping.ContentGroup
"(mapEntry+)">

<!ELEMENT mapping	(%mapping.ContentGroup;) >

<!ATTLIST mapping	%mapping.AttrGroup; >


<!-- Class: match -->

<!ENTITY % match.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT match	(%match.ContentGroup;) >


<!-- Class: matchInteraction -->

<!ENTITY % matchInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	shuffle		CDATA		#REQUIRED
	maxAssociations		NMTOKEN		#REQUIRED
	">

<!ENTITY % matchInteraction.ContentGroup
"(%blockInteraction.ContentGroup;,simpleMatchSet,simpleMatchSet)">

<!ELEMENT matchInteraction	(%matchInteraction.ContentGroup;) >

<!ATTLIST matchInteraction	%matchInteraction.AttrGroup; >


<!-- Class: member -->

<!ENTITY % member.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT member	(%member.ContentGroup;) >


<!-- Class: mimeType -->

<!ELEMENT mimeType	(#PCDATA)>


<!-- Class: modalFeedback -->

<!ENTITY % modalFeedback.AttrGroup
"	outcomeIdentifier		NMTOKEN		#REQUIRED
	showHide		%showHide.Type;		#REQUIRED
	identifier		NMTOKEN		#REQUIRED
	title		CDATA		#IMPLIED
	">

<!ENTITY % modalFeedback.ContentGroup
"((%flow.ElementGroup;)*)">

<!ELEMENT modalFeedback	(#PCDATA|%flow.ElementGroup;)* >

<!ATTLIST modalFeedback	%modalFeedback.AttrGroup; >


<!-- Class: multiple -->

<!ENTITY % multiple.ContentGroup
"((%expression.ElementGroup;)*)">

<!ELEMENT multiple	(%multiple.ContentGroup;) >


<!-- Class: not -->

<!ENTITY % not.ContentGroup
"((%expression.ElementGroup;))">

<!ELEMENT not	(%not.ContentGroup;) >


<!-- Class: null -->

<!ELEMENT null	EMPTY >


<!-- Class: object -->

<!ENTITY % object.AttrGroup
"	%inline.AttrGroup;
	data		%URI.Type;		#IMPLIED
	dataValue		NMTOKEN		#IMPLIED
	type		CDATA		#REQUIRED
	width		CDATA		#IMPLIED
	height		CDATA		#IMPLIED
	">

<!ENTITY % object.ContentGroup
"((%objectFlow.ElementGroup;)*)">

<!ELEMENT object	(#PCDATA|%objectFlow.ElementGroup;)* >

<!ATTLIST object	%object.AttrGroup; >


<!-- Class: ol -->

<!ENTITY % ol.AttrGroup
"	%block.AttrGroup;
	">

<!ENTITY % ol.ContentGroup
"(li*)">

<!ELEMENT ol	(%ol.ContentGroup;) >

<!ATTLIST ol	%ol.AttrGroup; >


<!-- Class: or -->

<!ENTITY % or.ContentGroup
"((%expression.ElementGroup;)+)">

<!ELEMENT or	(%or.ContentGroup;) >


<!-- Class: orderInteraction -->

<!ENTITY % orderInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	shuffle		CDATA		#REQUIRED
	">

<!ENTITY % orderInteraction.ContentGroup
"(%blockInteraction.ContentGroup;,simpleChoice+)">

<!ELEMENT orderInteraction	(%orderInteraction.ContentGroup;) >

<!ATTLIST orderInteraction	%orderInteraction.AttrGroup; >


<!-- Class: ordered -->

<!ENTITY % ordered.ContentGroup
"((%expression.ElementGroup;)*)">

<!ELEMENT ordered	(%ordered.ContentGroup;) >


<!-- Class: ordinaryStatistic -->

<!ENTITY % ordinaryStatistic.AttrGroup
"	%itemStatistic.AttrGroup;
	">

<!ENTITY % ordinaryStatistic.ContentGroup
"(%itemStatistic.ContentGroup;,value)">

<!ELEMENT ordinaryStatistic	(%ordinaryStatistic.ContentGroup;) >

<!ATTLIST ordinaryStatistic	%ordinaryStatistic.AttrGroup; >


<!-- Class: variableDeclaration -->

<!ENTITY % variableDeclaration.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	cardinality		%cardinality.Type;		#REQUIRED
	baseType		%baseType.Type;		#REQUIRED
	">

<!ENTITY % variableDeclaration.ContentGroup
"(defaultValue?)">


<!-- Class: outcomeDeclaration -->

<!ENTITY % outcomeDeclaration.AttrGroup
"	%variableDeclaration.AttrGroup;
	interpretation		CDATA		#IMPLIED
	longInterpretation		%URI.Type;		#IMPLIED
	">

<!ENTITY % outcomeDeclaration.ContentGroup
"(%variableDeclaration.ContentGroup;)">

<!ELEMENT outcomeDeclaration	(%outcomeDeclaration.ContentGroup;) >

<!ATTLIST outcomeDeclaration	%outcomeDeclaration.AttrGroup; >


<!-- Class: outcomeVariable -->

<!ENTITY % outcomeVariable.AttrGroup
"	%itemVariable.AttrGroup;
	">

<!ENTITY % outcomeVariable.ContentGroup
"(%itemVariable.ContentGroup;)">

<!ELEMENT outcomeVariable	(%outcomeVariable.ContentGroup;) >

<!ATTLIST outcomeVariable	%outcomeVariable.AttrGroup; >


<!-- Class: p -->

<!ENTITY % p.AttrGroup
"	%terminalBlock.AttrGroup;
	">

<!ENTITY % p.ContentGroup
"(%terminalBlock.ContentGroup;)">

<!ELEMENT p	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST p	%p.AttrGroup; >


<!-- Class: param -->

<!ENTITY % param.AttrGroup
"	name		CDATA		#REQUIRED
	value		CDATA		#REQUIRED
	valuetype		%paramType.Type;		#REQUIRED
	type		CDATA		#IMPLIED
	">

<!ELEMENT param	EMPTY >

<!ATTLIST param	%param.AttrGroup; >


<!-- Class: patternMatch -->

<!ENTITY % patternMatch.AttrGroup
"	pattern		CDATA		#REQUIRED
	">

<!ENTITY % patternMatch.ContentGroup
"((%expression.ElementGroup;))">

<!ELEMENT patternMatch	(%patternMatch.ContentGroup;) >

<!ATTLIST patternMatch	%patternMatch.AttrGroup; >


<!-- Class: positionObjectInteraction -->

<!ENTITY % positionObjectInteraction.AttrGroup
"	%interaction.AttrGroup;
	maxChoices		NMTOKEN		#REQUIRED
	">

<!ENTITY % positionObjectInteraction.ContentGroup
"(object)">

<!ELEMENT positionObjectInteraction	(%positionObjectInteraction.ContentGroup;) >

<!ATTLIST positionObjectInteraction	%positionObjectInteraction.AttrGroup; >


<!-- Class: positionObjectStage -->

<!ENTITY % positionObjectStage.AttrGroup
"	%block.AttrGroup;
	">

<!ENTITY % positionObjectStage.ContentGroup
"(object,positionObjectInteraction+)">

<!ELEMENT positionObjectStage	(%positionObjectStage.ContentGroup;) >

<!ATTLIST positionObjectStage	%positionObjectStage.AttrGroup; >


<!-- Class: power -->

<!ENTITY % power.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT power	(%power.ContentGroup;) >


<!-- Class: pre -->

<!ENTITY % pre.AttrGroup
"	%terminalBlock.AttrGroup;
	">

<!ENTITY % pre.ContentGroup
"(%terminalBlock.ContentGroup;)">

<!ELEMENT pre	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST pre	%pre.AttrGroup; >


<!-- Class: printedVariable -->

<!ENTITY % printedVariable.AttrGroup
"	%inline.AttrGroup;
	identifier		NMTOKEN		#REQUIRED
	base		NMTOKEN		#IMPLIED
	format		CDATA		#IMPLIED
	">

<!ELEMENT printedVariable	EMPTY >

<!ATTLIST printedVariable	%printedVariable.AttrGroup; >


<!-- Class: product -->

<!ENTITY % product.ContentGroup
"((%expression.ElementGroup;)+)">

<!ELEMENT product	(%product.ContentGroup;) >


<!-- Class: prompt -->

<!ENTITY % prompt.AttrGroup
"	%bodyElement.AttrGroup;
	">

<!ENTITY % prompt.ContentGroup
"((%inline.ElementGroup;)*)">

<!ELEMENT prompt	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST prompt	%prompt.AttrGroup; >


<!-- Class: q -->

<!ENTITY % q.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % q.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT q	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST q	%q.AttrGroup; >


<!-- Class: qtiMetadata -->

<!ENTITY % qtiMetadata.ContentGroup
"(itemTemplate?,timeDependent?,composite?,interactionType*,canComputerScore?,feedbackType?,solutionAvailable?,toolName?,toolVersion?,toolVendor?)">

<!ELEMENT qtiMetadata	(%qtiMetadata.ContentGroup;) >


<!-- Class: random -->

<!ENTITY % random.ContentGroup
"((%expression.ElementGroup;))">

<!ELEMENT random	(%random.ContentGroup;) >


<!-- Class: randomFloat -->

<!ENTITY % randomFloat.AttrGroup
"	min		CDATA		#REQUIRED
	max		CDATA		#REQUIRED
	">

<!ELEMENT randomFloat	EMPTY >

<!ATTLIST randomFloat	%randomFloat.AttrGroup; >


<!-- Class: randomInteger -->

<!ENTITY % randomInteger.AttrGroup
"	min		NMTOKEN		#REQUIRED
	max		NMTOKEN		#REQUIRED
	step		NMTOKEN		#IMPLIED
	">

<!ELEMENT randomInteger	EMPTY >

<!ATTLIST randomInteger	%randomInteger.AttrGroup; >


<!-- Class: responseCondition -->

<!ENTITY % responseCondition.ContentGroup
"(responseIf,responseElseIf*,responseElse?)">

<!ELEMENT responseCondition	(%responseCondition.ContentGroup;) >


<!-- Class: responseDeclaration -->

<!ENTITY % responseDeclaration.AttrGroup
"	%variableDeclaration.AttrGroup;
	">

<!ENTITY % responseDeclaration.ContentGroup
"(%variableDeclaration.ContentGroup;,correctResponse?,mapping?,areaMapping?)">

<!ELEMENT responseDeclaration	(%responseDeclaration.ContentGroup;) >

<!ATTLIST responseDeclaration	%responseDeclaration.AttrGroup; >


<!-- Class: responseElse -->

<!ENTITY % responseElse.ContentGroup
"((%responseRule.ElementGroup;)*)">

<!ELEMENT responseElse	(%responseElse.ContentGroup;) >


<!-- Class: responseElseIf -->

<!ENTITY % responseElseIf.ContentGroup
"((%expression.ElementGroup;),(%responseRule.ElementGroup;)*)">

<!ELEMENT responseElseIf	(%responseElseIf.ContentGroup;) >


<!-- Class: responseIf -->

<!ENTITY % responseIf.ContentGroup
"((%expression.ElementGroup;),(%responseRule.ElementGroup;)*)">

<!ELEMENT responseIf	(%responseIf.ContentGroup;) >


<!-- Class: responseProcessing -->

<!ENTITY % responseProcessing.AttrGroup
"	template		%URI.Type;		#IMPLIED
	templateLocation		%URI.Type;		#IMPLIED
	">

<!ENTITY % responseProcessing.ContentGroup
"((%responseRule.ElementGroup;)*)">

<!ELEMENT responseProcessing	(%responseProcessing.ContentGroup;) >

<!ATTLIST responseProcessing	%responseProcessing.AttrGroup; >


<!-- Class: responseVariable -->

<!ENTITY % responseVariable.AttrGroup
"	%itemVariable.AttrGroup;
	">

<!ENTITY % responseVariable.ContentGroup
"(%itemVariable.ContentGroup;)">

<!ELEMENT responseVariable	(%responseVariable.ContentGroup;) >

<!ATTLIST responseVariable	%responseVariable.AttrGroup; >


<!-- Class: rubricBlock -->

<!ENTITY % rubricBlock.AttrGroup
"	%simpleBlock.AttrGroup;
	view		CDATA		#REQUIRED
	">

<!ENTITY % rubricBlock.ContentGroup
"(%simpleBlock.ContentGroup;)">

<!ELEMENT rubricBlock	(%rubricBlock.ContentGroup;) >

<!ATTLIST rubricBlock	%rubricBlock.AttrGroup; >


<!-- Class: samp -->

<!ENTITY % samp.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % samp.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT samp	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST samp	%samp.AttrGroup; >


<!-- Class: selectPointInteraction -->

<!ENTITY % selectPointInteraction.AttrGroup
"	%graphicInteraction.AttrGroup;
	maxChoices		NMTOKEN		#REQUIRED
	">

<!ENTITY % selectPointInteraction.ContentGroup
"(%graphicInteraction.ContentGroup;)">

<!ELEMENT selectPointInteraction	(%selectPointInteraction.ContentGroup;) >

<!ATTLIST selectPointInteraction	%selectPointInteraction.AttrGroup; >


<!-- Class: sessionContext -->

<!ELEMENT sessionContext	EMPTY >


<!-- Class: setCorrectResponse -->

<!ENTITY % setCorrectResponse.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	">

<!ENTITY % setCorrectResponse.ContentGroup
"((%expression.ElementGroup;))">

<!ELEMENT setCorrectResponse	(%setCorrectResponse.ContentGroup;) >

<!ATTLIST setCorrectResponse	%setCorrectResponse.AttrGroup; >


<!-- Class: setDefaultValue -->

<!ENTITY % setDefaultValue.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	">

<!ENTITY % setDefaultValue.ContentGroup
"((%expression.ElementGroup;))">

<!ELEMENT setDefaultValue	(%setDefaultValue.ContentGroup;) >

<!ATTLIST setDefaultValue	%setDefaultValue.AttrGroup; >


<!-- Class: setOutcomeValue -->

<!ENTITY % setOutcomeValue.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	">

<!ENTITY % setOutcomeValue.ContentGroup
"((%expression.ElementGroup;))">

<!ELEMENT setOutcomeValue	(%setOutcomeValue.ContentGroup;) >

<!ATTLIST setOutcomeValue	%setOutcomeValue.AttrGroup; >


<!-- Class: setTemplateValue -->

<!ENTITY % setTemplateValue.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	">

<!ENTITY % setTemplateValue.ContentGroup
"((%expression.ElementGroup;))">

<!ELEMENT setTemplateValue	(%setTemplateValue.ContentGroup;) >

<!ATTLIST setTemplateValue	%setTemplateValue.AttrGroup; >


<!-- Class: simpleAssociableChoice -->

<!ENTITY % simpleAssociableChoice.AttrGroup
"	%associableChoice.AttrGroup;
	matchMax		NMTOKEN		#REQUIRED
	">

<!ENTITY % simpleAssociableChoice.ContentGroup
"((%flow.ElementGroup;)*)">

<!ELEMENT simpleAssociableChoice	(#PCDATA|%flow.ElementGroup;)* >

<!ATTLIST simpleAssociableChoice	%simpleAssociableChoice.AttrGroup; >


<!-- Class: simpleChoice -->

<!ENTITY % simpleChoice.AttrGroup
"	%bodyElement.AttrGroup;
	%choice.AttrGroup;
	">

<!ENTITY % simpleChoice.ContentGroup
"((%flow.ElementGroup;)*)">

<!ELEMENT simpleChoice	(#PCDATA|%flow.ElementGroup;)* >

<!ATTLIST simpleChoice	%simpleChoice.AttrGroup; >


<!-- Class: simpleMatchSet -->

<!ENTITY % simpleMatchSet.ContentGroup
"(simpleAssociableChoice*)">

<!ELEMENT simpleMatchSet	(%simpleMatchSet.ContentGroup;) >


<!-- Class: sliderInteraction -->

<!ENTITY % sliderInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	lowerBound		CDATA		#REQUIRED
	upperBound		CDATA		#REQUIRED
	step		NMTOKEN		#IMPLIED
	stepLabel		CDATA		#IMPLIED
	orientation		%orientation.Type;		#IMPLIED
	reverse		CDATA		#IMPLIED
	">

<!ENTITY % sliderInteraction.ContentGroup
"(%blockInteraction.ContentGroup;)">

<!ELEMENT sliderInteraction	(%sliderInteraction.ContentGroup;) >

<!ATTLIST sliderInteraction	%sliderInteraction.AttrGroup; >


<!-- Class: small -->

<!ENTITY % small.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % small.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT small	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST small	%small.AttrGroup; >


<!-- Pseudo-class: solutionAvailable -->

<!ELEMENT solutionAvailable	(#PCDATA)>


<!-- Class: span -->

<!ENTITY % span.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % span.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT span	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST span	%span.AttrGroup; >


<!-- Class: string -->

<!ELEMENT string	(#PCDATA)>


<!-- Class: string256 -->

<!ELEMENT string256	(#PCDATA)>


<!-- Class: stringMatch -->

<!ENTITY % stringMatch.AttrGroup
"	caseSensitive		CDATA		#REQUIRED
	substring		CDATA		#REQUIRED
	">

<!ENTITY % stringMatch.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT stringMatch	(%stringMatch.ContentGroup;) >

<!ATTLIST stringMatch	%stringMatch.AttrGroup; >


<!-- Class: strong -->

<!ENTITY % strong.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % strong.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT strong	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST strong	%strong.AttrGroup; >


<!-- Class: stylesheet -->

<!ENTITY % stylesheet.AttrGroup
"	href		%URI.Type;		#REQUIRED
	type		CDATA		#REQUIRED
	media		CDATA		#IMPLIED
	title		CDATA		#IMPLIED
	">

<!ELEMENT stylesheet	EMPTY >

<!ATTLIST stylesheet	%stylesheet.AttrGroup; >


<!-- Class: sub -->

<!ENTITY % sub.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % sub.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT sub	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST sub	%sub.AttrGroup; >


<!-- Class: substring -->

<!ENTITY % substring.AttrGroup
"	caseSensitive		CDATA		#REQUIRED
	">

<!ENTITY % substring.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT substring	(%substring.ContentGroup;) >

<!ATTLIST substring	%substring.AttrGroup; >


<!-- Class: subtract -->

<!ENTITY % subtract.ContentGroup
"((%expression.ElementGroup;),(%expression.ElementGroup;))">

<!ELEMENT subtract	(%subtract.ContentGroup;) >


<!-- Class: sum -->

<!ENTITY % sum.ContentGroup
"((%expression.ElementGroup;)+)">

<!ELEMENT sum	(%sum.ContentGroup;) >


<!-- Class: sup -->

<!ENTITY % sup.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % sup.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT sup	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST sup	%sup.AttrGroup; >


<!-- Class: table -->

<!ENTITY % table.AttrGroup
"	%block.AttrGroup;
	">

<!ENTITY % table.ContentGroup
"(caption?,col*,colgroup*,thead?,tfoot?,tbody+)">

<!ELEMENT table	(%table.ContentGroup;) >

<!ATTLIST table	%table.AttrGroup; >


<!-- Class: tableCell -->

<!ENTITY % tableCell.AttrGroup
"	%bodyElement.AttrGroup;
	">

<!ENTITY % tableCell.ContentGroup
"((%flow.ElementGroup;)*)">


<!-- Class: tbody -->

<!ENTITY % tbody.AttrGroup
"	%bodyElement.AttrGroup;
	">

<!ENTITY % tbody.ContentGroup
"(tr+)">

<!ELEMENT tbody	(%tbody.ContentGroup;) >

<!ATTLIST tbody	%tbody.AttrGroup; >


<!-- Class: td -->

<!ENTITY % td.AttrGroup
"	%tableCell.AttrGroup;
	">

<!ENTITY % td.ContentGroup
"(%tableCell.ContentGroup;)">

<!ELEMENT td	(#PCDATA|%flow.ElementGroup;)* >

<!ATTLIST td	%td.AttrGroup; >


<!-- Class: templateCondition -->

<!ENTITY % templateCondition.ContentGroup
"(templateIf,templateElseIf*,templateElse?)">

<!ELEMENT templateCondition	(%templateCondition.ContentGroup;) >


<!-- Class: templateDeclaration -->

<!ENTITY % templateDeclaration.AttrGroup
"	%variableDeclaration.AttrGroup;
	">

<!ENTITY % templateDeclaration.ContentGroup
"(%variableDeclaration.ContentGroup;)">

<!ELEMENT templateDeclaration	(%templateDeclaration.ContentGroup;) >

<!ATTLIST templateDeclaration	%templateDeclaration.AttrGroup; >


<!-- Class: templateElse -->

<!ENTITY % templateElse.ContentGroup
"((%templateRule.ElementGroup;)*)">

<!ELEMENT templateElse	(%templateElse.ContentGroup;) >


<!-- Class: templateElseIf -->

<!ENTITY % templateElseIf.ContentGroup
"((%expression.ElementGroup;),(%templateRule.ElementGroup;)*)">

<!ELEMENT templateElseIf	(%templateElseIf.ContentGroup;) >


<!-- Class: templateIf -->

<!ENTITY % templateIf.ContentGroup
"((%expression.ElementGroup;),(%templateRule.ElementGroup;)*)">

<!ELEMENT templateIf	(%templateIf.ContentGroup;) >


<!-- Class: templateProcessing -->

<!ENTITY % templateProcessing.ContentGroup
"((%templateRule.ElementGroup;)+)">

<!ELEMENT templateProcessing	(%templateProcessing.ContentGroup;) >


<!-- Class: templateVariable -->

<!ENTITY % templateVariable.AttrGroup
"	%itemVariable.AttrGroup;
	">

<!ENTITY % templateVariable.ContentGroup
"(%itemVariable.ContentGroup;)">

<!ELEMENT templateVariable	(%templateVariable.ContentGroup;) >

<!ATTLIST templateVariable	%templateVariable.AttrGroup; >


<!-- Class: textEntryInteraction -->

<!ENTITY % textEntryInteraction.AttrGroup
"	%inlineInteraction.AttrGroup;
	%stringInteraction.AttrGroup;
	">

<!ELEMENT textEntryInteraction	EMPTY >

<!ATTLIST textEntryInteraction	%textEntryInteraction.AttrGroup; >


<!-- Class: textRun bound to PCDATA -->


<!-- Class: tfoot -->

<!ENTITY % tfoot.AttrGroup
"	%bodyElement.AttrGroup;
	">

<!ENTITY % tfoot.ContentGroup
"(th+)">

<!ELEMENT tfoot	(%tfoot.ContentGroup;) >

<!ATTLIST tfoot	%tfoot.AttrGroup; >


<!-- Class: th -->

<!ENTITY % th.AttrGroup
"	%tableCell.AttrGroup;
	">

<!ENTITY % th.ContentGroup
"(%tableCell.ContentGroup;)">

<!ELEMENT th	(#PCDATA|%flow.ElementGroup;)* >

<!ATTLIST th	%th.AttrGroup; >


<!-- Class: thead -->

<!ENTITY % thead.AttrGroup
"	%bodyElement.AttrGroup;
	">

<!ENTITY % thead.ContentGroup
"(tr+)">

<!ELEMENT thead	(%thead.ContentGroup;) >

<!ATTLIST thead	%thead.AttrGroup; >


<!-- Pseudo-class: timeDependent -->

<!ELEMENT timeDependent	(#PCDATA)>


<!-- Pseudo-class: toolName -->

<!ELEMENT toolName	(#PCDATA)>


<!-- Pseudo-class: toolVendor -->

<!ELEMENT toolVendor	(#PCDATA)>


<!-- Pseudo-class: toolVersion -->

<!ELEMENT toolVersion	(#PCDATA)>


<!-- Class: tr -->

<!ENTITY % tr.AttrGroup
"	%bodyElement.AttrGroup;
	">

<!ENTITY % tr.ContentGroup
"((%tableCell.ElementGroup;)+)">

<!ELEMENT tr	(%tr.ContentGroup;) >

<!ATTLIST tr	%tr.AttrGroup; >


<!-- Class: tt -->

<!ENTITY % tt.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % tt.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT tt	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST tt	%tt.AttrGroup; >


<!-- Class: ul -->

<!ENTITY % ul.AttrGroup
"	%block.AttrGroup;
	">

<!ENTITY % ul.ContentGroup
"(li*)">

<!ELEMENT ul	(%ul.ContentGroup;) >

<!ATTLIST ul	%ul.AttrGroup; >


<!-- Class: uploadInteraction -->

<!ENTITY % uploadInteraction.AttrGroup
"	%blockInteraction.AttrGroup;
	type		CDATA		#IMPLIED
	">

<!ENTITY % uploadInteraction.ContentGroup
"(%blockInteraction.ContentGroup;)">

<!ELEMENT uploadInteraction	(%uploadInteraction.ContentGroup;) >

<!ATTLIST uploadInteraction	%uploadInteraction.AttrGroup; >


<!-- Class: usageData -->

<!ENTITY % usageData.ContentGroup
"((%itemStatistic.ElementGroup;)*)">

<!ELEMENT usageData	(%usageData.ContentGroup;) >


<!-- Class: value -->

<!ELEMENT value	(#PCDATA)>


<!-- Class: var -->

<!ENTITY % var.AttrGroup
"	%simpleInline.AttrGroup;
	">

<!ENTITY % var.ContentGroup
"(%simpleInline.ContentGroup;)">

<!ELEMENT var	(#PCDATA|%inline.ElementGroup;)* >

<!ATTLIST var	%var.AttrGroup; >


<!-- Class: variable -->

<!ENTITY % variable.AttrGroup
"	identifier		NMTOKEN		#REQUIRED
	">

<!ELEMENT variable	EMPTY >

<!ATTLIST variable	%variable.AttrGroup; >

