XSD несколько условий - PullRequest
       7

XSD несколько условий

0 голосов
/ 01 октября 2018

У меня есть схема XML со следующим фрагментом кода:

<xs:attribute name="extension" use="required">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="((18)|(19)|(20))[0-9][0-9]((0[1-9]|1[0-2]))((0[1-9]|1[0-9]|2[0-9]|3[0-1]))" />
    </xs:restriction>
    <xs:length value="8" />
  </xs:simpleType>
</xs:attribute>

Этот фрагмент кода определяет, является ли правильной дата рождения живого человека или нет.Дается, что кто-либо рождается в любом году, начиная с 18, 19 или 20. Затем следуют любые два числа, месяц между 01-12 и день между 01-31.Дата рождения должна содержать 8 цифр для подтверждения.

Вопрос в том, есть ли способ развить это дальше?Например, если существует год рождения 1809, он будет подтвержден, даже если кто-то в этом возрасте не может быть живым.Также год в будущем будет подтвержден - скажем, 2058.

Я могу указать «minyear» и «maxyear», где первые 4 числа строки не могут быть меньше $ minyear или больше$ maxyear?

Я также могу добавить, что в прямой связи с этой 8-числовой строкой добавляются еще четыре числа, которые являются управляющими и не имеют никакого отношения к годам, месяцам и дням.Вот почему основой является строка.

Есть идеи?

/ Paul

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Да!Решено: -)

Секция шаблона должна выглядеть следующим образом:

<xs:pattern value="(((189)[0-9]|(19)[0-9][0-9]|((200)[0-9]|(201)[0-8]))(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1]))" />

Это работает в XML Schema 1.0.Возможно, в версии 1.1 есть более подходящее решение?

/ Paul

0 голосов
/ 01 октября 2018

Дошло до этого:

<xs:attribute name="extension" use="required">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="(([1][8][9][0-9]|[1][9][0-9][0-9]|[2][0][0-1][0-9])(0[1-9]|1[0-2]))((0[1-9]|1[0-9]|2[0-9]|3[0-1]))" />
    </xs:restriction>
    <xs:length value="8" />
  </xs:simpleType>
</xs:attribute>

Этот фрагмент кода будет ограничивать действительные годы с 1890 до 2019 года. Единственная проблема состоит в том, что пройдет 2019 год, кроме того, что он работает.

Однако это не совершенство, и когда наступит 2020 год, он пропустит все годы до 2029 года, так есть ли способ исключить это несовершенство?

/ Павел

...