Hallo Thomas,
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.)
Hm ... wär eine Überlegung wert. Im Moment habe ich noch das HauptLayoutXML mit den Überschriften für die einzelnen Kapitel und den Platzhaltern und halt die DatenXML. Im XSL werden die Platzhalter durch die Daten aus der DatenXML und wie die Daten denn dargestellt werden sollen (als Tabelle oder Liste oder sonstwie) ersetzt. Weitere XML-Layout-Komponenten werde ich wohl so wie gedacht nicht hinbekommen. Das habe ich schon verstanden ... Darf ichs trotzdem doof finden, dass das net geht?
Das cdcatalog-Beispiel ist nur ein Beispiel. Das XML ist DocBook-XML, mit einem solchen XML kann ich dann ganz einfach per DocBook-XSL HTML, PDF und RTF genieren, da die Tags ja eh vorgegeben sind.
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.
Ich meinte, ich ändere einfach die Anordnung der Tags in der XML ohne überhaupt das XSL noch einmal anzufassen. Die Platzhalter bleiben gleich. Die Platzhalter geben nur an, mit welchen Daten sie aus der DatenXML ersetzt werden sollen. Die Platzhalter können allerdings auch durch ganze Tabellen oder anderes ersetzt werden. Diesen sollten eben in andere XML-Dateien ebenfalls mit Platzhaltern versehen, abgespeichert werden. So kann ich in diesen unabhängig vom XSL bestimmen, wie die Tabelle aussehen soll und wie die Platzhalter angeordnet werden.
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.
Genau das versuche ich jetzt auch include, import bzw. call-templates zu verwenden. Bin noch ein klein wenig anfängerhaft und muss erst rausfinden, was alles möglich ist und was eben nicht.
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?)
ganz ganz viele for-each-Schleifen
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.
Wie schon gesagt, versuch ich das gerade.
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.
Also die Daten liegen ja eh in XML vor. Da sollen sie auch bleiben. Jetz gehts um die Darstellung, die ich ja eigentlich auch größtenteils in XML auslagern wollte. Scheinbar ist das aber nicht möglich. Wenn sich jetzt "author" in "performer" ändern sollte, müsste ich eh an dem XSL auch was ändern, weil ich ja dann nicht mehr auf den Tag "author" in der DatenXML zugreifen könnte. Eine Änderung ist nicht auszuschließen. Nur wenn ich die DatenXML ändere, muss ich noch lange nicht den Platzhalter im LayoutXML ändern oder umgekehrt.
Ich glaub, ich wiederhole mich mit dem was ich oben schreibe. Es ist auch wenig schwer das hier zu erklären. Ob ein Bild da mehr sagt, bezweifle ich.
Deine Tipps nehme ich wirklich ernst. Aufdrängeln lass ich mir wirklich auch nichts. Ich schaue halt, obs mir was bringt oder nicht. Hier per Forum jemanden genaustens zu erklären worum es geht, wäre zu aufwendig.
So, nun muss ich aber erstmal weiter machen und guggen, wo ich am Ende lande ...
Gruß,
Kerstin