В чем разница между <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
Схема 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 />
он не будет действительным в соответствии со схемой.