
Erweiterte benutzerdefinierte Funktionen können nicht nur auf einzelne Feldwerte zugreifen. Statt dessen können Sie einen kompletten Kontext oder eine ganze Queue eines Feldes vor dem Aufruf Ihrer Funktion als Array einlesen. Dadurch können Sie zum Beispiel Berechnungen auf allen Feldwerten eines Kontexts durchführen und die Kontexte selbst, mit Hilfe eingefügter Kontextwechsel, weiter aufteilen.
Beim Parsen einer Instanz zur Ausgangsstruktur arbeitet ein Message-Mapping mit Queues:

Pro Hierarchie-Ebene gibt es eine Queue. Eine Queue kann folgende Einträge haben:
|
Wert |
Bedeutung |
|
(leerer String) |
Es handelt sich um eine Queue eines Strukturfeldes. Für jedes Auftreten des Feldes in der XML-Instanz gibt es einen Eintrag mit einem leeren String in der Queue. Im Beispiel oben gibt es für <A /> und <root /> eine solche Queue. |
|
(String) |
Wert eines Wertefeldes |
|
ResultList.CC |
Konstante, die einen Kontextwechsel anzeigt |
|
ResultList.SUPPRESS |
Konstante, die bewirkt, dass ein Feld und seine Unterknoten bei der Prozessierung ignoriert werden |
|
(leerer Kontext) |
Kontext, der keine Werte enthält (siehe Grafik unten). |
Durch Hinzufügen oder Entfernen von Kontextwechseln können Sie spezielle Strukturabbildungen realisieren. Die Standardfunktionen SplitByValue() und removeContexts() arbeiten nach diesem Prinzip.
Weitere Informationen: Strukturabbildungen durch Setzen des Kontexts .
Bei ineinander verschachtelten Strukturen gibt es folgende Grundregel: Die Anzahl der Kontexte einer Queue muss gleich der Anzahl der Werte (leere Strings) der übergeordneten Queue sein:

Erweiterte benutzerdefinierte Funktionen können entweder nur einen Kontext in die Eingabe-Arrays einlesen oder komplette Queues. Sie definieren dies, indem sie die Ausführungsart in den Funktionseigenschaften einer Funktion verwenden:
|
Ausführungsart |
Implikationen |
|
Alle Werte eines Kontextes |
Erweiterte Funktionen, die nur einen Kontext einlesen, haben keine identifizierbaren Kontextwechsel. Sie können jedoch Kontextwechsel in der Ergebnisliste einfügen. |
|
Alle Werte einer Queue |
Da hier ein oder mehrere Queues komplett eingelesen werden, ist diese Variante speicherintensiver und für sehr große Messages ungeeignet. |
Die Eingabe-Arrays enthalten nicht die Kontextwechsel am Beginn und am Ende des Kontextes (oder der Queue). Diese Kontextwechsel sind implizit immer vorhanden und können über die benutzerdefinierte Funktion weder identifiziert noch gelöscht werden.