What's the difference between <a_element /> and <a_element xsi:nil="true" />?
do you know if there's a difference between these tags on 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>
Are these equivalent ?
If I have a XSD element:
<xsd:element name="BusinessArea" type="xsd:string"/>
this means that it is by default xsi:nil="false". And this means it will not accept a null value for this element.
My doubt is, will it accept this one?
What does this really mean to the XSD?
You get this as your XSD BusinessArea should be defined as nillable="true". Something like:
<xsd:element name="BusinessArea" nillable="true"> ..... </xsd:element>
What this mean is that BusinessArea element can have null value i.e. empty.
And if element in XML doesn't contain any value then it must have attribute xsi:nil="true":
<BusinessArea xsi:nil="true" />
This should be invalid :
Two examples you showed should not be equivalent.
Check this out for understanding xsi:nil and nillable:
XML Schema: Structures introduces a mechanism for signaling that an element should be accepted as ·valid· when it has no content despite a content type which does not require or even necessarily allow empty content. An element may be ·valid· without content if it has the attribute xsi:nil with the value true. An element so labeled must be empty, but can carry attributes if permitted by the corresponding complex type.
is the equivalent of an empty string and will render valid against xsd:string, but not against types like xsd:date, xsd:datetime, xsd:decimal etc.
is the equilalent of null and will render valid for all elements which have nillable="true" in the schema-definition
My understanding is that they are not the same. At least if you want to validate the xml against a schema. If in your schema you define the element as nillable, let's say:
<xsd:element name="SomeName" type="xsd:double" nillable="true"/>
You need to explicitly in your xml set that element to null, like this:
<SomeName xsi:nill="true" />
If in your xml the element is like <SomeName /> it will not be valid according to the schema.