xml - ¿Cuál es la diferencia entre<a_element/> y<a_element xsi: nil=“true”/>?
xml-nil (4)
¿Sabes si hay una diferencia entre estas etiquetas en XML / XSD?
<a_element /> and <a_element xsi:nil="true"/>
p.ej:
<SpreadCurve>
<Index>3M</Index>
<IndexNumber>4587</IndexNumber>
<BusinessArea xsi:nil="true" />
</SpreadCurve>
and
<SpreadCurve>
<Index>3M</Index>
<IndexNumber>4587</IndexNumber>
<BusinessArea />
</SpreadCurve>
¿Son estos equivalentes ?
Si tengo un elemento XSD:
<xsd:element name="BusinessArea" type="xsd:string"/>
esto significa que es por defecto xsi: nil = "falso". Y esto significa que no aceptará un valor nulo para este elemento.
Mi duda es, ¿aceptará éste?
<BusinessArea />
¿Qué significa esto realmente para el XSD?
Atentamente
Esquema XML: Estructuras introduce un mecanismo para indicar que un elemento debe aceptarse como · válido · cuando no tiene contenido a pesar de un tipo de contenido que no requiere o incluso permite necesariamente contenido vacío. Un elemento puede ser · válido · sin contenido si tiene el atributo xsi: nil con el valor verdadero. Un elemento así etiquetado debe estar vacío, pero puede llevar atributos si lo permite el tipo complejo correspondiente.
Mi entendimiento es que no son lo mismo. Al menos si desea validar el xml contra un esquema. Si en su esquema usted define el elemento como nillable, digamos:
<xsd:element name="SomeName" type="xsd:double" nillable="true"/>
Necesitas explícitamente en tu xml establecer ese elemento en nulo, así:
<SomeName xsi:nill="true" />
Si en su xml el elemento es como <SomeName />
no será válido de acuerdo con el esquema.
Obtiene esto como su XSD BusinessArea debe definirse como nillable = "true". Algo como:
<xsd:element name="BusinessArea" nillable="true">
.....
</xsd:element>
Lo que esto significa es que el elemento BusinessArea puede tener un valor nulo, es decir, vacío.
Y si el elemento en XML no contiene ningún valor, entonces debe tener el atributo xsi: nil = "true":
<BusinessArea xsi:nil="true" />
Esto debería ser inválido:
<BusinessArea />
Dos ejemplos que mostraste no deberían ser equivalentes.
Comprueba esto para entender xsi: nil and nillable:
http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st0.html
<a_element />
es el equivalente de una empty string
y será válida contra xsd: cadena, pero no contra tipos como xsd: date, xsd: datetime, xsd: decimal, etc.
<a_element xsi:nil="true"/>
es el equivalente de null
y será válido para todos los elementos que tengan nillable = "true" en la definición de esquema