Hallo Kerstin,
Ehm ... na ja, genau das ist - meine Meinung nach - falsch. Du versuchst Layout mit dem XML zu mischen und das auszulagern. Besser, weil logischer und besser wartbar, wäre das Layout in einem XSL-Template auszulagern.
Das sehe ich immer noch anders.
Das habe ich mir gedacht :)
Ich habe eine XML-Datei mit dem Hauptlayout (cdcatalog_book.xml).
Schon dabei hat sich mir der Megen verkrampft. Layout gehört schlicht nicht in das XML und ich würde das wirklich nicht behaupten, wenn ich nicht genügend Erfahrung auf dem Gebiet besäße, aber mehr dazu weiter unten.
Für mich ist das Layout der einzelnen Komponenten so viel besser händelbar, wenn diese in extra XML-Dateien abgelegt werden. Hier muss man einfach nur die Namen der Elemente und ggf. Attribute kennen, um das Design zu ändern.
Das ist nur scheinbar so. Was ist wenn sich das Layout ändert und du diese Änderungen machen musst? Wenn es eine größere Änderung ist, muss du dann über viele XML-Dateien was ändern und du wirst zusätzlich auch im XSL Änderungen machen müssen. Oder du legst noch mehr XML- und XSL-Dateien an und es wird irgendwann ziemlich unübersichtlich. (Z.B. gesetzt dem Fall, dass nicht nur HTML sondern auch PDF etc. als Ausgabeformat gewünscht wird, dann kannst du die "XML-Templates", die HTML Enthalten ganz vergessen und welche mit FO-Elementen anlegen usw.)
Eine Ablage in XSL erfordet die Kenntnis der Syntax von XSL - nur meine Meinung.
Das ist etwas widersprüchlich, denn erstens brauchst du jetzt wesentlich mehr Arbeit in die Entwicklung der XSLs zu stecken, denn die Lösungen die du brauchst, sind sehr spezifisch und so gut wie nicht wiederverwendbar und zweitens, ich verstehe nicht ganz was du meinst, denn die Syntax von XSL muss du so oder so kennen, wenn du damit arbeiten willst.
Die Auslagerung wäre schon hilfreich und würde das ganze vielleicht übersichtlicher machen. Am Beispiel der cdcatalog.xml habe ich nur versucht, das Problem hier darzustellen. In Wirklichkeit gehts um sehr viel komplexere Daten, die durch XSL in das richtige Layout gebracht werden sollen.
Das es sich nicht um ein kleines Heimprojekt handelt, habe ich schon auch so gedacht.
Mein XSL-File dazu umfasst nun auch schon fast 2000 Zeilen, in dem halt das Layout der Daten enthalten ist. Die Auslagerung würde eventuell ein wenig Übersichtlichkeit zurückbringen. Außerdem vielleicht auch etwas mehr 'professioneller' aussehen, als alles in eine Datei zu hämmern.
Da gebe ich dir ganz Recht. Ich habe nicht wenige Projkete mit XML und XSL realisiert. Da ist eine gutdurchdachte Teilung der XSLs sehr wichtig.
Ich habe XSLs die sehr koplexe Ausgaben generieren, aber nur 50-60 Zeilen lang sind: dafür includieren sie aber mehrere andere XSLs und arbeiten sie dann nur mit call-templates. Ich habe solche XSL-Dateien, die nur Templates für die Formatierung und Ausgabe von Bilder, Falsh oder Videos enthalten und auch welche die nur Templates für Datumsformatierung usw. enthalten.
Diese Template-XSLs kann ich aber dafür in beliebige andere XSL-Datein inkludieren und deren Funktionalität mit call-template oder apply-templates mit verschiedenden 'mod's nützten, egal ob ich PDF oder HTML oder SVG erzeuge.
2000 Zeilen sind für eine einzelne alleinstehende XSL-Datei schon wirklich groß (Ich nehme an du hast ein paar sehr große for-each-Schleifen dinn?)
Da müsstest du eingeltich die Datei ganz auseinanderpflücken und nachsehen welche Teilkomponente als eingenständiges Template erstellt werden kann. Dann kannst du damit anfangen solche Templates zu verallgemeinern (d.h. sie parametisieren) und sie schließlich dann in eigene XSLs auslagern.
Wenn du aber versuchst diese Funktionalität in die XMLs auszulagern, wird dir das dein XSL kaum vereinfachen, sondern ihre Handhabung nur erschweren.
Und was passiert, wenn sich mal das XML ändert? Es wird z.B. aus "autor" "performer"? (XMLs verden ja oft aus DB-Daten generiert, d.h. eine kleine Änderung der DB-Ausgabe wirkt sich auf alle generierten XMLs aus).
Da musst du hergehen und alle deine XML-"Templates" durchsuchen um den "Platzhalter" auszutauschen und noch mehr: du musst vielleicht auch dein XSL ändern, denn vielleicht hast du ja irgendwo ein "name() = 'autor'" drinn.
Dann ist es schon einfacher, wenn der Austausch nur in einem einzigen XSL und vielleicht nur in einem einzigen Template passieren muss.
Natürlich möchte ich dich zu nichts überreden, aber ich denke, dass du auf diese Weise den falschen Weg zur Verinfachung einschlägst.
Grüße
Thomas