2010-09-21 18 views
21

¿sabes si hay una diferencia entre estas etiquetas en XML/XSD?¿Cuál es la diferencia entre <a_element /> y <a_element xsi: nil = "true" />?

<a_element /> and <a_element xsi:nil="true"/> 

por ejemplo:

<SpreadCurve> 
     <Index>3M</Index> 
     <IndexNumber>4587</IndexNumber> 
     <BusinessArea xsi:nil="true" /> 
</SpreadCurve> 

and 

<SpreadCurve> 
     <Index>3M</Index> 
     <IndexNumber>4587</IndexNumber> 
     <BusinessArea /> 
</SpreadCurve> 

Son estos equivalente?

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á esta?

<BusinessArea /> 

Lo que significa esto en realidad a la XSD?

Saludos

+0

pregunta relacionado para XML en lugar de xsd: [¿qué i: nil = "true" decir? ] (http://stackoverflow.com/questions/463597/what-does-inil-true-mean) –

Respuesta

0

Mi entendimiento es que no son los mismos. Al menos si quiere validar el xml contra un esquema. Si en el esquema se define el elemento como anulable, digamos:

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

Es necesario explícitamente en el código XML establecer ese elemento a null, como esto:

<SomeName xsi:nill="true" /> 

Si en su xml del elemento es como <SomeName /> no será válido de acuerdo con el esquema.

+0

La pregunta no es sobre xsd: doble sino sobre xsd: string. La cadena vacía "" no será válida contra xsd: double, pero será válida contra xsd: string – Niek

3

esquema XML: Estructuras introduce un mecanismo para la señalización de un elemento debe ser aceptado como · válida · cuando no tiene contenido pesar de un tipo contenido que no requiere o siquiera necesariamente permiten 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 está permitido por el tipo complejo correspondiente.

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

13

Usted consigue esto como su XSD BusinessArea deberían definirse como nillable = "true". Algo así como:

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

Lo que esto significa es que el elemento BusinessArea puede tener valor nulo es decir, vacía.

Y si los elementos de XML no contiene ningún valor, entonces debe tener xsi atributo: nil = "true":

<BusinessArea xsi:nil="true" /> 

Esto debería ser válido:

<BusinessArea /> 

Dos ejemplos que usted mostró no debería ser equivalente.

mira esto para entender xsi: nil y nillable:

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

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

+0

Hola, YoK, gracias por responder. Creo que estoy entendiendo ahora. Pls leer mis actualizaciones sobre el cuerpo de la pregunta. –

+0

@darklydreamingcoder debe generar un documento no válido. Actualicé mi respuesta con la misma. – YoK

+0

Hola YoK, gracias, he visto tu actualización. Ahora lo entiendo perfectamente. He actualizado mi pregunta con una duda más (sobre elementos no nulos) –

1
<a_element /> 

es el equivalente de un empty string y rendirá válidos en contra de xsd: string, pero no contra tipos como xsd: date, xsd: datetime, xsd: decimal etc.

<a_element xsi:nil="true"/> 

es el equilalent de null y rendirá válida para todos los elementos que tienen nillable = "true" en el esquema de definición

Cuestiones relacionadas