Projekte
|
Team |
Peter Heilbronn |
Thema |
Beschreibung des internen XML-Formates
( original )
|
Letzte Bearbeitung |
04/2004 |
Home |
www.mxks.de
|
1. Allgemein
1.1. Dateien im Netz
1.2. Verschlüsselung im Netz
2. Die tags
2.1. Was ist ein tag
2.2. Das Zitat - Cite
2.2.1. Feste Nummerierung der Fußnote
2.2.2. Auslassungen im Zitat - CBr und CDot
2.2.3. Hervorhebung im Zitat - Cite/@em
2.2.4. Verwendung des Zitatkataloges - CiteCatalog(Ref)
2.2.4.1. Fortlaufende Fußnoten - @style=''strict''
2.2.4.2. Nur Quellenauflistung - @style=''compact''
2.3. Internes Zitat - cite
2.4. Absatz - P und PP
2.5. Seitenbemerkung - CommentHead
2.6. Kommentar - Comment
2.7. Fußnote - Footnote
2.7.1. Feste Nummerierung - vorgegebenes Dokument
2.7.2. Automatische Nummerierung - eigenes Dokument
2.8. Seitenfuß - Pagefoot
2.9. Wichtiger Punkt - CardinalPoint
2.10. Dokumentbeschreibung - Abstract
2.10.1. Abstract/@title=''excerpt''
2.10.2. Abstract/@title=''original''
2.10.3. Langer Zusatz- oder Informationstext - Abstract/P|Cite
2.10.4. Kurzer Zusatz- oder Informationstext - Abstract/@desctiption
2.11. Dokument
2.11.1. Sichten - Struktur
2.11.2. Conspectus - Konspekt als ''innere'' oder eigene Datei
2.11.3. Originale und innere Verlinkung
2.11.4. Baumstruktur eines Dokuments
2.12. Kapitel und Unterkapitel - Section, Subsection
a.) Nummerierung
2.13. Seitenangabe - Page
2.14. HTML-tags
2.15. Bild - img
2.16. Entities
2.17. Links - Ref
3. Ansehen von XML ohne compiler
3.1. Entpacken und Test
3.2. Eigene Datei vorbereiten
3.3. Erklärung
4. Die interne Struktur
4.1. Übersicht und Technisches
4.2. Das XML-Projekt
4.3. ANT-Buildfiles
4.3.1. Environement - Umgebungsvariable
4.3.2. Pfade
4.3.3. xmlcatalog
4.4. Strukturfile oder Navigationsfile - mxks/main.navbar.xml
4.4.1. NavGroup - Ebene
4.4.2. NavItem - Einzelseite
4.4.3. NavGroup - Automatismus
4.5. Indexfiles - Automatismus
4.5.1. IndexItem - Exzerpte
4.5.2. DocInfo - Konspekt, Struktur, Bilder, ...
4.5.3. IndexItem/@style
4.5.4. RefIndexGroup
4.6. Stylesheets
4.6.1. html
4.6.2. navbar
4.6.3. css
4.6.4. index
4.6.5. excerpt
4.6.6. Nicht-Indexseiten oder reine Datenseiten
5. Erzeugen von ANT-buildfiles mit xsl
1. Allgemein
Da mir alle vorhandenen Formate zu kompliziert oder auch zu
allgemein schienen, habe ich mich entschieden, eine eigene
Minimal-dtd zu erstellen. Sie ist so einfach gehalten, dass man im Zweifelsfalle
sehr schnell eine Umsetzung in ein anderes Format vornehmen kann.
Allgemeines zu XML findet man beim
W3C bzw eine hervorragende Einführung
mit
Beispielen und verständlicher Beschreibung bei
Selfhtml, dass ich an
dieser
Stelle nicht darauf eingehen möchte. Jeder, der sich mit html auskennt, kann
sehr
schnell zurecht kommen. XML ist,
was du beschreiben willst, mach eckige
Klammern drum.
Hier wird der grundsätzliche Vorgang beim übersetzen mittels xsl gezeigt.
Groß- und Kleinschreibweise wird beachtet!
Das Format und seine Anwendungen unterliegen einer ständigen Veränderung und
sind sozusagen als Baustelle zu betrachten.
Als Beispiel dieses Dokument in seiner
XML-Form. Das sieht sehr schrecklich aus,
aber wenn man es sich in seinem browser als Quelltext ansieht, dann wird die
Struktur ersichtlich.
1.1. Dateien im Netz
Im Netz befinden sich folgende Dateien, die man benötigen wird
- Die dtd's für unsere Seiten befinden ist hier öffentlich zugänglich:
http://www.mxks.de/dtd/XXXXX.dtd.
- Das Paket, um sich eigene XML-Exzerpte zu Hause anzusehen ist hier XML-Paket.
1.2. Verschlüsselung im Netz
Man braucht erstens ein Programm wie
PGP,
GnuPG oder
ein anderes public key privacy Programm. Damit geht es schon, ist aber
umständlich.
Zweitens wäre ein Mailprogramm gut, in welches man dieses PGP fest einbinden
kann. Unter Linux nehme ich KMail + GnuPG.
Damit kann man
- Mails verschlüsseln
- Mail unterzeichnen, damit ihr Inhalt nicht verändert werden kann und
der Absender sicher ist.
Das Vorgehen ist in den Hilfefiles der einzelnen Programme meist sehr gut
beschrieben. Auch kann man eine Menge mehr nützliche Dinge damit treiben.
Jeder Nutzer hat ein Schlüsselpaar, einen öffentlichen und einen geheimen
Schlüssel genannt public und secret key. Diese sind in den jeweiligen Files
genannt Schlüsselbund oder key ring zusammengefasst.
Ihr verschlüsselt eine Nachricht mit EUREM secret key und dem public key des
oder der EMPFÄNGER[S].
Er entschlüsselt mit EUREM public key und SEINEM/IHREM secret key.
Deshalb hängt an meiner Mail mein public key. Wenn ihr mir euren schickt,
dann können wir PGP so zusammen nutzen und den Schlapphüten die Arbeit
etwas erschweren. Diese Mail ist außerdem unterschrieben, um den wahren
Absender und den Inhalt zu schützen.
2. Die tags
2.1. Was ist ein tag
Ein tag ist eine Beschreibung, bzw. Markierung, seines Inhaltes.
Der 'Cite'-tag sagt an, dass alles, was in ihm steht, ein Zitat ist und als
Zitat dargestellt werden soll.
Technisch gesehen ist ein tag von der Form:
<TAGNAME>
Inhalt des tags, das können Text oder weitere tags sein.
</TAGNAME>
Also was ich sagen will, in spitzten Klammern. Der zweite tag-Teil sagt an, wann
der Inhalt, der z.B. als Zitat beschrieben wurde, zu ende ist. Fehlt dieser
Abschlussteil, so ist das Dokument nicht wohlgeformt und wird nicht verarbeitet.
tags können nur vollständig ineinander geschachtelt werden und dürfen sich nicht
überlappen! Es gibt auch leere tags, d.h. solche, die keinen Inhalt haben. Das
sind dann meistens reine Formatierungs-tags wie z.B. 'Zeilenumbruch'
<br />. Diese haben eine zweite spezielle Kurzschreibweise <TAGNAME
/> und besitzen keinen Abschluss-tag. Diese Kurzschreibweise ist das gleiche
wie <TAGNAME></TAGNAME>, also ohne Inhalt.
tags haben auch sogenannte Attribute oder Eigenschaften, wie zum Beispiel
vom
Zitat die Seitennnummer und die Quelle des Zitats. Eigenschaften können
notwendig oder auch optional, nicht notwendig, sein. Im folgenden sein ein
'*', ein Stern hinter dem Namen, ein Zeichen für ein notwendiges
Attribut. Dieser Stern ist dann aber nicht als Attributname anzugeben!
Die Attribute eines tags werden formal im Text angegeben in der Art
TAGNAME/@ATTRIBUTNAME. Untertags werden angegeben OBERTAGNAME/UNTERTAGNAME. Ein
Untertag ist ein tag, der in einem anderen tag, Obertag genannt wird,
eingeschlossen ist. Die heißt auch er ist verschachtelt.
<Obertag>
<Untertag attribut1="value1" >
...
</Untertag>
</Obertag>
Das Attribut wird somit angegeben:
Obertag/Untertag/@attribut1="value1"
. Diese Art der Beschreibung
nennt sich auch XPath und kann als Bestandteil von XML angesehen werden.
Mithilfe dieses Formalismus lassen sich alle möglichen tags und ihre Attribute
in einem Dokument adressieren, wobei noch viele andere Mechanismen hierfür
benutzt werden.
2.2. Das Zitat - Cite
2.2.1. Feste Nummerierung der Fußnote
Betrachten wir zuerst das Zitieren mit jeweiliger textueller Angabe der Quelle
über das Attribut @src und der nichtautomatischen Nummerierung der Fußnoten.
<Cite src="die Quelle" page="die Seitennummer" footnote="Nummer der
Fußnote">
das Zitat
</Cite>
Also sind 'src','page' und 'footnote' optionale Attribute, da sie nicht mit
einem Stern * gekennzeichnet sind.
So sieht es dann aus:
"
Dies ist ein Zitat.
Dies ist ein Zitat.
Dies ist ein Zitat.
Dies ist ein Zitat.
"
(Quelle, S. 23)
Es ist zu beachten, dass die angegebene Nummer der Fußnote für den Modus des
nichtautomatischen Zählens von Fußnoten benutzt wird. Beim automatischen Zählen
wird mittels des Zitatkataloges automatisch eine entsprechende Fußnote kreiert.
2.2.2. Auslassungen im Zitat - CBr und CDot
Wenn man in einem Zitat Auslassungen hat, sollte man, anstatt die Punkte
im Code zu machen, den CBr
-tag oder
CDot
verwenden. Oftmals
gibt es verschiedene Vorgaben für die Formalien und so ist es besser,
einem zentralen angepassten XSL-stylesheet die Darstellung zu überlassen.
"
Hier machen wir jetzt eine Auslassung mit <CDot /> und das sieht ...
aus. Oder wir haben eine längere Auslassung
...
machen dafür den cite break und fahren fort zu zitieren.
"
2.2.3. Hervorhebung im Zitat - Cite/@em
Oftmals sind in Zitaten Hervorhebungen des Autors selbst, und man will aber auch
eigene Hervorhebungen machen. Im Augenblick sind die des Autors als
<i>kursiv</i>
gekennzeichnet und damit nicht sichtbar, da das Zitat selbst in HTML in Gänze
kursiv gesetzt ist. Der tag für das Kursivsetzen ist in HTML der italic-tag,
daher das 'i'.
Eigene Hervorhebungen sollten mit dem bold-tag, d.h.
<b>Fettschrift</b> gekennzeichnet sein, mit dem Hinweis
'[Herv. v. XXX]'.
Das Zitat hat ein weiteres Attribut bekommen @em
. Damit wird
gesagt, dass im Zitat eigene Hervorhebungen sind. Da dies auch verschiedenen
Formalien unterliegt, wurde diese Angabe auch dem zentralen stylesheet
überlassen.
"
In diesem Zitat hat das em-Attribut den Wert 'XXXX' und dieser ist der Name
oder das Kürzel desjenigen, welcher die Hervorhebung oder auch emphase
genannt macht.
"
[Herv. v. XXXX]
2.2.4. Verwendung des Zitatkataloges - CiteCatalog(Ref)
DIES IST EINE EXPERIMENTELLE SEKTION UND IST NOCH IM BAU!
Den Zitatkatalog kann man einfach als komfortable Aufzählung der zitierten Werke
verwenden, oder/und um pro Zitat oder automatischer Fußnote eine Fußnote in der
Reihenfolge wie im Quelltext fortaufend zu erzeugen.
Der Zitatkatalog
CiteCatalog
enthält die Beschreibung
für in Zitaten verwendete
Literatur. Pro Werk existiert genau ein
CiteCatalogItem
,
welches ein
Abstract
enthält, mit der vollständigen
Beschreibung.
- CiteCatalog
- CiteCatalogItem cid="Referenzzeichenkette"
- Abstract author="Nachname" title="Titel" ...
- ...
- CiteCatalogItem
Der Katalog sollte möglichst am Anfang oder am Ende in das XML-Dokument
eingefügt werden. Ebenso darf nur
ein einziger Katalog-tag existieren
pro XML-Dokument.
Hier nun unser Testkatalog.
<CiteCatalog">
<CiteCatalogItem cid="nudel"">
<Abstract
authorsfirst="First"
author="Name"
title="Der Titel des Werkes"
edition="2.Aufl."
date="1840"
location="Zumbelstadt"
volume="Band 2"
/">
</CiteCatalogItem">
<CiteCatalogItem cid="popo"">
<Abstract
authorsfirst="First"
author="Name"
title="Der Titel des zweiten Werkes"
/">
</CiteCatalogItem">
</CiteCatalog">
Infolge sind ein paar Zitate definiert, mit welchem die Wirkungsweise deutlich
gemacht werden soll. Die Zitate benutzen anstatt dem Attribut @src, in welchem
die Quelle textuell angegeben wird, einen Verweis in den Zitatkatalog um die
Quelle zu bestimmen. Dieses Attribut heißt @cref.
<Cite cref="Verweiskürzel" page="Nummer der
Seite">
das Zitat
</Cite>
{
Im Gegensatz zum festen Nummerieren gibt es noch keine Möglichkeit, einen
weiteren Fußnotentext außer der Quellenangabe zu kreieren.
(d.V.)}
Ein @cref Eintrag muß im Katalog eindeutig sein. In unserem Falle
verwenden wir die Kürzel "nudel" und "popo" als die Einträge.
<Cite cref="nudel" em="P.H." page="5f">
Der Inhalt des Zitates mit Hervorhebung '@em="P.H."' und Seitenangabe
'@page="5f"'
</Cite>
<Cite cref="popo">
Der Inhalt des Zitates
</Cite>
<Cite cref="nudel">
Der Inhalt des Zitates
<Cite>
Und das sieht nun so aus:
"
Der Inhalt des Zitates mit Hervorhebung '@em="P.H."' und Seitenangabe
'@page="5f"'
"
[Herv. v. P.H.](nudel:5f)
"
Der Inhalt des Zitates
"
(popo)
"
Der Inhalt des Zitates
"
(nudel)
Es gibt also zwei Versionen, wie mit dem Katalog gearbeitet werden kann.
Dafür gibt es den Hilfstag
CiteCatalogRef
, welcher
den Ort und die Art der Ausgabe bestimmt.
- CiteCatalogRef style="strict|compact"
2.2.4.1. Fortlaufende Fußnoten - @style=''strict''
In der ersten Version wird wird pro Zitat eine Fußnote
als Verweis auf den Originaltext am Ende des
Dokumentes angehangen. Dies geschieht mit dem Einfügen des
CiteCatalogRef
-tags an der entsprechenden
Stelle. Dies sollte am besten ein Pagefoot
sein,
den wir hier nun auch verwenden. Da dies eine sehr strikte Variante
des Zitierens ist, wird das 'style'-Attribut von CiteCatalogRef
auch so gesetzt: '@style="strict"'.
Gleichzeitig werden in diese Nummerierung alle Fußnoten mit automatischer
Zählung einbezogen und dargestellt. Das sind die Fußnoten mit
Footnote/@class="auto".
First Name
'Der Titel des Werkes',
Band 2,
2.Aufl.,
Zumbelstadt,
1840, S.5f; [nudel]
First Name
'Der Titel des zweiten Werkes',
o.O.,
o.J.
; [popo]
First Name,
a.a.O
; [nudel]
2.2.4.2. Nur Quellenauflistung - @style=''compact''
Bei der zweiten Version wird einfach nur der Katalog in der
Standardform ausgegeben. Dafür wird '@style="compact"' gesetzt.
Da hier keine Verlinkung zwischen Zitat und dem Werk, aus
welchem zitiert wurde, stattfindet, sollte man die Attribute
'Cite/@page' und 'Cite/@src' bemühen, um die Seite (page) und die
Quelle (src) kenntlich zu machen. Diese Attribute werden in Version
1 nicht ausgewertet, d.h. visualisiert.
First Name
'Der Titel des Werkes',
Band 2,
2.Aufl.,
Zumbelstadt,
1840; [nudel]
First Name
'Der Titel des zweiten Werkes',
o.O.,
o.J.
; [popo]
2.3. Internes Zitat - cite
Nun will ich zitieren <cite>und das zitierte</cite> fügt sich
einfach ein. Das sieht dann so aus:
Nun will ich zitieren "und das zitierte" fügt sich
einfach ein.
Will man innerhalb "eines Textabschnittes zitieren", so benutzt man
den üblichen HTML-cite tag, der aber nun als XML interpretiert wird. Diese
inline Zitat macht keinen eigenen Absatz, sondern fügt sich in den
Textfluß ein und umfasst alles automatisch mit Quoten "...".
Man beachte, dass hier die Groß- und Kleinschreibung in XML beachtet wird. Klein
geschriebenes 'cite' ist ein inline Zitat und ohne Attribute, ein großes
'Cite' ist eines mit eigenem Absatz.
2.4. Absatz - P und PP
<P>
der Inhalt
</P>
P
bezeichnet einen Absatz oder Paragraph.
Dabei geht der Absatz wegen möglicher Seitenbemerkungen nur auf 75% der
Seitenbreite. Will man über die gesamte Seite schreiben, dann muss man den tag
PP
verwenden.
So sieht es dann aus:
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
Dies ist ein Absatz über die volle Breite.
2.5. Seitenbemerkung - CommentHead
Die Seiten- oder Randbemerkung sollte möglichst kurz und prägnant sein,
da sie auch für die Strukturübersicht Verwendung findet. Man sollte sie
nicht
als Konspekt benutzen, da dies wieder eine ganz andere Form ist.
<CommentHead title*="Inhalt der Bemerkung" >
der Inhalt
</CommentHead>
Dies ist ein Absatz, an dessen Seite eine Bemerkung platziert werden soll.
Dies ist ein Absatz, an dessen Seite eine Bemerkung platziert werden soll.
Dies ist ein Absatz, an dessen Seite eine Bemerkung platziert werden soll.
Dies ist ein Absatz, an dessen Seite eine Bemerkung platziert werden soll.
| [Inhalt der Bemerkung] |
2.6. Kommentar - Comment
<Comment>
der Inhalt des Kommentars
</Comment>
{
Dies ist ein Kommentar.
Dies ist ein Kommentar.
Dies ist ein Kommentar.
Dies ist ein Kommentar.
Dies ist ein Kommentar.
Dies ist ein Kommentar.
Dies ist ein Kommentar.
Dies ist ein Kommentar.
Dies ist ein Kommentar.
Dies ist ein Kommentar.
Dies ist ein Kommentar.
Dies ist ein Kommentar.
Dies ist ein Kommentar.
(d.V.)}
2.7. Fußnote - Footnote
2.7.1. Feste Nummerierung - vorgegebenes Dokument
Feste Nummerierung ist vorgesehen, wenn man z.B. Originale in XML-Form überträgt
und die Nummerierung der Fußnoten beibehalten will. Dann ist man selbst
verantwortlich, wo die Fußnoten erscheinen werden. So macht man zuerst einen
Link, auch Refernz gennannt, und dann die eigentliche Fußnote, wo man sie
hinhaben möchte. Eine Fußnote allgemein hat folgende Form:
<Footnote number="Nummer der Fußnote" class="Klasse der Fußnote" >
der Inhalt
</Footnote>
Eine Fußnote ist keine Endnote, jedenfalls muss sie es nicht sein. D.h., dass
man
den Inhalt der Fußnote dorthin setzen kann, wo man ihn haben will, und nicht nur
an das Ende des HTML-Files. Dazu benötigt man 2 Fußnoten tags.
-
Referenzfußnote
tag zum Festlegen der Verlinkungsstelle. Hier muss die 'class' nicht
angegeben werden, sie ist automatisch 'class="ref"', welches bedeutet, daß
dieser Fußnoten tag nur die Referenz auf den eigentlichen Inhalt darstellt.
Der Inhalt dieses tags kann das letzte Wort des mit der Fußnote versehenden
Textes sein.
-
Inhaltsfußnote Der tag zum Darstellen des Inhaltes der Fußnote
selbst. Dieser
tag hat die 'class="noref"' und er umschließt den darzustellenden Inhalt.
Die Nummer der Fußnote sollte fest gegeben werden, oder man verlässt sich
auf eine interne Zählung. Beide Zählungen sollten sich nicht überschneiden.
Intern gezählten wird ein Unterstrich nachgestellt.
Wird also keine Klasse angegeben, dann ist die Fußnote ein Verweis
class="ref". Soll
die Fußnote hingegen beschrieben werden, so hat sie die class="noref" und stellt
ihren Inhalt dar. Dabei kann man entweder dieser Referenzfußnote einen Inhalt
geben, oder sie in einem einzigen Tag darstellen.
Dies ist die Refernzfußnote mit fester Nummerierung
<Footnote number="255">
Das Ende dieses Texte wird mit der Fußnotenreferenz
versehen.
<Footnote>.
Und nun
eine mit automatischer Nummerierung .
Hier habe wir einen Text mit einem einfachen Fußnotentag als Referenz.
<Footnote class="ref" number="88" />
Das heißt, eine Refernzfußnote muß selbst nicht noch Text als tag mit öffnendem
und schließendem tag einfasse.
Dies ist die 2. oder eigentliche Fußnote.
<Footnote number="255" class="noref">
Das ist nun der Inhalt oder
Text der Fußnote selbst.
<Footnote>
Aber natürlich kann man die Fußnoten auch gerne im Pagefoot tag sammeln am Ende
einer Seite.
2.7.2. Automatische Nummerierung - eigenes Dokument
Bei dieser Art der Fußnoten erspart man sich das Nummerieren und umständliche
Auseinanderziehen der Fußnote in zwei separable tags. Wir brauchen also nur
einen tag pro Fußnote, welcher durch die 'class="auto"' gekennzeichnet ist.
<Footnote class="auto" >
der Inhalt
</Footnote>
Aber die Fußnoten werden gesammelt am Ende des Dokumentes,
bzw. wo CiteCatalogRef
mit @style="strict",
in der vorkommenden Reihenfolge dargestellt und an dieser Stelle ihr Inhalt mit
der fortlaufenden Nummer indiziert.
Weiterer Vorteil ist, diese Nummerierung fügt sich in die der Zitate ein, welche
auf den Zitatkatalog verweisen, falls es solche gibt. D.h. dort, wo der tag
CiteCatalogRef
im Seitenquelltext steht, das sollte das Ende des
Dokumentes sein, dort werden auch die automatischen Fußnoten dargestellt.
2.8. Seitenfuß - Pagefoot
<Pagefoot>
<Footnote number="Nummer der Fußnote" class="noref" >
der Inhalt
</Footnote>
</Pagefoot>
Insbesondere im Zusammenhang mit den Fußnoten existiert ein tag, welcher das
Ende
einer Seite bezüglich des normalen Fließtextes kennzeichnet. Wie oftmals ist
dieser Abschnitt mit einer horizontalen Linie gekennzeichnet und hier sollte man
die Fußnoten mit ihren eigentlichen Inhalten platzieren.
Es ist auch sinnvoll diesen Abschnitt mit der Seitenangabe zu verbinden. Ein
Seitenfuß sieht
dann wie folgt aus:
Dies ist der eigentliche Inhalt der Fußnote 1 eines Zitates im
entsprechenden Abschnitt dieses Dokumentes.
Dies ist der eigentliche Inhalt der Fußnote 256.
2.9. Wichtiger Punkt - CardinalPoint
Dieser tag sollte wirklich nur für ganz wichtige Sachen verwendet werden
und auch nicht zuviel Inhalt bekommen. Im Wesentlichen stellt er eine rote
Umrahmung zur Verfügung und wird auch in die Strukturübersicht übernommen.
Man kann in ihm Zitate und auch Paragraphen platzieren.
Hier sollten wirklich nur wichtige Sachen rein und zuviele rote Kästen sind
nicht schön.
2.10. Dokumentbeschreibung - Abstract
Der Abstract-tag enthält die Informationen über die ihn enthaltene Datei.
Hier der entsprechende Ausschnitt aus der entsprechenden dtd.
<!ELEMENT Abstract (#PCDATA|p|Abstract)*>
<!ATTLIST Abstract
authorshort CDATA #IMPLIED
authorsfirst CDATA #IMPLIED
author CDATA #IMPLIED
coauthors CDATA #IMPLIED
email CDATA #IMPLIED
title CDATA #REQUIRED
subtitle CDATA #IMPLIED
description CDATA #IMPLIED
date CDATA #IMPLIED
type (original|excerpt) "original"
class (classified|innercircle|official|open) "open"
origin CDATA #IMPLIED
publisher CDATA #IMPLIED
isbn CDATA #IMPLIED
volume CDATA #IMPLIED
storage CDATA #IMPLIED
src CDATA #IMPLIED
state CDATA #IMPLIED
version CDATA #IMPLIED
keywords CDATA #IMPLIED
>
Hierbei entsprechen die einzelnen Attribute in der Attributeliste 'ATTRLIST' des
tags Abstract
den möglichen Attributen in der XML-Datei. Die wichtigsten sind Autor Nachname
'author',
Vorname 'authorsfirst', Titel 'title',
Kurzbeschreibung 'description', sowie Stichworte 'keywords'. In 'storage'
wird die Art der Speicherung eingetragen, z.B. "15KB, rtf, gz".
Der Status 'state' versteht sich von selbst, z.B. "in Arbeit".
Manche Attribute wie @title werden einfach nur angezeigt, aber manche
beeinflussen die Darstellung selbst.
2.10.1. Abstract/@title=''excerpt''
Manchmal gibt es geschachtelte Abstracts.
Weshalb der 2.Abstract tag? Wenn man als Typ 'excerpt' einträgt, so geht der
Prozessor davon aus, dass es einen zweiten Abstract tag gibt. Im ersten
Abstract stehen die Daten vom Exzerpt selbst, d.h. sein eigener Titel usw.
Im inneren Abstract, dem 2. stehen dagegen die Daten des Originalfiles, sein
Titel und Autor usw. Man hat nämlich in den seltensten Fällen das Original
selbst in unserer XML-Form, wo soll man sonst die Daten über das Original
herbekommen. Liegt das doch mal in unserer Form vor und hat somit einen
eigenen Abstract tag, dann wird der Prozessor mit einem äußeren Schalter
bei seinem Aufruf darauf aufmerksam gemacht und er holt sich die Daten dann
aus dem Originalfile selbst.
Die Originalfiledaten verwende ich übrigens auch für die Anzeige in der
Übersicht HTML-Seite.
<Abstract ...>
Daten für das Exzerpt
<Abstract ...>
Daten des Originals
</Abstract>
</Abstract>
2.10.2. Abstract/@title=''original''
Der andere Typ ist im Moment 'original', wobei nur ein Abstract erwartet wird.
Wenn ihr kein 'type' Attribut im Abstract angebt, wird automatisch davon
ausgegangen, dass ihr 'original' gewählt habt.
Diese file hat folgenden alleinigen Abstract, da es ein Original ist:
<Abstract
authorsfirst="Peter"
author="Heilbronn"
title="Beschreibung des internen XML-Formates"
description="Dieses Dokument beschreibt die grundlegenden tags unseres
internen Exzerpt-Formates um eigene Dateien einbinden zu können."
date="07/2003"
/>
2.10.3. Langer Zusatz- oder Informationstext - Abstract/P|Cite
Falls eine Beschreibung zu einem Dokument noch zusaetzlich gegeben werden soll:
<Abstract
title="Das Lalala"
author="Originalautorname"
authorsfirst="Originalautorvorname"
>
<P>
Hier kommt die Beschreibung hin.
</P>
<P>
Sie kann auch aus mehreren P und Cite-tags bestehen.
</P>
</Abstract>.
Natürlich kann man beim Exzerpt dem inneren, also dem Original-Abstract-tag,
und auch dem aeusseren Abstract-tag eine Beschreibung geben.
Die Kurzbeschreibung ist der eigentliche Abstract, wie er bei
Fachveröffentlichungen als Begriff verwendet wird. Sie wird im Dokument selbst
als Section
allem anderen vorangestellt und als
Section/@title="Kurzbeschreibung" gekennzeichnet.
Diese Beschreibung ist übrigens dass, was in den index files, dh den
Übersichtsseiten, als Informationstext zum link erscheint und in der
Sitemap mit einer Klappbox versehen angesehen werden kann.
2.10.4. Kurzer Zusatz- oder Informationstext - Abstract/@desctiption
Der Text in Abstract/@description
ist als Kurzbeschreibung gedacht,
die ohne Schnörkel in den Indexseiten dargestellt wird.
Sie wird als Text in der Sitemap
einfach so dargestellt, _ohne_ Klappbox. D.h., wenn er eingetragen wird, dann
bitte sehr kurz.
2.11. Dokument
Ein Dokument meint, wenn nicht anders bezeichnet, eine XML-Datei. Diese wird in
eine oder mehrere HTML-Dateien mittels eines oder mehrerer XSL-stylesheets
übersetzt. Jede entstandene HTML-Datei kann man als Sicht auf die
zugrundeliegende XML-Datei auffasse. Diese XML-Datei wird auch als Quelldatei
(source) bezeichnet und eine aus ihr resultierende HTML-Datei als Zieldatei
(target). Es wird auch stillschweigend davon ausgegangen, dass diese XML-Datei
unsere dtd benutzt, d.h. die oben erklärten tags in ihrem Zusammenhang.
Werden aus einer XML-Datei mehrere Zieldateien, auch HTML-Repräsentanten
genannt, erzeugt, so ist es oft so, dass bestimmte tags nur für die eine Sicht
oder einen Repräsentanten ausgewertet werden und andere nur für den anderen.
Zumeist bleibt aber z.B. die Kapitelstruktur unberührt, d.h. die Section oder
Subsection-tags werden in fast jeder Sicht benutzt und ausgewertet.
Werden bestimmte tags fast ausschließlich von einer bestimmten Sicht benutzt, so
formen sie quasi ein extra Dokument innerhalb des Dokumentes. Dies nennt man
auch inneres Dokument. Davon kann es beliebig (endlich) viele geben. Ein solches
ist z.B. der Konspekt oder die Struktur.
Aber strenggenommen ist die am meisten verwendete Form der Darstellung, das
Exzerpt, auch eine Sicht, wenn auch die
Hauptsicht.
2.11.1. Sichten - Struktur
Die einzigen bisher
erstellten Sichten sind also Exzerpt, Konspekt und
Struktur. Eine Sicht
bedeutet technisch, dass die gleiche Datei mit einem anderen stylesheet
übersetzt wird und dabei eine andere Datei, eine andere Sicht auf die selbe
Quelldatei erzeugt.
Übersetzt man ein
Exzerpt-XML-file, also eines, welches mit der notice.dtd
konform
geht, mit dem excerpt.structure.xsl
stylesheet, so werden nur die
für die Struktur wichtigen tags wie z.B. 'CommentHead' dargestellt. Es entsteht
ein Strukturfile als HTML-Repräsentant.
Übersetzt man
das gleiche File mit dem Konspekt-stylesheet conspectus.xsl
, so
wird eine neue Datei erzeugt, in welcher nur die Bestandteile angezeigt werden,
welche im Konspekt-tag stehen.
2.11.2. Conspectus - Konspekt als ''innere'' oder eigene Datei
<Conspectus style="exclusive|inclusive">
</Conspectus>
Ein Konspekt ist eine inhaltliche Zusammenfassung eines Textes gegenüber einem
Exzerpt, welches quasi eine zitatorientierte Zusammenfassung ist und auch meist
viel umfänglicher als ein Konspekt daherkommt. Man sollte sich also kurz fassen.
Ein Konspekt kann eine andere Datei als das Exzerpt sein, muss es aber nicht.
Das wichtige ist, dass man alles, was im Konspekt erscheinen soll, im
Konspekt-tag einschließt.
Dieser tag sollte innerhalb von Abschnitten oder Unterabschnitten stehen,
diese nicht umfassen. Ansonsten kann man innerhalb des <Conspectus>
tags alle anderen tags außer Section, Subsection und Fußnoten verwenden.
Also kann man den Konspekt auch aus dem Exzerpt-file generieren. Dabei wird die
gleiche Kapitel- oder Abschnittseinteilung genommen wie beim Exzerpt und
es gibt automatisch eine Verlinkung zwischen den Überschriften mit den kleinen
'>>E' oder '>>K' gekennzeichnet. Alles, was in der Exzerptdatei innerhalb von
Konspekt-tags steht, wird in den Konspekt übernommen und erscheint nicht
im umgesetzten Exzerpthypertextfile. Also werden zwei separate HTML-Dateien
erstellt, eines für das Exzerpt und eines für den Konspekt.
Das 'style' Attribute sagt nun, ob der Inhalt des Konspekt-tags ausschließlich
'style="exclusive"' nur im Konspektfile dargestellt werden soll, oder, ob er
ebenso im Exzerptfile zu sehen sein soll. Dies betrifft natürlich z.B. auch ein
zugehöriges Strukturfile. Das 'style' Attribut macht natürlich nur Sinn, wenn
der Konspekt als innere Datei, also als tag-Folge innerhalb des
Exzerptfiles definiert wird.
Hier nun ein live Beispiel von einem Exzerpt, welches als innere Dokumente einen
Konspekt und eine Struktur definiert hat. Dazu gibt es noch mehrere
Originalfiles, welche in HTML-Form vorliegen und also nur kopiert werden. Der
folgende Abschnitt befindet sich im entsprechenden index file, welches
auf unser Dokument als Übersichtsseite verweist.
<
IndexItem
src="mxks/excerpt/peter2Postone.ZeitArbeitUndGesellHerr.xml"
dest="files/other/peter2Postone.ZeitArbeitUndGesellHerr.html"
base="../.."
stylesheet="excerpt/excerpt.xsl"
origsrc="mxks/excerpt/orig/Postone.vorwort.htm"
origdest="files/other/Postone.vorwort.htm"
style="actual"
>
<DocInfo name="structure"
src="mxks/excerpt/peter2Postone.ZeitArbeitUndGesellHerr.xml"
dest="files/other/peter2Postone.ZeitArbeitUndGesellHerr.structure.html"
base="../.."
stylesheet="structure/excerpt.structure.xsl"
buildmode="build"
/>
<DocInfo name="conspectus"
src="mxks/excerpt/peter2Postone.ZeitArbeitUndGesellHerr.xml"
dest="files/other/peter2Postone.ZeitArbeitUndGesellHerr.conspectus.html"
base="../.."
stylesheet="conspectus/excerpt.conspectus.xsl"
buildmode="build"
/>
<DocInfo name="original"
src="mxks/excerpt/orig/Postone.kap8.htm"
dest="files/other/Postone.kap8.htm"
base="../.."
buildmode="copy"
/>
<DocInfo name="original1"
src="mxks/excerpt/orig/Postone.prol.htm"
dest="files/other/Postone.prol.htm"
base="../.."
buildmode="copy"
/>
</
IndexItem>
2.11.3. Originale und innere Verlinkung
Einem Exzerpt kann über den IndexItem
-tag auch ein Originalfile
zugeordnet werden. Ein Original ist immer eine eigene Datei, nicht wie der
Konspekt.
Ist dies ein Fremdformat, so wird es nur kopiert
(IndexItem/@origbuildmode="nobuild"
). Ist es hingegen in unserem
XML-Format, so kann es mit IndexItem/@origlinkmode="on"
automatisch
mit Exzerpt oder Konspekt über die Überschriften intern verlinkt werden.
Ansonsten erreicht man dieses File nur über den Link im Dokumentenkopf des
Exzerpts oder Konspekts.
2.11.4. Baumstruktur eines Dokuments
Die Dokumente haben einen Wurzel-tag, das heißt, das dieses der äußerste tag
ist, der
alle anderen enthält. Er sagt an, welcher Art das Dokument ist.
Richtigerweise passiert dies technisch gesehen in der 'DOCTYPE'-Anweisung, sei
hier aber nicht weiter beachtet. Hier nun die echte
DocTypeDefinition (dtd),die
XML-Formatbeschreibung.
Im wesentlichen gibt es im Moment nur die Typen 'Excerpt' und 'Notice'. Dieses
Dokument ist eine Notiz. Der Typ eines Dokumentes bestimmt, wie der Inhalt
dargestellt wird, z.B. den Kopf. Die eigentliche Darstellung von der technischen
Seite her wird mit XSL-stylesheets generiert, worauf ich aber hier auch nicht
weiter eingehen will.
<Excerpt >
<Section title*="Titel des Kapitels" index="feste Nummerierung" >
</Section>
<Section title*="Titel des Kapitels" index="feste Nummerierung" >
der Inhalt
</Section>
</Excerpt>
2.12. Kapitel und Unterkapitel - Section, Subsection
<Section title*="Titel des Kapitels" index="feste Nummerierung" >
der Inhalt
</Section>
Dies ist ein Kapitel, es kann Unterkapitel aber keine Kapitel enthalten. Es wird
einmal im Inhaltsverzeichnis dargestellt (siehe diese Seite ganz oben) und dann
noch einmal in der Reihenfolge mit seinem Inhalt. Das Kapitel 'Die tags' ist ein
Beispiel.
<Subsection title*="Titel des Unterkapitels" index="feste Nummerierung"
>
der Inhalt
</Subsection>
Dies ist ein Unterkapitel, es kann weitere Unterkapitel aber keine Kapitel
enthalten. Unterkapitel müssen sich in einem Kapitel befinden, können aber auch
verschachtelt werden.
Es wird einmal im Inhaltsverzeichnis dargestellt (siehe diese Seite ganz oben)
und
dann noch einmal in der Reihenfolge mit seinem Inhalt. Das Unterkapitel 'Kapitel
und Unterkapitel' ist selbst ein Beispiel. Zur Verschachtelung als Beispiel
folgendes UnterUnterkapitel 'Nummerierung'.
a.) Nummerierung
Normalerweise geschieht die Nummerierung automatisch mit arabischen Zahlen. Will
man aber eine besondere angeben, dann benutzt man bei 'Section' und 'Subsection'
das 'index'-Attribut, z.B. index="a.)". Es gibt auch die Möglichkeit Anfangswerte
zu setzen, mit dem 'count'-Attribut.
Hier der notwendige "Trick":
<Subsection title="III" index=""> so _kein_ Titel und nur die
Nummerierung, da nur @title ein link wird und @index="" die automatische
Nummerierung verhindert.
<Subsection title="Herder" index="III">, falls ein Titel gegeben ist und
eine feste Numerierung, also ganz normal angeben.
2.13. Seitenangabe - Page
Dieser tag mit Namen Page ist eine Seitenangabe und kann auch z.B. in Zitaten
verwendet werden, wenn
man wissen will, wo der Seitenumbruch im Zitat ist. Das einzige Attribut ist
'number'
und gibt die Seitennummer an. Implizit wird ein Anker angelegt und dieser hat
die Referenz 'pageXXX',
wobei XXX die Seitennummer repräsentiert. In unserem Fall ist dies 'page55'. Es
wird sowohl
das Attribut für XHTML a.id="pageXXX" also auch für HTML a.name="pageXXX"
gesetzt.
<Page number="55" />
Und so sieht das Ganze dann aus:
-55-
2.14. HTML-tags
Innerhalb z.B. eines Paragraphs kann man alle gängigen html-tags verwenden,
z.B. 'table', 'br', 'ol', 'b', 'a' ... Man sollte sich aber auf die wichtigsten
beschränken, damit eine Konvertierung nicht allzu schwierig wird. Man kann auch
css-Styles verwenden, welche dann aber eben auch bei der Übertragung halt
schwieriger werden. Man sollte z.B. auf absolute Positionierung verzichten. Ebenso
ist es nicht ratsam hypertext-links zu benutzen, sofern sie keine absoluten
Pfade verwenden, oder man genau weiß, wo das target-Dokument zu finden ist.
2.15. Bild - img
Will man ein Bild in ein XML-File unserer Art einfügen, so kann man einfach
den normalen HTML-tag img benutzen.
<img src="wo ist es" alt="bildkuerzel" />
Für img/@src sollte man einen Ordner vorsehen, der den gleichen Namen besitzt,
wie das XML-file selbst. Dort sollten alle Bilder oder sonstige zusätzlich
verlinkte Dateien hineinkommen. Dann kann ich ganz einfach mit einer
Ordnerkopie die Daten in das Webserververzeichnis machen.
Das Attribut img/@alt beinhaltet die Zeichenkette, die angezeigt wird, falls
jemand seinen Browser so eingestellt hat, dass Bilder nicht angezeigt werden.
Es ist zwar ein optionales Attribut, sollte aber wegen guten Stiles angegeben
werden.
2.16. Entities
Eine Entity ist ein Platzhalter. Mit ihr kann man quasi eine Textersetzung
durchführen. Sie wird auch benutzt, um Zeichen darzustellen, die sonst von XML
als Strukturmerkmal interpretiert würden. Will man ein Größer-Zeichen einfügen,
so ergibt dies einen Fehler, da XML hier glaubt, man will einen tag öffnen.
Dafür benutzt man dann die Schreibweise > und gt steht für
greater.
Jede Entity ist so aufgebaut: &CODE;. Die verschiedenen Codes und
Abkürzungen lassen sich z.B. bei
Selfhtml nachschlagen. So ist das
Zeichen &, was den Beginn einer Entity definiert, selbst darstellbar als
Entity in der Form: & mit amp für ampersand.
2.17. Links - Ref
<Ref link*="relativer Zielpfad" anchor="dokumentinterner Anker" title="Name"
>
der Inhalt, falls kein Name gegeben ist
</Subsection>
Der 'Ref'-link arbeitet mit unserer umgebenden Struktur zusammen. Der
letztendliche
absolute Pfad wird über das dem Dokument entsprechenden 'IndexItem' im
zugehörigen Index-File bestimmt. Dieses 'IndexItem' enthält eine
'base'-Attribut, welches den relativen Zielpfad zu einem absoluten ergänzt.
Damit soll ein bisschen Hilfe für den Linksalat gegeben werden.
Hat man einen externen oder sonstwie absoluten link, dann sollte man im
Augenblick den normalen html-link verwenden.
Todo:
Es ist geplant, dies noch weiter zu vereinfachen, indem für bestimmte Dokumente
eindeutige Namen vergeben werden, mit deren Hilfe selbst die relative Pfadangabe
automatisch herausgefunden werden kann. Dies ist aber noch zu tun.
Der Inhalt der internen Nummerierung
Der Inhalt der festen
Nummerierung.
3. Ansehen von XML ohne compiler
Da nun einige mit dem XML-Format arbeiten möchten, ergibt sich die
Schwierigkeit, sich sein File vernünftigen anzusehen. Dies sollte für moderne
Browser zu lösen sein.
Anbei ist ein
XML-Paket file mit den
nötigen
Zutaten. Es enthält die
entsprechenden stylesheets (xsl) und Dokumentbeschreibungen (dtd), sowie ein
Test XML-file mit Namen xml.format.xml.
Also:
3.1. Entpacken und Test
1. Entpacken des gepackten Paketes in einen am besten neuen Ordner.
2. Öffnen des files xml.format.xml im Browser.
Nun sollte man das file in der bekannten Form sehen können. Bei mir mit dem
Mozilla 0.9.8 (Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.8)
Gecko/20020204) funktioniert das.
Wenn man das Servicepack(!) für XML von Micors*ft installiert, dann kann man
sich
im IE 5 die files ambesten von den mir probierten Browsern darstellen. Vorher
ist da nichts zu machen, aber auch gar nichts.
3.2. Eigene Datei vorbereiten
Wie man nun ein eigenes file so ansehen kann, kann man sich am Beispiel
unseres xml.format.xml ansehen. Öffnet man es in einem Editor(!), dann kann
man sich den Quelltext ansehen. Öffnet man das file im Browser und läßt
sich den Quelltext anzeigen, so sieht man meistens auch den XML-Quelltext.
1. file in den Ordner mit den dtd und xsl kopieren
2. folgende 3 Zeilen sollten als erste(!) Zeilen im File eingetragen werden.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- DOCTYPE Excerpt SYSTEM "notice.dtd" -->
<?xml-stylesheet type="text/xsl" href="excerpt/excerpt.browser.xsl"?>
3. speichern und sich das file im Browser ansehen.
3.3. Erklärung
Ok, nun noch eine kurze Erklärung:
1. Zeile ist ein Muss als erste Zeile in jedem XML-file, sie beschreibt, dass
dieses file ein XML-file (?xml) ist, von welcher version (1.0) und mit
welchem Zeichensatz (ISO-8859-1, mit deutschen Umlauten).
2. Zeile beschreibt den Dokumententyp. Hier wird der Name das Wurzelknotens,
das ist der erste und äußerste tag (Exzerpt) bekanntgemacht und gesagt, wo
sich die Dokumentbeschreibung findet (SYSTEM "notice.dtd"). Im Augenblick
macht das Validieren gegen unsere dtd noch solche Probleme, dass die
Zeile erst einmal nicht benutzt wird.
3. Zeile nun sagt, welchen stylesheet man automatisch benutzen will
(?xml-stylesheet) und wo sich der stylesheet in Textform findet
(excerpt.browser.xsl). Diese Zeile benutzt der Browser um nun seine
Konvertierungsmaschine von XML nach HTML anzuwerfen, sie mit dem stylesheet
zu füttern und dann das file darzustellen.
Allgemein kann diese Vorschrift als Schablone dienen. Einfach die entsprechende
dtd und den stylesheet
eintragen, wenn man andersgeartete Dokumente angezeigt haben möchte.
Wenn ihr Schwierigkeiten mit den Browsern habt, dann müssen wir uns im
einzelnen darum kümmern und den stylesheet anpassen. Der Browser führt zum
Teil nicht alle Anweisungen richtig aus. So werden Nummerierungen verändert
oder manche andere Kleinigkeit. Daran kann ich allerdings wenig ändern.
Jedenfalls hat das KEINE Auswirkungen darauf, wie es auf der Webseite
dargestellt wird. Da benutze ich direkt einen speziellen xsl Interpreter namens
XALAN, wen es interessiert.
Viel Spaß
4. Die interne Struktur
4.1. Übersicht und Technisches
Alle Informationen, sowohl die reinen Inhalte, als auch die für die Übersetzung
notwendigen sind fast ausschließlich in XML-Dateien angelegt. Ausnahmen sind z.B.
Originaldateien (pdf,...) und Bilder.
Zur Erstellung der Seiten wird das Werkzeug
ant verwendet und dessen
XML-Prozessor nach der Definition 'trax' benutzt. Die für die automatische
Prozessierung notwendigen build Dateien werden speziell für dieses Tool erzeugt.
Ausgangspunkt der Übersetzung ist ein von Hand erstelltes Grund ant build file
'build.xml'.
Der Rest an build files wird automatisch erzeugt.
Viele Informationen über die Struktur erschließen sich durch das Lesen der
entsprechenden dtd Dateien, z.B. der
Indexbeschreibung.
Die Übersetzung wird von der Kommandozeile angestoßen. Bis jetzt wurde noch kein
entsprechendes grafisches Werkzeug entwickelt.
4.2. Das XML-Projekt
Der 'xml' Unterordner im Projekt enthält folgende Ordner und Dateien:
-
xml = src.home
-
dtd, alle Document Type Definitions
-
xsl, alle XSL-stylesheets und dazugehörige Dateien
-
mxks, die XML-Hauptseiten, z.B. alle Exzerpte und Indexseiten und
auch das Strukturfile
-
misc, weiter XML-Seiten, wie Termine und Links
-
script, enthält verschiedene shell und 'sed' Skripte
-
tmp
- ...
- build.xml, ist das Hauptbuildfile des Projektes.
- Readme.xml
Dieser Ordner ist der Quellordner und Bezugspunkt für alle Pfade im
Quellbereich. In diesem Order als working directory wird auch 'ant'
auf der Kommandozeile aufgerufen.
4.3. ANT-Buildfiles
4.3.1. Environement - Umgebungsvariable
4.3.2. Pfade
4.3.3. xmlcatalog
4.4. Strukturfile oder Navigationsfile - mxks/main.navbar.xml
- Nav base=".." site="www.mxks.de"
- Abstract
- NavParam
- ...
- BuildArgs
- NavGroup name="firstlevel", title="Hauptseite" label="MXKS" base=".."
- NavGroup
- ...
- NavItem title="YYY" buildmode="index|normal|..."
- ...
- NavGroup name="XXX"
Die interne Struktur des Projektes kennt ein Hauptfile. Dieses heißt
'main.navbar.xml' und ist das
Navigationsfile. Hier wird die baumartige
Struktur
der gesamten Website
angelegt. Das Wurzelelement ist
Nav
und die einzelnen
Ebenen sind
die
NavGroups
. Die Navigationsleisten jeder Seite, welche sie
führt, wird nur aus diesem einen Hauptfile heraus gebaut.
Die Nav
igationsbeschreibung enthält außer den Items und Gruppen,
welche die Seiten und Ebenen repräsentieren, noch andere
Informationen. Das sind einerseits die NavParam
, welche allgemeine
benamte Werte darstellen, also key-value Paare. Das zweite allgemeine an
Information sind die BuildArgs
. Dieses ist ein Container, in
welchem sich 'ant' spezifische Daten befinden, wie property
s,
path
und andere.
4.4.1. NavGroup - Ebene
Es bekommt jede Ebene eine sie
repräsentierende Hauptseite 'backlink' und einen Namen 'name' zugeordnet. Das
NavGroup
einer eine Ebene repräsentierende Seite enthält ihrerseits
wieder NavItems
. Sie enthält ebenso Farbangaben für 'active'
und
'inactive', in welcher ihr Label in den Navigationsleisten darzustellen ist.
NavGroups
kann man natürlich ineinander schachteln, woraus sich
eine im Navigationsfile beschriebene Baumstruktur der ganzen Website ergibt.
Es gibt genau eine oberste Gruppe, welche alle anderen und alle Items
enthalten muss. Diese trägt den Namen 'firstlevel'.
4.4.2. NavItem - Einzelseite
Ein NavItem
enthält einen Namen 'title' eine Quelldatei 'src' einen
stylesheet 'stylesheet', eine Zieldatei 'link', in welche sie mit dem stylesheet
umgewandelt wird und letztens eine dazu passende Pfadangabe zur Wurzeldatei der
gesamten site namens 'base'.
Es existieren 3 Arten von durch XML-files repräsentierte Seitentypen.
Es gibt Seiten, die nur für sich stehen, Einzelseiten, wie z.B. die
'Termine', oder Seiten, die
eine ganze Ebene repräsentieren, wie z.B. 'Texte'. Von den Einzelseiten
gibt es
solche, die nur Daten enthalten und solche, welche Index
-files
genannt werden. Diese enthalten eine komplexe Struktur von Unterseiten.
4.4.3. NavGroup - Automatismus
Eine Navigationsgruppe umfasst also eine Ebene, der ein XML-file als Hauptseite
zugeordnet ist. Die grundsätzlichen Ebenen müssen im Moment noch per Hand in
einem buildfile beschrieben werden. Das sind alle Elemente aus der ersten Ebene.
Alle weiteren unteren Ebenen werden automatisch übersetzt, sobald die
entsprechende obere Ebene übersetzt wird.
So ruft z.B. ant main.build
zum übersetzen der obersten Ebene auf.
'main.build' ist dabei der Name eines target
s im Hauptbuildfile
'build.xml' des Tools 'ant'. Von diesem target
aus
wird mittels 'navbar2build.xsl' ein temporäres buildfile erstellt und
aufgerufen. Diese enthält die Informationen zum rekursiven Erstellen der
gesamten Unterseiten.
Der Aufruf erfolgt mit dem Namen der entsprechenden
NavGroup/@name
, in unserem Falle 'firstlevel',
um die zu übersetzende Ebene zu kennzeichnen.
Aus den untergeordneten NavGroups
bzw. NavItems
wird
dann das buildfile zum Erstellen eben dieser gebaut.
4.5. Indexfiles - Automatismus
Bei der Übersetzung eines Indexfiles wird eine ganze Sequenz von Übersetzungen
getätig.
- Erzeugen eines neuen Indexfiles inklusive aller externen Informationen, wie
z.B.
IndexGroupRef
oder Exzerptfileinformationen
Abstract
(exzerpt.index2index.xsl),
- daraus wird die repräsentierende HTML-Seite des Indexfiles erzeugt
(exzerpt.index.xsl)
und ebenso
- das buildfile zum Erstellen aller untergeordneten Seiten
(exzerpt.index2build.xsl).
- Schließlich wird die Übersetzung dieses neuen buildfiles angestoßen.
Die Baumstruktur eines Indexfiles wäre ungefähr wie folgt:
- Index
- Abstract
- RefIndexGroup
- IndexGroup
- RefIndexGroup
- IndexItem
- ...
- IndexGroup
- RefIndexGroup
- IndexItem
- ...
Das Ganze nun etwas genauer.
Eine der großen Stärken des Projektes sind also die Indexfiles. Sie sind sowohl
als
Sichtfiles, als auch als Prozessfiles zu sehen. Als Sichtfile werden sie in eine
oder mehrere HTML-Seite umgesetzt, welche links auf ihre IndexItems
und
Informationen über diese enthält, welche sie aus diesen Files selbst extrahiert.
Dabei kann man beliebig viele Sichten auf die indizierten Dateien kreieren, wie
z.B. Normalansicht und nach Autoren geordnet.
Die prozessuale Sicht hingegen ist der Kern des Automatismus. Indexfiles sind
durch NavItem/buildmode="index"
gekennzeichnet. Dies löst einen
ganz anderen Mechanismus aus, als zum build einer normalen Seite.
Aus dem Indexfile wird ein weiteres Indexfile erstellt, in welchem alle
Informationen, die man aus den IndexItems
extrahieren muss, wie
Autor IndexItem->Excerpt/Abstract/@author
und Titel
IndexItem->Excerpt/Abstract/@title
,
zusammengefasst sind, um z.B. Sortierungen vornehmen zu können.
(-> gibt an, dass die Informationen aus der entsprechenden Quelldatei geholt
werden müssen.)
Aus dieser neuen
Datei wird sodann ein neues buildfile erstellt, mit welchem
alle IndexItems
übersetzt werden können und schließlich wird dieses
file aufgerufen und dadurch ein rekursives Erstellen der ganzen
zugehörigen Seiten automatisch ermöglicht.
Es werden zusätzlich Entscheidungen erzeugt, damit Seiten nur neu übersetzt
werden, wenn sich damit zusammenhängende Dateien verändert haben, um den Aufwand
zu senken. Dies ist noch nicht vollständig strukturiert, so dass man manchmal
mit z.B. 'touch' unter Unix erzwingen muss, dass das index file neu gebildet werden
muss, um die darunter liegenden files neu zu kreieren.
4.5.1. IndexItem - Exzerpte
- Exzerpt
- Konspekt
- Struktur
- Originalfile
- ...
- Bilder und sonstiges
Die IndexItems
stellen den informativen Kernbestand dar. Sie
enthalten eine Fülle von Informationen. Wohl die wichtigsten sind die Quelldatei
'src', der Ort 'dest' oder die Datei, an welchem sie kopiert oder in welche sie
mithilfe des 'stylesheet' übersetzt werden soll. Der 'buildmode="build"' gibt
z.B. an, ob eine Datei übersetzt werden soll. Meist sind die Files Exzerpte.
Wenn wir ein Exzerpt vorliegen haben, dann gibt es die Möglichkeit,
Informationen über eine eventuelle Originaldatei abzulegen. Die entsprechenden
Attribute sind analog 'origsrc','origdest', 'origbuildmode',... Damit ist es
möglich, dass im Exzerpt links zur Originaldatei erstellt werden könne.
(Wie die Exzerptfiles selbst aufgebaut sind, ist in den ersten Abschnitten
dieses Dokuments beschrieben.)
Wird 'origbuildmode="nobuild"' angegeben, bzw. dies ist die default Einstellung
beim Weglassen dieses Attributes in der dtd, dann wird das Originalfile nur
kopiert.
Im Falle, dass wir nur ein Originalfile haben, also auch kein
Exzerptfile, dann muss man als 'dest' den gleichen Wert eingeben wie für
'origdest' und sodann wird in der Index-HTML-Repräsentation auf dieses file
gelinkt. (Dies ist z.B. beim Medienprojekt der Falle, wo keine Exzerpte, sondern
gepackte Powerpoint Dateien als IndexItems
verlinkt werden.
Wenn dies nun der Fall ist, also ein Nicht-XML file durch
das IndexItem
repräsentiert wird, dann muss man einen
Abstract
als ersten tag in den IndexItem
tag einfügen,
damit auf der Index HTML-Seite zumindest Autor und Titel dieses files zur
Verfügung stehen. Das absolute Minimum ist ein Abstract
mit nur dem
Titel.
Ist das Originalfile selbst ein XML-File unseres von unserem Doctype, dann kann
man sogar mit 'origbuildmode="build"' das automatische Übersetzen dieses Files
anstoßen und mit 'origlinkmode="on"' veranlassen, dass die entsprechenden
Kapitel und Unterkapitel zwischen Exzerpt und Originaldatei verlinkt werden
können.
4.5.2. DocInfo - Konspekt, Struktur, Bilder, ...
- IndexItem style="actual|main|normal"
- Abstract
- DocInfo buildmode="build|nobuild|copy|dircopy|dirpack"
name="conspect|structure|label|thumb|package"
- ...
- IndexItem
- ...
Ein IndexItem
kann endlich viele DocInfo
-tags
enthalten. Diese Struktur ermöglicht verschiedenste Zusatzsichten und Dateien zu
einem Exzerpt zu erstellen. Die wesentlichen Attribute sind 'name' und
'buildmode'.
An Hand des Attributes DocInfo/@name wird entschieden, wie der
DocInfo
-tag
in der Verlinkung zu interpretieren ist, um welche Art von Informationen es sich
im Dokument, bzw. inneren Dokukment, handelt.
Attributwert | Interpretation |
conspect | Die beschriebene Datei wird als Konspekt
interprtiert, ist meist ein inneres Dokument, es wird prozessiert
und bei der Verlinkung mit dem Exzerpt berücksichtigt. |
structure | Es handelt sich um ein Strukturfile, es gilt
das gleiche, wie für den Konspekt. |
criticism | Dieses file wird als Kritik zum
Hauptdokument verlinkt. |
label | dies kennzeichnet ein Bild, welches dem Verweis
auf das Hauptfile vorangestellt wird |
thumb | Existiert nur mit einem label und wird anstatt
dieses angezeigt, wenn das label selbst zu umfangreich ist. |
package | Dieses File beinhaltet Zusatzinformationen und
wird z.B. im Exzerptfile als 'Info' im Kopfbereicht verlinkt. |
sonstiges | Wird nicht interpretiert, entscheidet sich
also nur an Hand des 'buildmode'. |
Das Attribut DocInfo/@buildmode hingegen wird vom XSL-Prozessor
bezüglich der
Übersetzung ausgewertet. Dabei kann zb. eine Übersetzung mit einem stylesheet
erfolgen oder aber ein einfaches kopieren, etc.
Attributwert | Interpretation |
build | Das durch 'src' gekennzeichnete file wird
mittels 'stylesheet' nach 'dest' übersetzt, z.B. Exzerpte. |
copy | Das file wird einfach kopiert und umbenannt.
Dies wird meist bei Originalfiles oder Präsentationen der
Fall sein. |
dircopy | In diesem Fall ist 'src' ein Ordner und der
gesamte Ordnerinhalt wird an die entsprechende Stelle kopiert.
Das wird oft für das kopieren von Ordnern mit benötigten
Bildern benutzt. |
dirpack | Der Ordnerinhalt von 'dest' wird als zip-file
nach 'src' gepackt. Meist findet dies bei Zusatzinformationen
Anwengung. |
nobuild | Hat weiter keine Bedeutung, außer, dass dieses
File nicht prozessiert wird. |
Das wichtigste also ist, dass ein DocInfo
einen Namen 'name' und
einen 'stylesheet' enthält. Anhand des stylesheets wird das Quellfile 'src' in
das Zielfile 'dest' übersetzt, sofern 'buildmode="build"' eingestellt ist. Ist
der Name z.B. 'conspect', dann wird dieses File als Konspekt zum übergeordneten
Exzerptfile behandelt und entsprechend verlinkt und angezeigt.
Ein weiterer bekannter Name ist 'structure', mit welchem ein sogennantes
Strukturfile angelegt und mit dem Exzerpt verlinkt wird. In diesem werden z.B. die
CommentHeads
und andere tags die die Struktur beschreiben
angezeigt.
Zwei weitere DocInfos
gehören zusammen und betreffen Bilder. Wenn
der '@name="label"', so wird das entsprechende file als Bilddatei vor dem
Schriftzug verlinkt und in verkleinerter Form auf der Indexseite selbst
angezeigt. Ist die Bilddatei zu groß, so benutzt man für die Indexseite eine
verkleinerte separate Bilddatei, welche dann angezeigt wird. Der entsprechende
Name ist dann 'thumb'. Beide tag-Formen sollten den 'buildmode="copy"' besitzen,
da sonst die entsprechenden Bilddateien nicht in den Zieldateibaum kopiert
werden.
Die 'thumb' und 'label' DocInfo
tags können nicht nur innerhalb von
IndexItem
, sondern auch direkt innerhalb IndexGroup
auftreten.
Mit dem 'buildmode="dircopy"' veranlasst man den Prozessor dazu, den Ordner
'src' nach 'dest' zu kopieren, um z.B. eine Vielzahl von zu einem file gehörige
Bilddateien zu kopieren.
4.5.3. IndexItem/@style
Mit dem 'style' Attribut lassen sich verschiedene Darstellungen
des entsprechenden IndexItems
auf der Indexseite realisieren.
Normale Items haben das Attribut IndexItem/@style
nicht gesetzt,
bzw. den default Wert aus der dtd "normal".
D.h. wir haben einen dünnen grauen Rahmen um das Item gezeichnet.
Man kann dieses Attribut aber auch auf folgende Werte setzen:
Attributwert | Interpretation |
normal | Ist der default Wert und macht nichts
besonderes. |
actual | Bedeutet, dass das Item als in Bearbeitung markiert wird.
Im Augenblick ist dies ein roter Rahmen und der Schriftzug "in
Bearbeitung". |
main | "main" zeigt an, dass in der entsprechenden
IndexGroup
dieses Item einen Hauptbestandteil ist. Diese Kennzeichnung
ist einfach ein fetterer und schwarzer Rahmen. |
4.5.4. RefIndexGroup
Dieser tag stellt einen Verweis auf eine Gruppe in einem anderen Indexfile dar.
Er besitzt nur zwei Attribute 'title' und 'src'.
'src' sollte auf ein anderes Indexfile zeigen und 'title' sollte der 'title'
einer dortigen IndexGroup
sein. Dann wird diese Indexgruppe einfach
an die Stelle des RefIndexGroup
-tags kopiert. Damit kann man
Gruppen, die an mehreren Stellen erscheinen, an einer Stelle pflegen. (Der
Quellpfad wird hier direkt verwendet anstatt einer weiteren Indirektion über
das Navigationsfile.)
4.6. Stylesheets
Die Ordnerstruktur unter xml/xsl gibt schon Auskunft über die Anwendung der jeweiligen stylesheets. Die relativen Pfadangaben zum Aufruf von untergeordneten stylesheets ist dabei in den styles fest eingegeben und muss bei Veränderung der Ordnerstruktur nachgezogen werden.
-
xsl
-
-
html, styles zum Erzeugen von z.B. dem html <head>
-
css, alles, was mit cascade stylesheets zu tun hat
-
excerpt, für die Erstellung der eigentlichen Exzerpte
-
index, hier sind die styles rund um die Indexseiten
-
conspect, wie der Name schon sagt alles für die Konspekte
-
purelist, alles, was mit 'purelist' zu tun hat, wie Wörterbuch oder Termine ...
-
-
-
Eigentlich alle Übersetzungen von XML-Dateien in HTML-Seiten benötigen mehrere stylesheets, wobei es einen Hauptstylesheet gibt, der die anderen intern aufruft.
Dabei werden die jeweiligen Ausgaben verschachtelt, also die tags wie bei einer Zwiebel ineinander gelegt.
Z.B. Exzerpte werden mit dem excerpt/excerpt.xsl
style gebildet.
Der Rahmen im Zielfile als <html>...</html> wird also von diesem stylesheet erzeugt. Hier hinein wird mit Hilfe der "html"-stylesheets eine weitere Schale gelegt.
4.6.1. html
Hier befinden sich alle stylesheets, die zumeist seitenbezogene HTML-tags erzeugen.
-
htmlhead, erzeugt mithilfe des
Abstract
-tags des Quellfiles den Abschnitt <head>...</head> mit den entsprechenden 'META'-tags und dem
'title' des resultierenden HTML-Files
-
htmlfoot, es werden hiermit am Ende des HTML-Files innerhalb des 'html/body'
Zusatzinformationen wie z.B. das letzte Compilierdatum erzeugt.
4.6.2. navbar
An dieser Stelle befinden sich sehr verschiedenartige stylesheets, die aber alle etwas mit
dem Strukturfile zu tun haben, z.B. dem zentralen
Naviagationsmenu.
-
navbar, dieser zentrale stylesheet erzeugt das entsprechende Navigationsmenu am Anfang jeder Seite (HTML-File), welche direkt über die Navigation zu erreichen ist. Das betrifft alle Indexseiten, wie auch manche reine Datenseite.
-
navbar2build kreiert zu einer als Parameter gegebenen
NavGroup
im Strukturfile ein ANT-buildfile, mit welchem alle zu
dieser Navigationsgruppe oder Ebene gehörenden Zieldateien gebaut oder kopiert
werden.
-
navber2sidemap kompiliert die als 'sitemap' bezeichnete
Gesamtübersicht aus dem Strukturfile und den Informationen aus den
Abstracts
der entsprechenden XML-Quelldateien.
-
navber2sidetree kompiliert die als 'sitemap' bezeichnete
Gesamtübersicht aus dem Strukturfile und den Informationen aus dem
gesamten Spektrum an vorhandenen Files und erzeugt einen vollständigen Baum der
vorhandenen Datenstruktur der gesamten site.
-
treeview.head.xsl kapselt die für den
/html/head
-tag bestimmten javascript-Abschnitte für die
Baumdarstellung der sitemap.
-
treeview.abstract.xsl kapselt die Darstellung eines einzelnen
Datefiles als Blatt oder Knoten in der Baumdarstellung der sitemap.
4.6.3. css
Bisher gibt es nur einen css erzeugenden stylesheet:
-
maincss.xsl, bildet dateiweite css zur HTML-Darstellung, z.B. dass bei Browseransicht andere Schriftarten als bei Ausdruck zur Anwendung kommen.
4.6.4. index
Dieser Unterordner enthält sowohl Prozessierungs als auch Ansichtsstyles für Indexfiles.
-
index.xsl, erzeugt die eigentliche HTML-Repräsentation der Indexseite.
-
index2index.xsl, bildet eine temporäre XML-Indexseite, welche alle externen Referenzen und Informationen enthält.
-
index2build.xsl, kompiliert eine XML-Indexseite zu einem ANT-buildfile, um alle entsprechenden Unterseiten und noch notwendigen buildfiles erzeugen zu können.
4.6.5. excerpt
Dieser Unterordner enthält sowohl Prozessierungsstyles für
Exzerpte.
-
excerpt.xsl, erzeugt die eigentliche HTML-Repräsentation des
Exzerpts.
-
excerpt.head.xsl, erzeugt die Kopfsektion des Exzerpts mit
allen wichtigen Informationen von und um dieses Dokument.
-
excerpt.head.linklist.xsl, kompiliert eine Tabellenzeile des
Kopfes, in welchem alle links auf Dokumente platziert sind, die mit
diesem Dokument in Verbindung stehen.
-
excerpt.content.items.xsl, stellt die eigentlichen tags, z.B.
P
..., des
Exzerptes bzw. verwandter Formen, wie Konspekt, dar.
Hier wird somit der Inhalt selbst erzeugt.
-
excerpt.browser.xsl, dieser spezielle stylesheet ist für die
Darstellung mittel browser gedacht und befindet sich im XML-Paket. Hiermit ist
es möglich, sich eigene XML-files nach unserer DTD anzusehen, ohne den
Prozessierungsmechanismus installieren zu müssen.
4.6.6. Nicht-Indexseiten oder reine Datenseiten
Bei den Nicht-Indexseiten gibt es solche,
- die direkt über die Navigation erreicht werden können und
- solche, die über eine Indexseite zu erreichen sind.
Danach unterscheidet sich natürlich der Aufbau der Seiten. Zur ersten Art gehören z.B. die Seiten, welche nach 'purelist' als reine Listen aufgebaut sind. Diese erhalten sowohl ein Navigationsmenu (navbar/navbar.xsl), als auch eine interne Navigation (titlepopup.xsl und titlepopup.table.xsl) (dies befindet sich noch im Bau.)
Als Beispiel sei die Seite 'Aktuell' genommen, welche mit dem stylesheet 'purelist/purelist.table.xsl' übersetzt wird.
-
purelist.table.xsl, der Hauptstylesheet, der alle untergeordneten aufruft.
Er erzeugt auch den Inhalt der Seite selbst.
-
-
html/htmlhead.xsl, der Kopfbereich der HTML-Seite.
-
navbar/navbar.xsl, das Navigationsmenu
-
titlepopup.xsl, die interne Übersicht über die Liste der
PureListGroups
als Popupmenu.
-
html/htmlfoot.xsl, die obligatorischen Zusatzinformationen.
Die Datenseiten, welche über Indexseiten zu erreichen sind, besitzen kein Navigationsmenu, dafür aber einen Kopf, welcher nicht mit dem 'html/head' zu verwechseln ist. Im Kopf werden die Informationen aus dem Abstract
, wie 'title', ausgegeben und auch Links zu zugehörigen Seiten, wie einem Konspekt oder Original, eingefügt. Diese Informationen sind entweder direkt aus dem IndexItem
des verweisenden Indexfiles oder diesem untergeordneten DocInfo
tags zu entnehmen.
Als Beispiel hierfür sei ein Exzerpt genommen, welche mit dem stylesheet 'excerpt/excerpt.xsl' übersetzt wird.
-
excerpt/excerpt.xsl, der Hauptstylesheet, der alle untergeordneten aufruft.
-
-
html/htmlhead.xsl, der Kopfbereich der HTML-Seite.
-
excerpt/excerpt.head.xsl, der Kopfbereich des Exzerptes
-
excerpt/excerpt.head.linklist.xsl, Linkbereich im Kopf
-
excerpt/excerpt.contentitems.xsl, erzeugt den eigentlichen Inhalt der
Seite selbst, z.B. den HTML-Code der tags
Cite
oder
P
.
-
html/htmlfoot.xsl, die obligatorischen Zusatzinformationen.
5. Erzeugen von ANT-buildfiles mit xsl
^
top
last update : Fri Mar 04 16:49:51 CET 2005 Heilbronn
automatically created by Linux/X86; vendor=Apache Software Foundation; version=1; http://xml.apache.org/xalan-j