2010-09-21 15 views
21

Wissen Sie, ob es einen Unterschied zwischen diesen Tags in XML/XSD gibt?Was ist der Unterschied zwischen <a_element /> und <a_element xsi: nil = "true" />?

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

z:

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

and 

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

Sind diese Äquivalent?

Wenn ich ein XSD Element haben:

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

bedeutet dies, dass sie standardmäßig xsi ist: nil = "false". Und das bedeutet, dass es keinen Nullwert für dieses Element akzeptiert.

Mein Zweifel ist, wird es dieses akzeptieren?

<BusinessArea /> 

Was bedeutet das wirklich für die XSD?

Mit freundlichen Grüßen

+0

Verwandte Frage für xml statt xsd gültig machen: [Was bedeutet i: nil = "true" verstehen? ] (http://stackoverflow.com/questions/463597/what-does-inil-true-mean) –

Antwort

0

Mein Verständnis ist, dass sie nicht gleich sind. Zumindest wenn Sie das XML gegen ein Schema validieren wollen. Wenn in Ihrem Schema Sie das Element als nillable definieren, sagen wir mal:

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

Sie müssen das Element explizit festgelegt in Ihrem xml auf null, wie folgt aus:

<SomeName xsi:nill="true" /> 

Wenn in Ihrem xml die Element ist wie <SomeName /> es wird nicht nach dem Schema gültig sein.

+0

Die Frage spricht nicht über xsd: double, sondern über xsd: string. Leere Zeichenfolge "" wird ungültig gegen xsd: double, aber wird gültig gegen xsd: string – Niek

3

XML Schema: Strukturen führen einen Mechanismus zur Signalisierung, dass ein Element sollte als · gültig · akzeptiert werden, wenn es keinen Inhalt hat trotz eines Inhaltstypen, die nicht erforderlich ist oder auch unbedingt leeren Inhalt ermöglichen. Ein Element kann · gültig sein · ohne Inhalt, wenn es das Attribut xsi: nil mit dem Wert true hat. Ein Element, das so beschriftet ist, muss leer sein, aber kann Attribute tragen, wenn dies von dem entsprechenden komplexen Typ erlaubt wird.

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

13

Sie erhalten diese als XSD BusinessArea sollte als nillable = "true" festgelegt werden. Etwas wie:

<xsd:element name="BusinessArea" nillable="true"> 
..... 
</xsd:element> 

Dies bedeutet, dass BusinessArea-Element Nullwert, d. H. Leer haben kann.

Und wenn Element in XML keinen Wert enthält, dann muss es Attribut xsi: nil = "true":

<BusinessArea xsi:nil="true" /> 

Diese ungültig sein sollte:

<BusinessArea /> 

Zwei Beispiele, die Sie zeige sollte nicht gleichwertig sein.

diese Check-out für das Verständnis xsi: nil und nillable:

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

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

+0

Hi YoK, danke für die Antwort. Ich denke, ich verstehe jetzt. Bitte lies meine Updates zum Fragenkörper. –

+0

@darklydreamingcoder sollte ein ungültiges Dokument generieren. Meine Antwort wurde mit derselben aktualisiert. – YoK

+0

Hi YoK, danke, ich habe dein Update gesehen. Jetzt verstehe ich perfekt. Ich habe meine Frage mit einem weiteren Zweifel aktualisiert (über Nicht-Null-Elemente) –

1
<a_element /> 

ist das Äquivalent eines empty string und rendert gültig gegen xsd: string, aber nicht gegen Typen wie xsd: date, xsd: datetime, xsd: dezimal usw.

<a_element xsi:nil="true"/> 

die equilalent von null ist und für alle Elemente, die nillable = haben "true" im Schema-Definition

Verwandte Themen