Ich habe einen ersten Entwurf der zugrunde liegenden XML-Sprache für mein Programm "xmlSlides" entwickelt. Damit wird
noch lange nicht der volle Funktionsumfang von HTML-Präsentationen abgedeckt, jedoch lassen sich simple Präsentationen
bereits erstellen.
In meinem Programm sollen Präsentationen, genauer gesagt nur der Inhalt der Präsentation in einer XML-Datei abgelegt
werden. Diese XML-Datei beschreibt in möglichst abstrakter Form den reinen Content der Folien. Im Anschluss wird mit
Hilfe von XML Transformationen aus der XML-Datei die eigentliche XHTML-Präsentation erstellt. Diese Vorgehensweise hat
den Vorteil, dass das eigentliche Ausgabeformat nur durch das verwendete XSL-Stylesheet festgelegt wird. Es können also
auch verschiedene XLS-Stylesheets für verschiedene Ausgabeformen angeboten werden. In erster Linie sollen damit die
verschiedenen HTML-Präsentations-Technologien, wie S5,
DOMSlides oder Slideous abgedeckt werden.
Jedoch sind auch Exporte nach PDF und sogar OpenOffice-Impress und MS-Powerpoint 2007 (beide sind ebenfalls XML-Formate)
denkbar - wobei die beiden letztgenannten und insbesondere MS-Powerpoint ziemlich unwahrscheinlich sind.
Für das XML-Format habe ich ein entsprechendes XML-Schema entwickelt, wechels wie bereits erwähnt, noch unvollständig
ist.
Das XML-Dokument
Ein Beispielhaftes XML-Dokument könnte so aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xmlslides.xsl" ?>
<slides xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="xmlslides.xsd">
<head>
<title>Vortrag</title>
<author>Manuel</author>
</head>
<body>
<slide>
<headline>Folie 1</headline>
<contentBox>
<text>Hallo Welt</text>
<text>Das ist die erste Folie</text>
</contentBox>
</slide>
<slide>
<headline>Folie 2</headline>
<contentBox>
<text>Servus zur zweiten Folie</text>
</contentBox>
</slide>
</body>
</slides>
Darin gibt es einen head und einen body ähnlich wie in HTML. Im head wird der Titel und der Autor der Präsentation
definiert. Hier werde ich in Zukunft noch weitere Angaben hinzufügen.
Im Body-Bereich werden die eigentlichen Folien beschrieben. Jede Folie wird von einem <slide>
-Element umschlossen. Als
erstes kann jede Folie eine Überschrift mit dem Element <headline>
enthalten. Im Anschluss folgt der eigentliche
Inhalt der Folie in einem <contentBox>
-Element. Dieses Element soll in Zukunft ein Attribut align bekommen, welches
die Werte horizontal oder vertical annehmen kann. Damit soll bestimmt werden, ob die innerhalb der ContentBox
definierten Elemente Horizontal oder Vertikal angeordnet werden sollen.
Innerhalb der ContentBox folgen die eigentlichen Elemente zur Anzeige auf der Folie. Aktuell ist hier nur das Element
<text>
zur Anzeige von normalen Text definiert. Hier folgen in Zukunft aber noch weitere Elemente für Listen, Bilder,
Tabellen oder Code-Abschnitte.
Jedes dieser Elemente soll von dem align-Attribut der Umschließenden ContentBox beeinflusst werden. So werden entweder
alle Elemente untereinander oder Nebeneinander angezeigt.
XSL-Transformation
Wenn das XML-Dokument mit der Abstrakten Beschreibung der Folien fertig ist, muss es mit Hilfe eines XSL-Stylesheet in
die entsprechende Anzeigefähige Form gebracht werden. Aktuell benutze ich als Anzeige-Technologie Slideous mit minimalen
Erweiterungen und einem von mir erstellten Template. Später sollen aber natürlich ncoh weitere Technologien wie S5
unterstützt werden.
Das XSL-Stylesheet sieht folgender Maßen aus:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>
<xsl:value-of select="slides/head/title"/>
</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="author"><xsl:attribute name="content"><xsl:value-of select="slides/head/author"/></xsl:attribute></meta>
<meta name="date" content="19.12.2009" />
<meta name="autoincrement" content="false" />
<link rel="stylesheet" type="text/css" href="slideous/slideous.css" />
<script src="slideous/slideous.js" type="text/javascript" />
</head>
<body>
<div id="statusbar">
<span style="float:right;">
<span style="margin-right:4em;font-weight:bold;">
<span id="slideidx">
</span> of {$slidecount}</span>
<button id="prevslidebutton" title="previous slide">«</button>
<button id="nextslidebutton" title="next slide">»</button>
<button id="incfontbutton" title="content">A+</button>
<button id="decfontbutton" title="first slide">A-</button>
<select id="tocbox" size="1"><option></option></select>
</span>
<span id="eos">½</span>
<span><xsl:attribute name="title">{$location},{$date}</xsl:attribute>{$title}, {$author}</span>
</div>
<xsl:for-each select="slides/body/slide">
<div>
<h1><xsl:value-of select="headline" /></h1>
<div>
<xsl:for-each select="contentBox/text">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
</div>
</div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Als Ergebnis kommt dann folgende Präsentation heraus:
- xml-Transformation (benötigt XSLT-Fähigen Browser z.B. Firefox oder moderne IE): test.xml
- fertiges HTML-Dokument: test.html
Zum testen kann man in modernen Browsern mit XSLT-Unterstützung (IE ab version 6?, Firefox,...) das entsprechende
XML-Dokument direkt im Browser laden. Sofern das XSL-Stylesheet im selben Verzeichnis liegt, sollte als Ergebnis direkt
das transformierte XHTML-Dokument, sprich die Präsentation im Browser erscheinen. Natürlich müssen dafür auch die
Dateien (CSS, JS, Grafiken) von Slideous vorhanden sein. Alles zusammen habe ich als ZIP-Archiv hier zum Download bereit
gestellt: xmlslides_01.zip
Wie eingangs erwähnt, ist der Funktionsumfang noch äusserst rudimentär. Jedoch als prinzipielle Machbarkeitsstudie ist
es für mich der erste Schritt in die richtige Richtung. Für Kritik und Hinweise bin ich wie immer Dankbar, vor allem was
das XML-Schema und allgemein meine Vorstellung des XML-Dokuments angeht.