Pregunta

He visto null elementos representados en 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 es incorrecto desde el '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 la volverá marcado:

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

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

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

Hay una correcta, o canónica de la forma de representar a un null el valor?Hay formas adicionales de los ejemplos anteriores?

El XML de los ejemplos anteriores es artificial, así que no leer demasiado en ella.:)

¿Fue útil?

Solución

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

Si una etiqueta vacía se utiliza, getElementValue() devuelve la cadena vacía ("") Si la etiqueta se omite, entonces no hay autor de la etiqueta está presente incluso.Esto puede ser semánticamente diferentes de configuración a 'nil' (Ex.Configuración de la "Serie" de nada, puede ser que el libro pertenece a ninguna serie, mientras que la omisión de la serie podría decir que la serie es una inaplicable elemento para el elemento actual.)

De: El W3C

XML Schema:Estructuras introduce un mecanismo de señalización que un elemento debe ser aceptada como válida.· cuando no tiene contenido, a pesar de un el tipo de contenido que no requiere ni incluso necesariamente permiten vacía de contenido.Un elemento puede ser ·válido· sin contenido si no tiene el atributo xsi:nil con el valor true.Un elemento de etiqueta debe estar vacío, pero puede llevar atributos si es permitido por la el correspondiente tipo de complejo.

Una aclaración:
Si usted tiene un libro elemento xml y uno de los elementos secundarios que es el libro:la serie tiene varias opciones a la hora de llenar el formato:

  1. Quitar el elemento de todo Esto se puede hacer cuando se desea indicar que la serie no se aplica a este libro o el libro no es parte de una serie.En este caso transformaciones xsl (u otro evento basado en procesadores) que tiene una plantilla que coincida con el libro:la serie nunca va a ser llamado.Por ejemplo, si su xsl convierte el libro elemento en la fila de la tabla (xhtml:tr) puede obtener el número incorrecto de las celdas de la tabla (xhtml:td) utilizando este método.
  2. Dejar el elemento vacío - Esto podría indicar que la serie es "", o es desconocido, o que el libro no es parte de una serie.Cualquier transformación xsl (u otros evernt analizador) que coincide con el libro:la serie se llama.El valor de la corriente() va a ser "".Obtendrá el mismo número de xhtml:etiquetas td el uso de este método con la siguiente descrito.
  3. El uso de xsi:nil="true" - Esto significa que el libro:serie elemento es NULO, no sólo vacía.Su transformación xsl (o cualquier otro evento de analizador) que tiene una plantilla de coincidencia de libro:la serie se llama.El valor de la corriente() vacía (no cadena vacía).La principal diferencia entre este método y (2) es que el tipo de esquema de libro:serie no necesita para permitir que la cadena vacía ("") como un valor válido.Esto no tiene ningún sentido real, de una serie de elementos, pero para un elemento del lenguaje que se define como un tipo enumerado en el esquema, xsi:nil="true" permite que el elemento no tener datos.Otro ejemplo sería el de los elementos de tipo decimal.Si usted quiere estar vacío puede unión enumerados cadena que sólo permite "" y un decimal, o el uso de un decimal que es nillable.

Otros consejos

No hay una respuesta canónica, ya que XML tiene fundamentalmente ningún concepto nulo. Pero supongo que usted desee mapeo XML / Objeto (desde gráficos de objetos tienen valores nulos); por lo que la respuesta para usted es "cualquiera que sea su herramienta utiliza". Si se escribe el manejo, eso significa que lo que usted prefiera. Para las herramientas que utilizan esquemas XML, xsi:nil es el camino a seguir. Para la mayoría de los creadores de mapas, omitiendo coincidente elemento / atributo es la manera de hacerlo.

Depende de cómo validar el código XML. Si utiliza la validación de esquema XML, la forma correcta de representar los valores null es con el atributo xsi:nil.

[ Fuente ]

La documentación en el enlace W3

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

dice que esto son las formas recomendadas.

<test></test>
<test/>

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

  

esquema XML: Estructuras introduce un mecanismo de señalización que una   elemento debe ser aceptada como válida · · cuando no tiene contenido a pesar de una   tipo de contenido que no requiere ni siquiera necesariamente permitirá vacía   contenido. Un elemento puede ser válida · · sin contenido si tiene el   atributo xsi: nil con el valor real. Un elemento ese tipo de etiqueta debe ser   vacío , pero puede llevar a atributos si es permitido por las correspondientes   tipo complejo.

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>

Se utiliza xsi:nil cuando su semántica del esquema indicar que un elemento tiene un valor por defecto, y que el valor por defecto debe ser utilizado si el elemento no está presente. Tengo que asumir que hay personas inteligentes a las que la frase anterior no es una idea evidentemente terribles, pero suena como nueve tipos de mal a mí. Cada formato XML que he trabajado con valores nulos representa al omitir el elemento. (O atributo, y buena suerte marcar un atributo con xsi:nil.)

Simplemente omitiendo el atributo o elemento que funciona bien en los datos menos formales.

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

  • xsi:nil con un valor de "true" se utiliza para indicar que no hay ningún valor disponible
  • nilReason puede ser utilizado para registrar información adicional para los valores que faltan; Esta puede ser una de las razones estándar GML (missing, inapplicable, withheld, unknown), o texto antepuesto por other:, o puede ser un enlace URI para una explicación más detallada.

Cuando usted está intercambiando datos, la función para la que se utiliza comúnmente en XML, los datos enviados a un destinatario o para un fin determinado puede tener un contenido oscurecida que estaría disponible a otra persona que tenía pagado o autenticación diferente. Conocer la razón por la que le faltaba contenido puede ser muy importante.

Los científicos también están preocupados por qué la información no se encuentra. Por ejemplo, si se abandonó por razones de calidad, es posible que quieran ver los datos originales mala.

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 la aplicación.

Así que supongamos que tiene un archivo XML de su aplicación "ReportMaster" versión 1.

Ahora en la versión 2 ReportMaster a algunos de los atributos más se han agregado que pueden o no estar definido.

Si se utiliza el 'ninguna etiqueta significa nulo' representación se obtiene compatibilidad con versiones anteriores para la lectura automática de su archivo XML ReportMaster 1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top