26 import(
'lib.pkp.classes.filter.TypeDescription');
27 import(
'lib.pkp.classes.filter.TypeDescriptionFactory');
29 define(
'XML_TYPE_DESCRIPTION_VALIDATE_NONE',
'*');
30 define(
'XML_TYPE_DESCRIPTION_VALIDATE_SCHEMA',
'schema');
31 define(
'XML_TYPE_DESCRIPTION_VALIDATE_DTD',
'dtd');
32 define(
'XML_TYPE_DESCRIPTION_VALIDATE_RELAX_NG',
'relax-ng');
49 parent::__construct($typeName);
60 return TYPE_DESCRIPTION_NAMESPACE_XML;
68 $this->_validationStrategy = $validationStrategy;
79 $typeNameParts = explode(
'(', $typeName);
80 switch (count($typeNameParts)) {
83 $validationStrategy = $typeName;
84 if ($validationStrategy != XML_TYPE_DESCRIPTION_VALIDATE_NONE
85 && $validationStrategy != XML_TYPE_DESCRIPTION_VALIDATE_DTD)
return false;
86 $validationSource =
null;
91 $validationStrategy = $typeNameParts[0];
92 if ($validationStrategy != XML_TYPE_DESCRIPTION_VALIDATE_SCHEMA
93 && $validationStrategy != XML_TYPE_DESCRIPTION_VALIDATE_RELAX_NG)
return false;
94 $validationSource = trim($typeNameParts[1],
')');
101 $this->_validationStrategy = $validationStrategy;
102 $this->_validationSource = $validationSource;
112 if (!is_a($object,
'DOMDocument') && !is_string($object))
return false;
115 if ($this->_validationStrategy == XML_TYPE_DESCRIPTION_VALIDATE_NONE)
return true;
118 if (is_string($object)) {
119 $xmlDom =
new DOMDocument();
120 $xmlDom->loadXML($object);
125 switch($this->_validationStrategy) {
128 case XML_TYPE_DESCRIPTION_VALIDATE_DTD:
129 if (!$xmlDom->validate())
return false;
132 case XML_TYPE_DESCRIPTION_VALIDATE_SCHEMA:
133 libxml_use_internal_errors(
true);
134 if (!$xmlDom->schemaValidate($this->_validationSource)) {
135 $errors = libxml_get_errors();
141 case XML_TYPE_DESCRIPTION_VALIDATE_RELAX_NG:
142 if (!$xmlDom->relaxNGValidate($this->_validationSource))
return false;