4.1.3 XSLT Streaming
Bei grossen, flach strukturierten Datenmengen gibt es zwei Möglichkeiten:
1. |
FĂŒr einfache Sammel- und Auswertungsaufgaben schreibt man sich am besten einen kleinen Parser, z.B. mit der Pythonsgmllib ââ. |
2. |
FĂŒr komplexere Aufgaben, in denen man nicht an jeder Stelle ĂŒber den ganzen XML Baum navigiert und sich die Werte zusammensuchen suchen muss, kann man die Streaming Funktion des Saxon XSLT Prozessors verwenden. |
XSLT Streaming ist in der XSLT Version 3.0 ââ neu hinzugekommen und in der
kommerziellen Saxon-EE Lösung von Michael Kay ââ implementiert. Bei dieser Methode wird kein Eingabebaum im Speicher aufgebaut, was zu einer drastischen Performanzsteigerung
fĂŒhrt.
Es gibt ein paar Regeln, die man bei der Verarbeitung groĂer Datenmengen ĂŒber die Streaming Funktionen beachten sollte:
-
Bei einer XPATH Auswertung sollte nur ein einfacher Ausdruck mit höchstens einer konsumierenden Selektion gegeben sein. Konsumieren heiĂt, dass vom Kontextknoten aus eine Knotenmenge abwĂ€rts selektiert wird. Dagegen bleibt die Information bzgl. der Ancestor-Achse erhalten.
-
Bei einer Selektion sollte man aber darauf achten nur atomare Werte auszuwÀhlen.
-
Knotenmengen, die ĂŒber die Streaming Option eingelesen wurden, können nicht einer Funktion ĂŒbergeben werden. Sie sind auch nicht einer Variablen zuweisbar.
-
"Crawlerâ-AusdrĂŒcke, wie //section sind nicht nicht zu verwenden, ebenso ein rekursiver Abstieg mit Selektion, wie bspw. mit einem apply-templates Call.
Zu Beginn der Streaming-Aktion kann man sich auf konventionelle Art und Weise TeilbÀume, die nicht so performanzlastig aufgebaut
werden, in einer Variablen abspeichern und im Verlauf der Streaming-Verarbeitung z.B. fĂŒr einen Vergleich auswerten.