Funktionsweise

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

Startseite >  SPS-Datei: Komplexe Funktionen > Sortieren >

Funktionsweise

Die Konfiguration eines Schema-Element-Nodes für die Sortierung erfolgt in zwei Schritten:

 

1.Wählen Sie in der Design-Ansicht den zu sortierenden Schema-Element-Node aus. Beachten Sie, dass im XML-Dokument die Instanzen dieses Elements sortiert werden. Oft ist es auf den ersten Blick nicht ersichtlich, welches Element sortiert werden soll. Werfen Sie dazu einen Blick auf die unten stehende Abbildung.

 

SS_sort_elementselect

 

Jedes newsitem hat eine dateline, die ein place Element mit einem city Attribut enthält. Die @city Nodes aller newsitem Elemente sollen in alphabetischer Reihenfolge ausgegeben werden. Soll im Design für die Sortierung der @city Node ausgewählt werden, oder eines der Elemente place, dateline oder newsitem? Bei Auswahl von @city wird nur der Node city sortiert. Bei Auswahl von place oder dateline wird wieder nur das jeweilige eine ausgewählte Element sortiert, da diese Elemente innerhalb ihrer Parent-Elemente nur einmal vorkommen. Bei Auswahl von newsitem können die newsitem Elemente jedoch nach dem Sortierschlüssel dateline/place/@city sortiert werden und es wird für jedes newsitem der @city Node ausgegeben. In diesem Fall ist es das newsitem Element, das sortiert werden sollte, da jeder Nachrichteneintrag (news item) ein dateline city enthält.

2.Nach Auswahl des zu sortierenden Elements klicken Sie im Kontextmenü, das Sie durch Rechtsklick auf die Elementauswahl aufrufen, auf den Befehl Ausgabe sortieren. Daraufhin wird das Dialogfeld "Sortierreihenfolge der Ausgabe definieren" (Abbildung unten) aufgerufen, in welchem Sie eine oder mehrere Sortieranweisungen einfügen oder anhängen können.

 

DlgDefineSortOrderGen

 

Jede Sortieranweisung enthält: (i) einen Sortierschlüssel (wird eingegeben in die Spalte "Match"); (ii) den Datentyp, der der Sortierschlüssel sein soll (Text oder Zahl); (iii) und die Sortierreihenfolge (aufsteigend oder absteigend). Die Reihenfolge, in der die Sortieranweisungen aufgelistet sind, ist von Bedeutung. Die Sortierung erfolgt, indem die Sortieranweisungen der Reihe nach, beginnend bei der ersten bis zur letzten ausgeführt werden. Es können beliebig viele Sortieranweisungen ausgeführt werden.

 

Ein Beispiel zur Verwendung der Sortierung finden Sie unter Beispiel: Sortieren nach mehreren Sortierschlüsseln.

 

Benutzerdefinierte Vorlagen

Benutzerdefinierte Vorlagen sind Vorlagen, die auf Elemente angewendet werden, die mit Hilfe eines von Ihnen definierten XPath-Ausdrucks ausgewählt werden. Die durch den XPath-Ausdruck einer benutzerdefinierte Vorlage ausgewählten Nodes können auch sortiert werden. In diesem Fall wird die Sortierung an der benutzerdefinierten Vorlage angewendet.

 

Anmerkung zu Sortierschlüsseln

Die für den Sortierschlüssel eingegebenen XPath-Ausdrücke dürfen für jede Elementinstanz nur einen einzigen Node auswählen und kein Nodeset (XPath 1.0) und keine Elementsequenz (XPath 2.0 und XPath 3.0); der Schlüssel für jedes Element sollte sich als String oder Zahlenwert auflösen.

 

Wenn in einem XSLT 2.0 oder 3.0 SPS der Sortierschlüssel eine Sequenz von Nodes zurückgibt,wird ein XSLT-Verarbeitungsfehler zurückgegeben. So würde z.B im oben erwähnten Person-Beispiel ein XPath-Ausdruck wie z.B. ../Person/LastName bei einem Kontext-Node Person einen Fehler zurückgeben, da dieser Ausdruck alle im Parent von Person enthaltenen LastName Elemente zurückgeben würde (vorausgesetzt, es gibt mehr als ein Person Element). Der korrekte XPath-Ausdruck mit Person als Kontextnode wäre: LastName (da es nur einen LastName Node für jedes Person Element gibt).

 

Gemäß der XSLT 1.0 Spezifikation muss bei Rückgabe eines Nodeset nach Sortierschlüsselreihenfolge der Textwert des ersten Node verwendet werden. StyleVision gibt daher keinen Fehler zurück, wenn der XPath-Ausdruck mehrere Nodes für den Sortierschlüssel auswählt; es wird der Text des ersten Node verwendet und die anderen  Nodes werden ignoriert. Jedoch ist nicht immer der erste ausgewählte Node der gewünschte Sortierschlüssel. So würde z.B. der XPath-Ausdruck ../Person/LastName des oben beschriebenen Beispiels keinen Fehler zurückgeben. Doch würde auch keine Sortierung durchgeführt, da es sich um denselben Wert für jedes Element in der Sortierschleife handelt (den Textwert des ersten LastName Node). Bei einem Ausdruck der Art: location/@* würde jedoch unter Verwendung des ersten Attributs des location Child-Elements als Sortierschlüssel eine Sortierung durchgeführt. Diese Art von Ausdruck sollte jedoch vermieden werden. Es wird empfohlen eine genauere Auswahl des Sortierschlüssels durchzuführen (und einen einzelnen Node auszuwählen).

 

 

 


© 2019 Altova GmbH