Наличие пустого элемента xs: date подтверждается XSD. - PullRequest
5 голосов
/ 09 сентября 2011

У меня есть это в моем XSD:

<xs:element name="End_Date" type="xs:date" minOccurs="0"/>

Я хотел бы пройти проверку, если есть дата или если есть пустой узел

<End_Date>2011-05-31T00:00:00.000</End_Date> должно быть в порядке, а также<End_Date></End_Date>

Как мне изменить XSD, чтобы он был таким?

Я пробовал разные вещи:

nillable="true"

и

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"

и

                    <xs:element name="End_Date">
                    <xs:simpleType>
                        <xs:union memberTypes="xs:date">
                        <xs:simpleType>
                        <xs:restriction base="xs:string">
                        <xs:enumeration value=""/>
                        </xs:restriction>
                        </xs:simpleType>
                        </xs:union>
                    </xs:simpleType>
                </xs:element>

Ни один из них не работал.

Ошибка:

Обнаружена ошибка: недопустимый элемент 'xxxxxxxxxx: End_Date'- Значение '' недопустимо в соответствии с его типом данных 'http://www.w3.org/2001/XMLSchema:date' - Строка' 'не является допустимым значением XsdDateTime.

Ответы [ 4 ]

6 голосов
/ 09 сентября 2011

Возможно, вы не понимаете разницу между xs: date и xs: dateTime.Вы использовали xs: date в своей схеме, но ваш пример - xs: dateTime.

Существует три способа достижения желаемого:

(a) определить тип, который являетсяобъединение (xs: dateTime и (ограничение xs: строка разрешает только ""))

(b) определяет тип, представляющий собой список xs: dateTime с minLength = 0, maxLength = 1

(c) определить элемент, который можно обнулить.В этом случае экземпляр должен будет сказать xsi: nil = "true", что, на мой взгляд, делает объект довольно бесполезным.

Если вы попробуете один из них, и он не сработает, скажите нам точно, чтоВы сделали, и как именно это не удалось.

1 голос
/ 14 июля 2015
Set Type="xs:date", derivedBy="list" and minOccurs="0"

which looks like this in your XML Schem Document 

<xs:element name="EffectiveDt" nillable="true" minOccurs="0">
  <xs:simpleType>
   <xs:list itemType="xs:date"/>
  </xs:simpleType>
</xs:element>

This will surely help you, I tried in my Code Works perfect.

Подтвердите свой XML по XSD здесь

I am using this online XML validation against XSD tool.
0 голосов
/ 23 марта 2018

Это сработало для меня:

[в xsd:]

<xs:simpleType name="DateOrEmptyDate">
    <xs:union memberTypes="xs:date">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value=""/>
            </xs:restriction>
        </xs:simpleType>
    </xs:union>
</xs:simpleType>    

[Действительный xml:]

<EndDate/>
<EndDate>2017-12-31</EndDate>

[Неверный xml:]

<EndDate>2017-31-31</EndDate>

0 голосов
/ 09 сентября 2011

xsi: nill = true, безусловно, должно быть допустимым, если вы определяете элемент схемы как nillable.Какой валидатор вы используете?

Схема:

<xs:schema xmlns="http://myNS" targetNamespace="http://myNS" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="End_Date" nillable="true" type="xs:dateTime" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Экземпляр:

<ns0:Root xmlns:ns0="myNS">
  <End_Date xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</ns0:Root>

действителен.

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