2010-09-21 16 views
21

Sai se c'è una differenza tra questi tag su XML/XSD?Qual è la differenza tra <a_element /> e <a_element xsi: nil = "true" />?

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

es:

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

and 

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

Sono questi equivalente?

Se ho un elemento XSD:

<xsd:element name="BusinessArea" type="xsd:string"/> 

questo significa che è per xsi default: nil = "false". E questo significa che non accetterà un valore nullo per questo elemento.

Il mio dubbio è, accetterà questo?

<BusinessArea /> 

Che cosa significa veramente per l'XSD?

migliori saluti

+0

questione connessa per XML invece di xsd: [cosa i: nil = "true" intendo? ] (http://stackoverflow.com/questions/463597/what-does-inil-true-mean) –

risposta

0

La mia comprensione è che non sono la stessa cosa. Almeno se si desidera convalidare l'xml rispetto a uno schema. Se nello schema si definisce l'elemento come nillable, diciamo:

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

È necessario in modo esplicito nella vostra xml impostare tale elemento a null, in questo modo:

<SomeName xsi:nill="true" /> 

Se nel vostro XML l'elemento è come <SomeName /> non sarà valido secondo lo schema.

+0

La domanda non sta parlando di xsd: double ma di xsd: string. La stringa vuota "" renderà non valido contro xsd: double, ma renderà valido contro xsd: string – Niek

3

XML Schema: Strutture introduce un meccanismo per segnalare che un elemento dovrebbe essere accettato come · valida · quando non ha alcun contenuto, nonostante un tipo contenuti che non richiedono, o nemmeno necessariamente permettere contenuto vuoto. Un elemento può essere · valido · senza contenuto se ha l'attributo xsi: nil con il valore true. Un elemento così etichettato deve essere vuoto, ma può trasportare attributi se consentito da il tipo complesso corrispondente.

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

13

Si ottiene questo come XSD BusinessArea dovrebbero essere definite come nillable = "true". Qualcosa di simile:

Ciò significa che l'elemento BusinessArea può avere valore nullo, vale a dire vuoto.

E se elemento XML non contiene alcun valore, allora deve avere attributo xsi: nil = "true":

<BusinessArea xsi:nil="true" /> 

Questo dovrebbe essere valida:

<BusinessArea /> 

Due esempi mostrato non dovrebbe essere equivalente.

Check this out per capire xsi: nil e nillable:

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

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

+0

Ciao YoK, grazie per aver risposto. Penso di aver capito ora. Pls legge i miei aggiornamenti sul corpo della domanda. –

+0

@darklydreamingcoder dovrebbe generare un documento non valido. Aggiornato la mia risposta con lo stesso. – YoK

+0

Ciao YoK, grazie, ho visto il tuo aggiornamento. Ora capisco perfettamente. Ho aggiornato la mia domanda con un ulteriore dubbio (sugli elementi non nulli) –

1
<a_element /> 

è l'equivalente di un empty string e renderà valida contro xsd: string, ma non contro tipi come xsd: date, xsd: datetime, xsd: decimal, ecc.

<a_element xsi:nil="true"/> 

è l'equilalent di null e renderà valida per tutti gli elementi che hanno nillable = "true" nello schema definizione

Problemi correlati