Если третья сторона (скажем, правительство) предоставляет XSD, который менее строг, чем Libxml2, относительно базовых типов данных, например, [XSD’s decimalDerived maxInclusive]> [Libxml2 decimal maxInclusive]. Следует ли в этом случае просто изменить XSD для соответствия ограничениям Libxml2 или я что-то упустил?
Мне не нравится идея модификации стороннего XSD, возможно, существует какой-то стандартный метод решения этой проблемы без изменения XSD. С другой стороны, и, что еще более важно, предоставляемый XSD предназначен для взаимозаменяемой информации, я не должен ограничивать полученный XML больше, чем то, что говорит XSD.
Например XSD со следующим типом:
<xs:simpleType name="AmountType">
<xs:restriction base="xs:decimal">
<xs:totalDigits value="100"/>
<xs:fractionDigits value="20"/>
<xs:maxInclusive value="9999999999999999999999999"/><!-- 25 DIGITS -->
</xs:restriction>
</xs:simpleType>
Будет вызывать сбой DOMDocument :: schemaValidate (), возвращать false и выдавать предупреждение, даже если libxml_use_internal_errors(true);
, В этом случае с libxml_get_errors();
Следующие ошибки фиксируются при проверке схемы XML по XSD:
Ошибка 1824:
Элемент ‘{http://www.w3.org/2001/XMLSchema} MaxInclusive ‘:
‘9999999999999999999999999’ не является допустимым значением
тип атома ‘xs: десятичный’. в /path/schema.xsd в строке X
Ошибка 1717:
Элемент ‘{http://www.w3.org/2001/XMLSchema} maxInclusive ‘: значение
«9999999999999999999999999» фасета не проверяется
по отношению к базовому типу ‘{http://www.w3.org/2001/XMLSchema}десятичный’. в
/path/schema.xsd в строке X
Задача ещё не решена.
Других решений пока нет …