Nullwerte / Nillable Werte

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Datenquellen und -ziele > XML und XML-Schema >

Nullwerte / Nillable Werte

Nach der XML-Schema-Spezifikation dürfen gültige Elemente auch leer sein, d.h. keinen Inhalt enthalten, wenn im Schema das Attribut nillable="true" für das jeweilige Element definiert ist. Im XML-Instanzdokument können Sie dann den Wert eines Elements als "null" definieren, indem Sie das Attribut xsi:nil="true" zum Element hinzufügen. In diesem Abschnitt wird erläutert, wie MapForce Null-Elemente in Quell- und Zielkomponenten behandelt.

 

Gegensatz 'xsi:nil' - 'nillable'

Das Attribut xsi:nil="true" wird in der XML-Instanzdatei definiert.

nill2

Das Attribut xsi:nil="true" gibt an, dass das Element zwar vorhanden ist, aber keinen Inhalt enthält. Beachten Sie, dass das Attribut xsi:nil="true" für Elementwerte und nicht für Attributwerte gilt. Ein Element mit dem Attribut xsi:nil="true" kann auch noch andere Attribute haben, auch wenn es keinen Inhalt hat.

 

Das Attribut xsi:nil wird im grafischen MapForce-Mapping nicht explizit angezeigt, da es in den meisten Fällen automatisch verarbeitet wird. Ein auf Null gesetzter ("nilled") Node, also ein Node, für den das Attribut xsi:nil="true" gesetzt wurde, ist zwar vorhanden, hat aber keinen Inhalt.

 

Das Attribut nillable="true" wird im XML-Schema definiert. Es kann in MapForce sowohl in der Quellkomponente als auch in der Zielkomponente vorhanden sein.

nill1

 

Nillable Elemente als Quellkomponente

Immer, wenn in einem Mapping Daten aus einem XML-Element ausgelesen werden, das auf Null gesetzt wurde, wird das Attribut xsi:nil automatisch überprüft. Wenn der Wert von xsi:nil "true" ist, so wird der Inhalt als nicht vorhanden behandelt.

 

Bei Erstellung eines zielorientierten Mappings von einem nillable Quellelement auf ein nillable Zielelement mit simpleType Inhalt (ein einziger Wert mit optionalen Attributen aber ohne Child-Elemente), bei dem xsi:nil für ein Quellelement definiert ist, wird das Attribut xsi:nil in das Zielelement eingefügt z.B. <OrderID xsi:nil="true"/>).

 

Bei Erstellung eines Alles kopieren-Mappings von einem nillable Quellelement auf ein nillable Zielelement, in dem xsi:nil für ein Quellelement definiert ist, wird das Attribut xsi:nil in das Zielelement eingefügt (z.B. <OrderID xsi:nil="true"/>).

 

Um explizit zu überprüfen, ob das Attribut xsi:nil bei einem Quellelement auf "true" gesetzt ist, verwenden Sie die Funktion is-xsi-nil. Sie gibt für auf Null gesetzte Elemente "true" zurück und für andere Nodes "false".

 

Um einen auf Null gesetzten (nicht existierenden) Quellelementwert durch einen anderen Wert zu ersetzen, verwenden Sie die Funktion substitute-missing.

 

Anmerkungen:

Wenn Sie die Funktion exists mit einem auf Null gesetzten Quellelement verbinden, erhalten Sie als Resultat TRUE, da der Element-Node ja vorhanden ist, auch wenn er keinen Inhalt enthält.
Bei Verwendung von Funktionen, in denen einfache Werte (wie z.B. multiply und concat) für Elemente verwendet werden, für die xsi:nil definiert wurde, erhalten Sie kein Ergebnis, da kein Elementinhalt vorhanden ist und kein Wert extrahiert werden kann. Diese Funktionen verhalten sich, als ob der Quellnode nicht vorhanden wäre.

 

Auf Null gesetzte Elemente als Zielkomponente

Bei Erstellung eines zielorientierten Mappings von einem nillable Quellelement auf ein nillable Zielelement mit simpleType Inhalt (ein einziger Wert mit optionalen Attributen aber ohne Child-Elemente), bei dem xsi:nil für ein Quellelement definiert ist, wird das Attribut xsi:nil in das Zielelement eingefügt z.B. <OrderID xsi:nil="true"/>). Wenn das Attribut xsi:nil="true" im XML-Quellelement nicht definiert wurde, so wird der Elementinhalt auf die übliche Weise auf das Zielelement gemappt.

 

Beim Mappen eines nillable Zielelements vom Typ complex type (mit Child-Elementen) wird das Attribut xsi:nil nicht automatisch geschrieben, da MapForce zum Zeitpunkt, zu dem es die Attribute des Elements schreibt, nicht weiß, ob Child-Elemente folgen. Definieren Sie in einem solchen Fall eine "Alles kopieren"-Verbindung, um das Attribut xsi:nil aus dem Quellelement zu kopieren.

 

Beim Mappen einer leeren Sequenz auf ein Zielelement wird das Element gar nicht erstellt - unabhängig davon, ob es nillable ist oder nicht.

 

Um die Erstellung eines leeren Zieldatenelements mit xsi:nil auf "true" gesetzt zu erzwingen, verbinden Sie die Funktion set-xsi-nil direkt mit dem Zieldatenelement. Dies funktioniert bei Zieldatenelementen vom Typ "simpleType" und "complexType".

 

Wenn der Node den Typ simpleType hat, verwenden Sie die Funktion substitute-missing-with-xsi-nil um xsi:nil in die Zielkomponente einzufügen, wenn in Ihrer Mapping-Quellkomponente kein Wert zur Verfügung steht. Dies kann vorkommen, wenn der Quell-Node nicht vorhanden ist oder wenn bei einer Berechnung (z.B. einer Multiplikation) ein auf Null gesetzter Quell-Node beteiligt war, aufgrund dessen kein Ergebnis erzeugt wurde.

 

Anmerkung:

Funktionen, die xsi:nil generieren, können nicht über Funktionen oder Komponenten übergeben werden, die nur an Werten operieren (wie z.B. die if-else-Funktion).

 


© 2019 Altova GmbH