prev-arrow 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

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
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)*1
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. 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)*1
" Der Inhalt des Zitates " (popo)*2
" Der Inhalt des Zitates " (nudel)*3
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.

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".


1 First Name 'Der Titel des Werkes', Band 2, 2.Aufl., Zumbelstadt, 1840, S.5f; [nudel]
2 First Name 'Der Titel des zweiten Werkes', o.O., o.J. ; [popo]
3 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.
  1. 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.
  2. 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. *255
<Footnote>.
Und nun eine mit automatischer Nummerierung*1_ .
Hier habe wir einen Text mit einem einfachen Fußnotentag als Referenz. <Footnote class="ref" number="88" />*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.

*255
<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.*256

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:


*1
Dies ist der eigentliche Inhalt der Fußnote 1 eines Zitates im entsprechenden Abschnitt dieses Dokumentes.
*256
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 &gt; 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: &amp; 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.
Hier nun nocheinmal den Link zu unserer NAMEXML-Form.
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.
*1_
Der Inhalt der internen Nummerierung
*255
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: 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

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 Navigationsbeschreibung 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 propertys, 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 targets 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.
  1. Erzeugen eines neuen Indexfiles inklusive aller externen Informationen, wie z.B. IndexGroupRef oder Exzerptfileinformationen Abstract (exzerpt.index2index.xsl),
  2. daraus wird die repräsentierende HTML-Seite des Indexfiles erzeugt (exzerpt.index.xsl) und ebenso
  3. das buildfile zum Erstellen aller untergeordneten Seiten (exzerpt.index2build.xsl).
  4. Schließlich wird die Übersetzung dieses neuen buildfiles angestoßen.
Die Baumstruktur eines Indexfiles wäre ungefähr wie folgt:
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

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, ...

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.
AttributwertInterpretation
conspectDie beschriebene Datei wird als Konspekt interprtiert, ist meist ein inneres Dokument, es wird prozessiert und bei der Verlinkung mit dem Exzerpt berücksichtigt.
structureEs handelt sich um ein Strukturfile, es gilt das gleiche, wie für den Konspekt.
criticismDieses file wird als Kritik zum Hauptdokument verlinkt.
labeldies kennzeichnet ein Bild, welches dem Verweis auf das Hauptfile vorangestellt wird
thumbExistiert nur mit einem label und wird anstatt dieses angezeigt, wenn das label selbst zu umfangreich ist.
packageDieses File beinhaltet Zusatzinformationen und wird z.B. im Exzerptfile als 'Info' im Kopfbereicht verlinkt.
sonstigesWird 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.
AttributwertInterpretation
buildDas durch 'src' gekennzeichnete file wird mittels 'stylesheet' nach 'dest' übersetzt, z.B. Exzerpte.
copyDas file wird einfach kopiert und umbenannt. Dies wird meist bei Originalfiles oder Präsentationen der Fall sein.
dircopyIn 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.
dirpackDer Ordnerinhalt von 'dest' wird als zip-file nach 'src' gepackt. Meist findet dies bei Zusatzinformationen Anwengung.
nobuildHat 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:
AttributwertInterpretation
normalIst der default Wert und macht nichts besonderes.
actualBedeutet, 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.
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.

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.

4.6.3. css

Bisher gibt es nur einen css erzeugenden stylesheet:

4.6.4. index

Dieser Unterordner enthält sowohl Prozessierungs als auch Ansichtsstyles für Indexfiles.

4.6.5. excerpt

Dieser Unterordner enthält sowohl Prozessierungsstyles für Exzerpte.

4.6.6. Nicht-Indexseiten oder reine Datenseiten

Bei den Nicht-Indexseiten gibt es solche, 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.
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.

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