xml null xml-nil

¿Cuál es la forma correcta de representar elementos XML nulos?



null xml-nil (7)

Depende de cómo valides tu XML. Si usa la validación del esquema XML, la forma correcta de representar null valores null es con el xsi:nil .

[ Fuente ]

He visto elementos null representados de varias maneras:

El elemento está presente con xsi:nil="true" :

<book> <title>Beowulf</title> <author xsi:nil="true"/> </book>

El elemento está presente, pero representado como un elemento vacío (que creo que está mal, ya que ''vacío'' y null son semánticamente diferentes):

<book> <title>Beowulf</title> <author/> </book> <!-- or: --> <book> <title>Beowulf</title> <author></author> </book>

El elemento no está presente en absoluto en el marcado devuelto :

<book> <title>Beowulf</title> </book>

El elemento tiene un elemento secundario <null/> (de TStamper continuación):

<book> <title>Beowulf</title> <author><null/></author> </book>

¿Existe una forma correcta o canónica de representar ese valor null ? ¿Hay formas adicionales a los ejemplos anteriores?

El XML para los ejemplos de arriba es artificial, así que no leas demasiado. :)


En muchos casos, el propósito de un valor nulo es servir para un valor de datos que no estaba presente en una versión anterior de su aplicación.

Digamos que tiene un archivo xml de su aplicación "ReportMaster" versión 1.

Ahora, en ReportMaster versión 2, se han agregado algunos atributos más que pueden definirse o no.

Si usa la representación ''no tag means null'' obtiene compatibilidad automática hacia atrás para leer su archivo xml de ReportMaster 1.


La documentación en el enlace w3

http://www.w3.org/TR/REC-xml/#sec-starttags

dice que estas son las formas recomendadas.

<test></test> <test/>

El atributo mencionado en la otra respuesta es un mecanismo de validación y no una representación de estado. Por favor, consulte el http://www.w3.org/TR/xmlschema-1/#xsi_nil

Esquema XML: Structures 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, ni siquiera necesariamente permite, 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.

Para aclarar esta respuesta: contenido

<Book> <!--Invalid construct since the element attribute xsi:nil="true" signal that the element must be empty--> <BuildAttributes HardCover="true" Glued="true" xsi:nil="true"> <anotherAttribute name="Color">Blue</anotherAttribute> </BuildAttributes> <Index></Index> <pages> <page pageNumber="1">Content</page> </pages> <!--Missing ISBN number could be confusing and misguiding since its not present--> </Book> </Books>


No hay una respuesta canónica, ya que XML no tiene ningún concepto nulo. Pero supongo que quieres mapear Xml / Object (ya que los gráficos de objeto tienen nulos); entonces la respuesta para usted es "lo que sea que use su herramienta". Si escribes manejo, eso significa lo que prefieras. Para las herramientas que usan XML Schema, xsi:nil es el camino a seguir. Para la mayoría de los mapeadores, omitir el elemento / atributo correspondiente es la forma de hacerlo.


Simplemente omitir el atributo o elemento funciona bien en datos menos formales.

Si necesita información más sofisticada, los esquemas GML agregan el atributo nilReason, por ejemplo: en GeoSciML :

  • xsi:nil con un valor de "verdadero" se usa para indicar que no hay ningún valor disponible
  • nilReason se puede usar para registrar información adicional para valores perdidos; esta puede ser una de las razones estándar de GML ( missing, inapplicable, withheld, unknown ), o el texto precedido por other: o puede ser un enlace de URI a una explicación más detallada.

Cuando está intercambiando datos, el rol para el cual se usa XML comúnmente, los datos enviados a un destinatario o para un propósito determinado pueden tener contenido oculto que estaría disponible para otra persona que pagó o tuvo una autenticación diferente. Conocer la razón por la cual faltaba el contenido puede ser muy importante.

Los científicos también están preocupados sobre por qué falta información. Por ejemplo, si se descartó por razones de calidad, es posible que desee ver los datos incorrectos originales.


Utiliza xsi:nil cuando su semántica de esquema indica que un elemento tiene un valor predeterminado, y que el valor predeterminado debe usarse si el elemento no está presente. Tengo que suponer que hay personas inteligentes para quienes la frase anterior no es una idea evidentemente terrible, pero suena como nueve tipos de mal para mí. Cada formato XML con el que he trabajado representa valores nulos al omitir el elemento. (O atributo, y buena suerte marcando un atributo con xsi:nil .)


xsi: nil es la forma correcta de representar un valor tal que: Cuando se emite la llamada DOM Level 2 getElementValue (), se devuelve el valor NULL. xsi: nil también se usa para indicar un elemento válido sin contenido, incluso si el tipo de contenido de elementos normalmente no permite elementos vacíos.

Si se usa una etiqueta vacía, getElementValue () devuelve la cadena vacía ("") Si la etiqueta se omite, entonces no hay ninguna etiqueta de autor presente. Esto puede ser semánticamente diferente que establecerlo en ''nil'' (Ej. Establecer "Series" en cero puede ser que el libro no pertenezca a ninguna serie, mientras que omitir series podría significar que la serie es un elemento inaplicable para el elemento actual.)

De: El W3C

Esquema XML: Structures 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, ni siquiera necesariamente permite, 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.

Una clarificación:
Si tiene un elemento book xml y uno de los elementos secundarios es book: series, tiene varias opciones al completarlo:

  1. Eliminar por completo el elemento: esto se puede hacer cuando desea indicar que la serie no se aplica a este libro o que el libro no es parte de una serie. En este caso, xsl transforma (u otros procesadores basados ​​en eventos) que tienen una plantilla que coincide con el libro: nunca se invocará la serie. Por ejemplo, si su xsl convierte el elemento de libro en una fila de tabla (xhtml: tr), puede obtener el número incorrecto de celdas de tabla (xhtml: td) utilizando este método.
  2. Dejar el elemento vacío: esto podría indicar que la serie es "", o es desconocida, o que el libro no es parte de una serie. Se llamará a cualquier transformación xsl (u otro analizador basado en evernt) que coincida con el libro: serie. El valor de current () será "". Obtendrá el mismo número de etiquetas xhtml: td utilizando este método como con el siguiente descrito.
  3. Usando xsi: nil = "true" - Esto significa que el elemento book: series es NULL, no solo está vacío. Su transformación xsl (u otro analizador basado en eventos) que tenga una plantilla que coincida con el libro: se llamará a la serie. El valor de current () estará vacío (no cadena vacía). La principal diferencia entre este método y (2) es que el tipo de esquema del libro: series no necesita permitir que la cadena vacía ("") sea un valor válido. Esto no tiene sentido para un elemento de serie, pero para un elemento de lenguaje que se define como un tipo enumerado en el esquema, xsi: nil = "true" permite que el elemento no tenga datos. Otro ejemplo sería elementos de tipo decimal. Si desea que estén vacíos, puede unir una cadena enumerada que solo permita "" y un decimal, o utilice un decimal que sea anulable.