xmlSlides: Erster Entwurf der XML-Sprache und erstes XSL-Stylesheet

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">&#171;</button>
        <button id="nextslidebutton" title="next slide">&#187;</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">&#189;</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.