fjh: Abarbeitung externer Dokumente möglich?

Beitrag lesen

Hallo Michael,

Hm ... ich habe ja nun gar keine Ahnung von XML & Co.
Aber von der reinen Semantik her würde ich anstreben,
die beiden Operationen "verschmelzen" und "übersetzen" in zwei verschiedenen Phasen durchzuführen, also nacheinander.

Ja, von der Semantik der Wörter mag das so erscheinen, aber es ist aus meiner Sicht nicht sinnvoll. XSLT stellt die document()-Funktion zur Verfügung, mit der man andere Dokumente, als die eigentliche Quelldatei der Transformation ansteuern kann. Die Template Rules des Stylesheets gelten dann auch für die Elemente dieses Dokuments. Das ansteuern der externen Datei ist dann nur eine Zeile. Üblicherweise nutzt man das z.B., um irgendwelche zusätlichen Informationen aus einer zweiten XML-Datei ins Ergebnisdokument mit reinzunehmen. Z.B. zu einer Literaturliste, die jeweiligen Rezensionen, die in einer Extra-XML-Datenquelle stehen.

Alex wollte nun aber zwei von der Struktur her vollkommen gleiche Dokumente verschmelzen. Etwas eigenartiger Anwendungsfall, aber es geht eben auch. Allerdings hast du in diesem Falle recht: Ich habe mich auch gefragt, warum es überhaupt zwei Dateien gibt. Falls die eigentliche Datenquelle z.B. eine DB ist, dann sollte man tatsächlich erst versuchen EINE XML-Datei zu erzeugen. Naja, irgendeinen Grund wird es schon haben.

Kannst Du mal ein paar allgemeine Bemerkungen dazu schreiben? (Ob das überhaupt geht mit XSL, ob es überhaupt bzw. in diesem Falle sinnvoll wäre usw.)

Zweistufige Transformationen sind durchaus möglich und auch üblich mit XSLT, v.a. wenns um Gruppierung geht, was ja mit XSLT/XPath 1.0 nicht so ohne weiteres funktioniert. Dann kann man z.B. im ersten Schritt sortieren und dann in einem zweiten Schritt Elemente nach den sortierten Kriterien gruppieren.

Cocoon unterstützt solche verketteten Transformationen. Bei der ersten Transformation muss man dann eine entsprechende Processing-Instruction generieren, die dann eine weitere Transformation auslöst. Mit anderen Parsern muss man die Ausgabe als DOM gleich wieder als Input für eine neue Transformation nehmen. Dazu ist ja XSLT eben auch selbst XML, erwartet XML und spuckt XML aus. Das kannst Du also vom Prinzip her endlos "pipen".

Viele Grüße
      Michael

(der sich fragt, ob diese <team> nicht auch irgend eine Identität/Teamname brauchen und ob ein <member> nur Mitglied in genau einem <team> sein kann - von wegen redundante Datenhaltung und so ...)

Hm, es gibt doch nur EIN Team, am Ende. Oder meinst Du, das eine <person> nur genau einer <gruppe> angehören kann, also es keine doppelten in den zwei Eingangsdokumenten geben kann? Das könnte man ja dann bei der Transformation abfragen, wobei man dann den Personen tatsächlich eine id verpassen sollte. Naja, aber wer weiss, wozu Alex das nun alles braucht. Kann er ja vielleicht mal kundtun, falls er nicht bei der CIA arbeitet ;-)

Gruß
Franz