/**
  * Unmarshall an extended version of an assessmentItemRef DOMElement into 
  * a ExtendedAssessmentItemRef object.
  * 
  * @return ExtendedAssessmentItemRef A ExtendedAssessmentItemRef object.
  */
 protected function unmarshall(DOMElement $element)
 {
     $baseComponent = parent::unmarshall($element);
     $identifier = $baseComponent->getIdentifier();
     $href = $baseComponent->getHref();
     $compactAssessmentItemRef = new ExtendedAssessmentItemRef($identifier, $href);
     $compactAssessmentItemRef->setRequired($baseComponent->isRequired());
     $compactAssessmentItemRef->setFixed($baseComponent->isFixed());
     $compactAssessmentItemRef->setPreConditions($baseComponent->getPreConditions());
     $compactAssessmentItemRef->setBranchRules($baseComponent->getBranchRules());
     $compactAssessmentItemRef->setItemSessionControl($baseComponent->getItemSessionControl());
     $compactAssessmentItemRef->setTimeLimits($baseComponent->getTimeLimits());
     $compactAssessmentItemRef->setTemplateDefaults($baseComponent->getTemplateDefaults());
     $compactAssessmentItemRef->setWeights($baseComponent->getWeights());
     $compactAssessmentItemRef->setVariableMappings($baseComponent->getVariableMappings());
     $compactAssessmentItemRef->setCategories($baseComponent->getCategories());
     $responseDeclarationElts = self::getChildElementsByTagName($element, 'responseDeclaration');
     $responseDeclarations = new ResponseDeclarationCollection();
     foreach ($responseDeclarationElts as $responseDeclarationElt) {
         $marshaller = $this->getMarshallerFactory()->createMarshaller($responseDeclarationElt);
         $responseDeclarations[] = $marshaller->unmarshall($responseDeclarationElt);
     }
     $compactAssessmentItemRef->setResponseDeclarations($responseDeclarations);
     $outcomeDeclarationElts = self::getChildElementsByTagName($element, 'outcomeDeclaration');
     $outcomeDeclarations = new OutcomeDeclarationCollection();
     foreach ($outcomeDeclarationElts as $outcomeDeclarationElt) {
         $marshaller = $this->getMarshallerFactory()->createMarshaller($outcomeDeclarationElt);
         $outcomeDeclarations[] = $marshaller->unmarshall($outcomeDeclarationElt);
     }
     $compactAssessmentItemRef->setOutcomeDeclarations($outcomeDeclarations);
     $responseProcessingElts = self::getChildElementsByTagName($element, 'responseProcessing');
     if (count($responseProcessingElts) === 1) {
         $marshaller = $this->getMarshallerFactory()->createMarshaller($responseProcessingElts[0]);
         $compactAssessmentItemRef->setResponseProcessing($marshaller->unmarshall($responseProcessingElts[0]));
     }
     if (($adaptive = static::getDOMElementAttributeAs($element, 'adaptive', 'boolean')) !== null) {
         $compactAssessmentItemRef->setAdaptive($adaptive);
     }
     if (($timeDependent = static::getDOMElementAttributeAs($element, 'timeDependent', 'boolean')) !== null) {
         $compactAssessmentItemRef->setTimeDependent($timeDependent);
     } else {
         $msg = "The mandatory attribute 'timeDependent' is missing from element '" . $element->localName . "'.";
         throw new UnmarshallingException($msg, $element);
     }
     return $compactAssessmentItemRef;
 }