Domanda

Ho visto elementi null rappresentati in diversi modi:

L'elemento è presente con xsi:nil="true":

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

L'elemento è presente, ma rappresentato come un elemento vuoto (che credo sia sbagliato dal 'vuoto' e null sono semanticamente differente):

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

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

L'elemento non è presente affatto nel markup tornato :

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

L'elemento ha un elemento <null/> figlio (da TStamper qui sotto):

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

C'è un modo corretto, o canonica per rappresentare un valore tale null? Ci sono altri modi di esempi di cui sopra?

L'XML per gli esempi di cui sopra è artificiosa, in modo da non leggere troppo in esso. :)

È stato utile?

Soluzione

xsi: nil è il modo corretto di rappresentare un valore tale che: Quando viene emesso il DOM Level 2 getElementValue call (), viene restituito il valore NULL. xsi:. nil è anche usato per indicare un elemento valido senza contenuto anche se questo tipo di contenuto elementi normalmente non permette elementi vuoti

Se si utilizza un tag vuoto, getElementValue () restituisce una stringa vuota ( "") Se il tag viene omesso, quindi nessun tag autore è ancora presente. Questo può essere semanticamente diverso impostazione a 'zero' (Es. Ambito "Series" a zero può essere che il libro appartiene a nessuna serie, omettendo serie potrebbe significare che serie è un elemento inapplicabile all'elemento corrente.)

Da: Il W3C

  

XML Schema: Strutture introduce una   meccanismo di segnalazione di un   elemento deve essere accettata come valida · ·   quando non ha contenuto, nonostante un   tipo di contenuto che non richiede o   anche consentono necessariamente contenuto vuoto.   Un elemento può essere valida · · senza   contenuto se ha l'attributo   xsi: nil con il valore true. Un   così elemento etichettato deve essere vuoto, ma   può trasportare gli attributi, se consentito dalla   il corrispondente tipo complesso.

Una precisazione:
Se si dispone di un elemento di libro xml e uno degli elementi secondari è libro: serie si hanno diverse opzioni quando compilarlo:

  1. Rimuovere l'elemento del tutto - Questo può essere fatto quando si vuole indicare che serie non si applica a questo libro o quel libro non è parte di una serie. In questo caso le trasformazioni XSL (o altri processori basati eventi) che hanno un modello che corrisponde libro: non verrà mai chiamato serie. Ad esempio, se il xsl trasforma l'elemento libro in riga della tabella (xhtml: tr) è possibile ottenere il numero errato di celle (xhtml: TD). Utilizzando questo metodo
  2. Lasciando l'elemento vuoto - Ciò potrebbe indicare che la serie è "", o è sconosciuto, o che il libro non è parte di una serie. Qualsiasi trasformazione XSL (o altro parser basato evernt) che corrisponde libro: serie saranno chiamati. Il valore di corrente () sarà "". Si otterrà lo stesso numero di XHTML:. Tag td con questo metodo come con il prossimo descritto uno
  3. xsi Usando: nil = "true" - Questo significa che il libro: elemento serie è NULL, non solo vuoto. La vostra trasformazione XSL (o altro parser basata su eventi) che hanno un modello di corrispondenza libro: serie saranno chiamati. Il valore di corrente () sarà vuoto (stringa non vuota). La differenza principale tra questo metodo e (2) è che il tipo di schema di libro: serie non deve permettere la stringa vuota ( "") come valore valido. Questo non ha senso reale per un elemento della serie, ma per un elemento del linguaggio che viene definito come un tipo enumerato nello schema, xsi: nil = "true" consente l'elemento di non avere i dati. Un altro esempio sarebbe elementi di tipo decimale. Se si desidera che siano vuoti è possibile l'unione di una stringa enumerato che consente solo "" e un numero decimale, o utilizzare un numero decimale che è nillable.

Altri suggerimenti

Non c'è una risposta canonica, dal momento che XML ha fondamentalmente alcun concetto nullo. Ma suppongo che si desidera mappatura Xml / Oggetto (dal grafi di oggetti hanno null); Quindi la risposta per voi è "qualunque sia il vostro strumento utilizza". Se si scrive la gestione, che significa quello che preferite. Per gli strumenti che utilizzano XML Schema, xsi:nil è la strada da percorrere. Per la maggior parte mapper, omettendo di corrispondenza elemento / attributo è il modo per farlo.

Dipende da come si convalida il tuo XML. Se si utilizza la convalida dello schema XML, il modo corretto di rappresentare valori null è con l'attributo xsi:nil.

[ Fonte ]

La documentazione nel link w3

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

dice che questo sono le forme raccomandato.

<test></test>
<test/>

L'attributo menzionato nella altra risposta è meccanismo di convalida e non una rappresentazione dello stato. Si prega di fare riferimento alla http://www.w3.org/TR/xmlschema-1/ #xsi_nil

  

XML Schema: Strutture introduce una meccanismo per la segnalazione che un   elemento dovrebbe essere accettato come valido · · quando non ha contenuto, nonostante un   tipo di contenuto che non richiede necessariamente o anche consentire vuoto   soddisfare. Un elemento può essere valida · · senza contenuto se ha la   attributo xsi: nil con il valore true. Un elemento così etichettato deve essere   vuoto , ma può trasportare attributi se consentito dalla corrispondente   tipo complesso.

Per chiarire questa risposta:                                                                Soddisfare                                  

  <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>

Si utilizza xsi:nil quando i semantica dello schema indicare che un elemento ha un valore di default, e che il valore di default dovrebbe essere usato se l'elemento non è presente. Devo presumere che ci sono persone intelligenti a cui la frase precedente non è un'idea evidentemente terribile, ma suona come nove tipi di male a me. Ogni formato XML che abbia mai lavorato rappresenta valori nulli omettendo l'elemento. (O un attributo, e buona fortuna segnando un attributo con xsi:nil.)

Semplicemente omettendo l'attributo o elemento funziona bene nei dati meno formali.

Se avete bisogno di informazioni più sofisticati, gli schemi GML aggiungere l'attributo nilReason, ad esempio: in GeoSciML :

  • xsi:nil con un valore "true" viene utilizzato per indicare che nessun valore è disponibile
  • nilReason può essere utilizzato per registrare le informazioni aggiuntive per i valori mancanti; questo può essere uno dei motivi standard di GML (missing, inapplicable, withheld, unknown), o il testo aggiunto dal other:, o può essere un link URI per una spiegazione più dettagliata.

Quando si stanno scambiando i dati, il ruolo per il quale XML viene comunemente usato, i dati inviati a un destinatario o per un determinato scopo può avere contenuti oscurato che sarebbero disponibili a qualcun altro che pagato o ha avuto di autenticazione diverso. Conoscere il motivo per cui il contenuto mancava può essere molto importante.

Gli scienziati sono anche preoccupati con il motivo per cui le informazioni è mancante. Ad esempio, se fosse caduto per motivi di qualità, si può decidere di visualizzare i dati cattivo originale.

In molti casi, lo scopo di un valore Null è quello di servire per un valore di dati che non era presente in una versione precedente dell'applicazione.

Quindi, supponiamo di avere un file XML da un'applicazione "ReportMaster" versione 1.

Ora, in ReportMaster versione 2 sono stati aggiunti un alcuni più attributi che possono o non essere definito.

Se si utilizza il 'no tag significa null' rappresentazione si ottiene la compatibilità a ritroso automatico per la lettura di file XML ReportMaster 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top