В чем разница междуа также? - PullRequest
22 голосов
/ 21 сентября 2010

знаете ли вы, если есть разница между этими тегами в 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 ]

13 голосов
/ 21 сентября 2010

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

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

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

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

<BusinessArea xsi:nil="true" />

Это должно быть недопустимо:

<BusinessArea />

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

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

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

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

4 голосов
/ 21 сентября 2010

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

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

1 голос
/ 22 июня 2015
<a_element />  

является эквивалентом empty string и будет действительным для xsd: строки, но не для таких типов, как xsd: date, xsd: datetime, xsd: decimal и т. Д.является эквивалентом null и будет действительным для всех элементов, которые имеют nillable = "true" в определении схемы

0 голосов
/ 21 сентября 2010

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

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

Вам необходимо явно указать в своем XML-элементе значение null, например:

<SomeName xsi:nill="true" />

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

...