Как определить тип XML XSD для описания подмножества «double», исключая «NaN», «positiveInfinity», «absoluteInfinity» - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть существующий XSD, в котором тип элемента указан как «double», в соответствии с spec это ограничивает допустимые значения:

1)ненулевые числа m × 2e, где m - целое число, абсолютное значение которого меньше 253, а e - целое число от -1074 до 971 включительно.2) В дополнение к этим значениям, в · пространстве значений · типа double также содержатся следующие · специальные значения:: positiveZero, негатив-ноль, positiveInfinity, absoluteInfinity и notANumber.часть, но я хочу запретить / исключить следующее:

  • positiveInfinity
  • absoluteInfinity
  • notANumber (NaN)

Что такоесинтаксис / определение XML XSD для определения этого нового типа, который представляет «double, за исключением positiveInfinity, absoluteInfinity, notANumber (NaN)».

1 Ответ

0 голосов
/ 20 ноября 2018

Вероятно, вы можете достичь этого с помощью restriction

<xs:element name="myDouble">
    <xs:simpleType>
        <xs:restriction base="xs:double">
          <xs:minExclusive value="-INF"/>
          <xs:maxExclusive value="INF"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

Примечание : NaN, похоже, также останавливается <xs:maxExclusive value="INF"/>

ОШИБКА: Элемент 'myDouble': [facet 'maxExclusive'] Значение 'NaN' должно быть меньше, чем 'INF'.

Я пробовал его, и он работает с

<myDouble>123.456</myDouble> <!-- OK -->
<myDouble>+1234.456</myDouble> <!-- OK -->
<myDouble>-1.2344e56</myDouble> <!-- OK -->
<myDouble>-.45E-6</myDouble> <!-- OK -->
<myDouble>INF</myDouble> <!-- KO -->
<myDouble>-INF</myDouble> <!-- KO -->
<myDouble>NaN</myDouble> <!-- KO -->
...