Какая разница между <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?
С наилучшими пожеланиями
Ответы
Ответ 1
Вы получаете это, так как ваш 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/#Nils
Ответ 2
XML-схема: структуры создают механизм сигнализации о том, что элемент должен быть принят как · действительный · когда он не имеет содержания, несмотря на тип содержимого, который не требует или даже обязательно разрешить пустое содержимое. Элемент может быть · действительным · без содержимое, если оно имеет атрибут xsi: nil со значением true. элемент, помеченный таким образом, должен быть пустым, но может переносить атрибуты, если это разрешено соответствующий сложный тип.
Источник: http://www.w3.org/TR/xmlschema-1/#xsi_nil
Ответ 3
<a_element />
является эквивалентом empty string
и будет выдавать действительные строки xsd: string, но не для таких типов, как xsd: date, xsd: datetime, xsd: decimal и т.д.
<a_element xsi:nil="true"/>
является эквивалентом null
и будет отображаться для всех элементов, которые имеют nillable = "true" в определении схемы
Ответ 4
Я понимаю, что они не то же самое.
По крайней мере, если вы хотите проверить xml на схему.
Если в вашей схеме вы определяете элемент как nillable, скажем:
<xsd:element name="SomeName" type="xsd:double" nillable="true"/>
Вам нужно явно указать в вашем xml, что этот элемент равен null, например:
<SomeName xsi:nill="true" />
Если в вашем xml элемент похож на <SomeName />
, он не будет действителен в соответствии с схемой.