He visto null
elementos 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 se representa como un elemento vacío (que creo que está mal ya que está 'vacío' y null
es semánticamente diferente):
<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 <null/>
elemento hijo (de TStamper a continuación):
<book>
<title>Beowulf</title>
<author><null/></author>
</book>
¿Existe una forma correcta o canónica de representar tal null
valor? ¿Hay formas adicionales que los ejemplos anteriores?
El XML para los ejemplos anteriores está ideado, así que no lo leas demasiado. :)
xmlns:xsi="http://w3.org/2001/XMLSchema-instance"
. Tenga en cuenta la falta http: //. Es importante porque la cadena de espacio de nombres es en realidad solo una cadena para el analizador xml y no una uri.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
. Nota "www". Ver w3.org/TR/xmlschema-1/#no-xsixsi:
prefijo debe declararse. Un analizador XML compatible con el espacio de nombres rechazará su documento XML si intenta usar elxsi:
prefijo sin declararlo. La especificación relevante aquí es w3.org/TR/xml-names/#nsc-NSDeclared ("Restricción de espacio de nombres: Prefijo declarado") que dice que los únicos prefijos predefinidos sonxml:
yxmlns:
. El esquema XML se basa en la especificación de los espacios de nombres XML, pero no agrega ningún prefijo predefinido adicional, ya que esto violaría la especificación de los espacios de nombres XML.No hay una respuesta canónica, ya que XML fundamentalmente no tiene un concepto nulo. Pero supongo que desea mapeo Xml / Object (ya que los gráficos de objetos tienen valores nulos); entonces la respuesta para usted es "cualquier cosa que use su herramienta". Si escribe manejo, eso significa lo que prefiera. Para las herramientas que usan el esquema XML, este
xsi:nil
es el camino a seguir. Para la mayoría de los mapeadores, omitir el elemento / atributo coincidente es la forma de hacerlo.fuente
Depende de cómo valides tu XML. Si utiliza la validación del esquema XML, la forma correcta de representar los
null
valores es con elxsi:nil
atributo[ Fuente ]
fuente
La documentación en el enlace w3
http://www.w3.org/TR/REC-xml/#sec-starttags
dice que estas son las formas recomendadas.
El atributo mencionado en la otra respuesta es el mecanismo de validación y no una representación del estado. Consulte el http://www.w3.org/TR/xmlschema-1/#xsi_nil
Para aclarar esta respuesta: Contenido
fuente
Se usa
xsi:nil
cuando la semántica de su 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 oración anterior no es una idea evidentemente terrible, pero me parece nueve tipos de cosas malas. Todos los formatos XML con los que he trabajado representan valores nulos al omitir el elemento. (O atributo, y buena suerte marcando un atributo conxsi:nil
).fuente
date
elemento por completo no es de mucha ayuda, ya que la aplicación no tendrá idea de en qué parte de la página de título desea La fecha para aparecer. (Si el elemento omitido tiene solo una ubicación posible, esto no es un problema; en vocabularios de documentos reales, casi todos los elementos tienen muchas ubicaciones posibles.)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 utiliza para indicar que no hay ningún valor disponiblenilReason
puede usarse para registrar información adicional para valores perdidos; Este puede ser uno de los motivos estándar de GML (missing, inapplicable, withheld, unknown
), o texto precedido porother:
, o puede ser un enlace de URI a una explicación más detallada.Cuando intercambia datos, la función para la que se usa comúnmente XML, 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. Saber la razón por la que faltaba contenido puede ser muy importante.
A los científicos también les preocupa por qué falta información. Por ejemplo, si se descartó por razones de calidad, es posible que deseen ver los datos incorrectos originales.
fuente
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.
Supongamos 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 o no estar definidos.
Si utiliza la representación 'sin etiqueta significa nulo', obtendrá compatibilidad automática con versiones anteriores para leer su archivo xml de ReportMaster 1.
fuente