protected function unmarshall(DOMElement $element)
    {
        $expressionElt = self::getFirstChildElement($element);

        try {
            return new TemplateConstraint($this->getMarshallerFactory()->createMarshaller($expressionElt)->unmarshall($expressionElt));
        } catch (InvalidArgumentException $e) {
            $msg = "A 'templateConstraint' element must contain an 'expression' element, '" . $expressionElt->localName . "' given.";
            throw new UnmarshallingException($msg, $element);
        }

        return new TemplateConstraint($expressions);
    }