MinOccurs 0 и nillable true
В моем wsdl у меня есть элемент:
<xsd:element minOccurs="0" name="birthDate" nillable="true" type="xsd:dateTime"/>
Я знаю, что nillable true позволяет использовать null-значения, это означает, что он может разрешать пустой тег xml? iee
<birthDate/>
Ответы
Ответ 1
Настройка nillable="true"
означает, что тег <birthDate>
может выглядеть следующим образом:
<birthDate xsi:nil="true"/>
Однако, поскольку вы также установили minOccurs="0"
, вы также можете полностью опустить тег <birthDate>
из XML, и он также будет проверять ваш XSD.
Обратите внимание, что <birthDate/>
или <birthDate></birthDate>
не считается нулевым в соответствии с правилами XSD.
Посмотрите этот отличный блог для дальнейшего чтения.
Ответ 2
Добавление моего представления к приведенным выше ответам. Основная вещь, которую многие новички не знают или не принимают во внимание, - это привязка переменной xsi с пространством имен экземпляров схемы.
Например: xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" [добавить это как атрибут в любом месте в открывшемся теге xml].
Префикс атрибута xsi "в этом случае должен быть связан с пространством имен XML http://www.w3.org/2001/XMLSchema-instance". Это связывание может быть выполнено в любом из родительских элементов или в самом корневом элементе. Где делать привязку зависит от области, для которой вы хотите, чтобы xsi был доступен.
- Все элементы, вложенные в объявление, получают одинаковое значение
- Даже если вы можете использовать любое имя для привязки именpcae, для краткости всегда рекомендуется использовать xsi для " http://www.w3.org/2001/XMLSchema-instance"
PS: Я осознал всю важность связывания пространства имен xml и префиксов атрибутов везде, где это необходимо, когда я изо всех сил пытался работать, оставаясь на 3 дополнительных часа, чтобы понять, почему мой xml node не получает подтверждения от xsd даже в случай атрибута nillable, присутствующего в определении схемы.
Ответ 3
если MinOccurs 0 и nillable true не позволяют нам устанавливать нулевые значения, то какие параметры должны быть установлены в поля как нулевые и необязательные?