Что делать, если у Libxml2 базовый тип данных более строгий, чем у производного типа данных XSD?

Если третья сторона (скажем, правительство) предоставляет 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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]