xml xsi xml-nil

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.

Fuente: http://www.w3.org/TR/xmlschema-1/#xsi_nil


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

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


<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