Как я могу ограничить год дат в xsd только между 1920-2000? - PullRequest
1 голос
/ 06 марта 2011

Я хочу запретить пользователю вводить часть года, выходящую за пределы диапазона (1920-2000).Между этим интервалом должен лежать год, я не хочу ограничивать конкретную дату, однако хочу, чтобы часть ГОДА находилась в этом диапазоне.

Что мне делать в XSD?

Сейчас я делаю это, но это создает проблему, и XML не проверяется должным образом.

    <xs:element name="dateOfBirth">    
     <xs:complexType>
      <xs:sequence>
        <xs:element name="Year">
        <!--Restriction applied : Year value can lie between 1920-2000-->
            <xs:simpleType>
                <xs:restriction base="xs:gYear">
                    <xs:minInclusive value="1920"/>
                    <xs:maxInclusive value="2000"/>
                </xs:restriction>       
            </xs:simpleType>
        <!--Restriction applied : Year value can lie between 1920-2000-->
    </xs:element>
    <xs:element name="-" type="xs:char"/>
            <xs:element name="Month">

        <!--Restriction applied : Month value can lie between 1-12-->
        <xs:simpleType>
            <xs:restriction base="xs:gMonth">
                <xs:minInclusive value="1"/>
                <xs:maxInclusive value="12"/>
            </xs:restriction>       
        </xs:simpleType>

        <!--Restriction applied : Month value can lie between 1-12-->
        </xs:element>
          <xs:element name="-" type="xs:char"/>     
          <xs:element name="Day">
        <!--Restriction applied : Day value can lie between 1-31-->
            <xs:simpleType>
                <xs:restriction base="xs:gDay">
                        <xs:minInclusive value="1"/>
                        <xs:maxInclusive value="31"/>
                </xs:restriction>       
            </xs:simpleType>
        <!--Restriction applied : Day value can lie between 1-31-->   
       </xs:element>
      </xs:sequence>
     </xs:complexType>
    </xs:element>

Ответы [ 2 ]

3 голосов
/ 06 марта 2011

Может быть, вам нужно добавить базовый тип целого числа, как показано ниже:

 <xs:element name="age">
   <xs:simpleType>
     <xs:restriction base="xs:integer">
       <xs:minInclusive value="0"/>
       <xs:maxInclusive value="100"/>
     </xs:restriction>
   </xs:simpleType>
 </xs:element> 

В противном случае вы, вероятно, выполняете сравнение ascii вместо целочисленных сравнений.

2 голосов
/ 06 марта 2011

Вы серьезно запутались.

Ваш ответ Велленсу указывает на то, что данные вашего экземпляра имеют форму <DOB>1988-01-24</DOB>.Это значение типа xs: date.Элемент должен быть описан в схеме как простой тип, а не как сложный тип, структура которого представляет собой последовательность (дочерних) элементов.Если бы он был в форме

<DOB><year>1988</year><month>01</month><day>24</day></DOB>

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

Ваша путаница особенно очевидна, когда вы пытались определить элемент с именем «-».Это даже не допустимое имя элемента XML, не говоря уже об имени элемента, которое появляется в ваших данных.

Итак, как вы ограничиваете xs: date в диапазоне от 1920-01-01 до 2000-12-31, говорите?Ответ заключается в использовании

<xs:simpleType>
  <xs:restriction base="xs:date">
    <xs:minInclusive value="1920-01-01"/>
    <xs:maxInclusive value="2000-12-31"/>
    <xs:pattern value=".{10}"/>
  </xs:restriction>
</xs:simpleType>

Шаблон xs: ограничивает значение до 10-символьной строки.Это предотвращает добавление часового пояса, такого как 1920-01-01Z.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...