В чем разница между <a_element /> и <a_element xsi: nil = "true" />?

Вы знаете, есть ли разница между этими тегами в XML/XSD?

<a_element /> and <a_element xsi:nil="true"/>

например:

<SpreadCurve>
      <Index>3M</Index>
      <IndexNumber>4587</IndexNumber>
      <BusinessArea xsi:nil="true" />
</SpreadCurve>

and

<SpreadCurve>
      <Index>3M</Index>
      <IndexNumber>4587</IndexNumber>
      <BusinessArea />
</SpreadCurve>

Это эквивалентно?

Если у меня есть элемент XSD:

<xsd:element name="BusinessArea" type="xsd:string"/>

это означает, что по умолчанию это xsi:nil="false". А это значит, что он не примет нулевое значение для этого элемента.

Я сомневаюсь, он примет это?

<BusinessArea />

Что это действительно означает для XSD?

С наилучшими пожеланиями

4 ответа

Вы получаете это, поскольку ваша XSD BusinessArea должна быть определена как nillable="true". Что-то вроде:

<xsd:element name="BusinessArea" nillable="true">
.....
</xsd:element> 

Это означает, что элемент BusinessArea может иметь нулевое значение, т.е. пустой.

И если элемент в XML не содержит никакого значения, тогда он должен иметь атрибут xsi:nil="true":

<BusinessArea xsi:nil="true" />

Это должно быть недействительным:

<BusinessArea />

Два примера, которые вы показали, не должны быть эквивалентными.

Проверьте это для понимания xsi: nil и nillable:

http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st0.html

http://www.w3.org/TR/xmlschema-0/

Схема XML: Structures представляет механизм для сигнализации о том, что элемент должен быть принят как · действительный ·, когда у него нет содержимого, несмотря на то, что тип содержимого не требует или даже обязательно допускает пустое содержимое. Элемент может быть · действительным · без содержимого, если он имеет атрибут xsi: nil со значением true. Элемент с такой маркировкой должен быть пустым, но может содержать атрибуты, если это разрешено соответствующим комплексным типом.

Источник: http://www.w3.org/TR/xmlschema-1/

<a_element />  

является эквивалентом empty string и будет действительным для xsd:string, но не для таких типов, как xsd: date, xsd:datetime, xsd:decimal и т. д.

<a_element xsi:nil="true"/>

является эквивалентом null и сделает действительным для всех элементов, которые имеют nillable="true" в определении схемы

Я понимаю, что они не одинаковы. По крайней мере, если вы хотите проверить xml по схеме. Если в вашей схеме вы определяете элемент как nillable, скажем:

<xsd:element name="SomeName" type="xsd:double" nillable="true"/>

Вам необходимо явно в вашем xml установить этот элемент на ноль, например так:

<SomeName xsi:nill="true" />

Если в вашем xml элемент похож <SomeName /> он не будет действительным в соответствии со схемой.

Другие вопросы по тегам