Требовать количество дробных десятичных разрядов со схемой XML - PullRequest
4 голосов
/ 31 марта 2012

Я хочу ограничить число дробных десятичных разрядов числа ровно 2.

Например, допустимо значение 1.00, но недопустимо 1, 1.0 и 1.000.

Этоявляется похожим вопросом: Укажите количество десятичных разрядов xs: decimal в схеме XML
, и на этот вопрос был дан ответ:

<xs:simpleType name="twoPlacesDecimal" id="twoPlacesDecimal">
    <xs:restriction base="xs:decimal">
        <xs:fractionDigits fixed="true" value="2" />
    </xs:restriction>
</xs:simpleType>

К сожалению, это толькоколичество знаков после запятой до 2, и позволяет числа с нуля или одного знака после запятой.

Ответы [ 3 ]

3 голосов
/ 31 марта 2012

Я не думаю, что вы можете сделать это только с ограничениями total и fractionDigits, но это может быть возможно с ограничением шаблона Regex, например:

<xs:restriction base="decimal">
  <xs:pattern value="[+-]?\d+\.\d{2}"/>
</xs:restriction>
3 голосов
/ 31 марта 2012

Вы можете заставить число десятичных разрядов равняться двум, используя регулярное выражение, но разумно ли это?Вы усложняете жизнь тем, кто создает документы, которые должны соответствовать этой схеме.Например, они не смогут использовать сериализацию по умолчанию, производимую XSLT или XQuery, вместо этого им придется написать свою собственную.Не лучше ли изменить спецификацию, чтобы она была немного более либеральной в том, что она принимает?

2 голосов
/ 31 марта 2012

Когда я делал это в прошлом, я использовал регулярное выражение. Регулярное выражение, которое вы можете использовать, выглядит примерно так:

<xsd:simpleType name="exactlyTwoAfterDecimal">
    <xsd:restriction base="xsd:token">
        <xsd:pattern value="^-?\d+\.\d\d$"/>
    </xsd:restriction>
</xsd:simpleType>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...