Десятичный тип данных pyxb теряет нули

Я заметил, что pyxb decimal Тип данных не сохраняет конечные нули при рендеринге в XML. Виновником является призыв к normalize() в следующей строке XsdLiteral функция, в строке 159 из binding/datatypes.py:

(sign, digits, exponent) = value.normalize().as_tuple()

(где value это пример Python decimal). Это небольшая проблема для меня, потому что веб-сервис, с которым я пытаюсь взаимодействовать, требует номера версии в форме X.000 и pyxb усекает это до X.0,

Это ожидаемое поведение? или требуется по какому-то стандарту? Делают ли это и другие библиотеки, генерирующие XML-схемы? Мое решение сейчас заключается в использовании string вместо этого, но код будет легко изменить, если он ничего не сломает.

2 ответа

Решение

Официальный ответ PyXB здесь, но из описания канонического представления десятичного значения xs:

Leading and trailing zeroes are prohibited subject to the following:
there must be at least one digit to the right and to the left of the
decimal point which may be a zero.

Также в описании самого десятичного числа:

Precision is not reflected in this value space; the number 2.0 is not
distinct from the number 2.00.

Поставщик услуг не соответствует требованиям, требуя предоставления конечных нулей.

У меня нет опыта работы с pyxb, но я предполагаю, что в целом нужно, чтобы XML был настолько компактным, насколько это возможно, чтобы сохранить память, и поэтому десятичные дроби усекаются, чтобы сохранить байты.

Кажется, это не совсем обычный случай использования десятичной дроби. Я понимаю, что десятичная дробь должна использоваться для хранения математических числовых значений, и поэтому усечение всегда возможно. Поскольку ваш случай является исключительным, модуль, вероятно, не был разработан, чтобы делать то, что вы хотите.

Другие вопросы по тегам