Шаблон XSD приемлем для десятичных? - PullRequest
4 голосов
/ 23 февраля 2012

У нас есть запрос на реализацию нашего ответа веб-сервиса, чтобы цифры xsd: десятичной дроби были дополнены нулями, если они недостаточно длинные, если шаблон указывает на это. Мне интересно, является ли это разумным запросом и предполагается ли использовать xsd: decimal с такими шаблонами. Вот соответствующая часть xsd согласно их спецификациям:

<xsd:simpleType>
   <xsd:restriction base="xsd:decimal">
       <xsd:totalDigits value="14"/>
       <xsd:fractionDigits value="2"/>
       <xsd:pattern value="[\-+]?[0-9]{1,12}[.][0-9]{2}"/>
   </xsd:restriction>
</xsd:simpleType>

Таким образом, дробная часть установлена ​​на 2, что означает, что точность может составлять максимум 2 цифры. В соответствии с http://zvon.org/xxl/XMLSchemaTutorial/Output/ser_types_st2.html также будет хорошо, если будет меньше цифр дроби (например, для числа типа 5.1)

Но согласно шаблону {2} всегда должно быть две цифры дроби.

Мы разрабатываем общую платформу для разработки приложений, и пока неизвестно, для чего будет использоваться десятичное число заранее (валюта, значения pH, расстояния и т. Д.). Этот случай связан с конкретным проектом, в котором используется наша платформа, но обычно мы не знаем, какие данные передаются. В этом отношении мы могли бы решить просто следовать WSDL, в котором говорится, что он должен иметь две дробные цифры. но наша реализация должна быть очень общей.

Ничто не говорит о том, с какими именно этими цифрами дроби следует дополнять или даже о том, что мы должны дополнять вместо того, чтобы просто пропустить эту десятичную дробь в целом. Теоретически мы можем решить дополнить 5, пока он не будет соответствовать шаблону. Насколько я знаю, шаблоны используются редко, и если они используются, они используются для таких вещей, как пароли. Хотя спецификация XSD является неопределенной, было бы полезно, если бы кто-то мог пролить свет на то, является ли это правильным использованием XSD, и если для нас имеет смысл принять решение дополнить нулями.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

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

Я могу думать о JAXB на Java или xsd / svcutil / etc.exe на .NET; Быстрая проверка этих довольно распространенных инструментов на этом фрагменте схемы с использованием значения 1 не даст корректного XML. Это заставит разработчиков бороться за все виды настроек, чтобы заставить его работать в соответствии с шаблоном XSD. Больно, высокие затраты на разработку и обслуживание ...

То же самое применимо к XSLT; необходимо будет вручную отформатировать вывод ... Суть в том, что шаблоны XSD не могут использоваться машиной для "автоматического" форматирования ... Я еще не видел такой вещи ...

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

1 голос
/ 23 февраля 2012

На самом деле это зависит от параметра этого конкретного десятичного значения.

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

  1. Данные являются валютой. Здесь я советую заставить [0-9]*[.][0-9]{2} .. помочь этому нашему клиентскому программному обеспечению для восстановления данных, которое разработано таким образом, чтобы дополнить нулями.

  2. Данные представляют собой значение рН химического вещества, скважина.Здесь одна цифра после десятичной точки является обязательной.[0-1][0-9][.][0-9]

Так что все зависит от объекта, на который мы ссылаемся .. Если это действительно не нужно, было бы несправедливо навязать шаблон :)

...