MathML - Wie kriege ich mathematische Formeln ins Internet?

Nun wird man nicht gleich Dissertationen, Diplomarbeiten oder sonstige mathematische Arbeiten im Html-Format schreiben wollen, dafür ist immer noch TeX als "lingua franca" erste Wahl - doch es soll schon Fälle gegeben haben, wo man trotz des Hawkingschen Halbierungsgesetzes die eine oder andere Formel auf einer Internetseite entdecken konnte. Populärwissenschaftliche Texte, wissenschaftliche Lexika, Mathematiker-Biographien - der Leser kann sich viele Situationen vorstellen, in denen die Verbindung von mathematischen Formeln mit der Interaktivität von Html-Seiten sinnvoll ist.

Wie kommen nun die Formeln auf die Html-Seiten? Oft auf abenteuerlichem Weg, denn Html sieht keine Elemente zur Beschreibung von Formeln vor. So werden Formeln als Grafiken abgespeichert und eingebunden, mit komplizierten Tabellenstrukturen und Symbolschriften nachgebaut, und jede dieser Methoden ist gleichermaßen aufwendig wie ineffektiv. Die Lösung dieses Problems bietet Xhtml in Verbindung mit MathML. Xhtml ist eine Xml-Sprache und unterscheidet sich nur geringfügig von Html (es ist weniger eine neue Sprachversion von Html als vielmehr Html in einem veränderten Axiomensystem), bietet aber unter anderem die Möglichkeit andere Xml-Sprachen wie MathML einzubinden.

MathML ist eine ebenfalls auf Xml basierende Markup-Sprache zur Notation von mathematischen Formeln, d.h. ähnlich wie in Html werden die verschiedenen Elemente einer Formel mit sogenannten Tags gekennzeichnet. Eine Formel kann dabei in zwei unterschiedlichen Modi notiert werden.

Im Präsentationsmodus wird die Darstellung einer Formel festgelegt: eine Formel besteht lediglich aus einer Folge von Symbolen, die in einem zweidimensionalen Schema angeordnet sind. Symbole können neben-, unter-, übereinander positioniert, höher- oder tiefergestellt werden und sich (wie im Fall von Wurzeln) untergeordnete Symbole umfassen. So wird xi einfach als x mit einem höhergestellten i notiert, unabhängig davon, ob es sich um die i-te Potenz von x oder um ein x mit hochgestelltem Index i handelt.

<msup>
 <mi>x</mi>
 <mi>i</mi>
</msup>

Im semantischen Modus wird die Bedeutung einer Formel notiert, xi wird also je nach Bedeutung unterschiedlich notiert. Für die Einbindung in Xhtml ist der Präsentationsmodus zwar ausreichend, die im semantischen Modus notierten Formeln können jedoch auch von Computeralgebra-Programmen (wie Mathematica) interpretiert und gegebenenfalls ausgewertet werden.

<apply>>
 <power/>
   <ci type="real">x</ci>
   <ci type="integer">i</ci>
</apply>

<ci>
  <msup>
    <mi>x</mi>
    <mi>i</mi>
  </msup>
</ci>

Da über die Darstellung der im semantischen Modus notierten Formeln die jeweiligen Programme bzw. Browser entscheiden, gibt es noch den gemischten Modus, in dem sowohl ihre Bedeutung, als auch die genaue Darstellung angegeben werden, was sich vor allem bei Verwendung von eigen(willig)er Notation als sinnvoll erweist.

MathML bietet sich also als offener Standard zur Speicherung von mathematischen Formeln an und ermöglicht den Datenaustausch zwischen verschiedenen Programmen. (Und weil die Daten zudem als reiner Text gespeichert werden, kann der Inhalt einer Datei notfalls auch ohne MathML-fähiger Software "von Hand" interpretiert werden.)

Bunt ist alle Theorie, noch blaß der Praxis dürrer Zweig. Während die gängigen Browser wie Opera, Netscape und Internet Explorer in den neueren Versionen Xhtml ohne Probleme interpretieren, ist die Unterstützung von MathML noch kaum vorhanden. Opera kann mit MathML noch überhaupt nichts anfangen (aber das sei diesem sonst hervorragenden Browser verziehen), der Internet Explorer unterstützt zum Teil den Präsentationsmodus. Lediglich Mozilla ab Version 1.0 und damit auch Netscape ab Version 7.0 unterstützen die Einbindung von MathML in Xhtml umfassend. Doch erst wenn alle gängigen Browser MathML interpretieren, wird man auf die unterschiedlichen Tricks zugunsten der Darstellung mit MathML verzichten können.

Auch Mathematik-Software (wie Maple oder Mathematica) unterstützt zunehmend MathML, zudem gibt es frei verfügbare Programme, die zum Beispiel die Formeledierung unterstützen (und einem, wie schon die Beispiele vermuten lassen, einiges an Tipparbeit abnehmen) oder Daten ins TeX-Format konvertieren.

Bevor ich näher auf die in der Überschrift aufgeworfene Frage eingehe und das Einfügen von Formeln in Xhtml beschreibe, muß ich auch kurz auf die Beschränkungen von MathML eingehen. Komplizierte Formel von Hand zu erstellen ist mit aufwendiger Tipparbeit verbunden, umso bedauerlicher wirkt sich da das Fehlen von Makros in MathML aus. Nicht vorgesehen sind auch eigene Konstrukte für Diagramme. Eine Erweiterung bzw. Modularisierung des Sprachumfanges ähnlich wie bei TeX ist zwar prinzipiell möglich, da aber im Gegensatz zu TeX, wo der Benutzer meistens eine vorkompilierte Datei (sei es Dvi oder Pdf) erhält, MathML immer als Quelltext geliefert wird, machen Erweiterungen erst dann Sinn, wenn sie von den gängigen Programmen auch interpretiert werden können.

Beim gelegentlichen Gebrauch von Formeln innerhalb von Internetseiten sind diese Beschränkungen jedoch kaum relevant. Hier überwiegt der Vorteil der leichten Einbindung. Überall wo in Xhtml normaler Text stehen kann, ist es möglich, auch Formeln einzufügen (also auch in Überschriften, Tabellen, Verweisen etc.). Hierzu muß lediglich der Code für die Formel innerhalb des <math> -Tags stehen:

<h1>
 Überschrift, die das Integral
 <math xmlns="http://www.w3.org/
1998/Math/MathML">
  <mrow>
   <msubsup>
    <mo> &int; </mo>
    <mn> 0 </mn>
    <mn> 1 </mn>
   </msubsup>
   <mrow>
    <msqrt><mi> x </mi></msqrt>
    <mo> &InvisibleTimes; </mo>
    <mrow>
     <mo> &DifferentialD; </mo>
     <mi> x </mi>
    </mrow>
   </mrow>
  </mrow>
 </math>
 enthält
</h1>

Überschrift mit einer in MathML gesetzten Formel

Wichtig ist, daß das <math>-Tag das Attribut xmlns="http://www.w3.org/ 1998/Math/MathML" enthält. Es handelt sich dabei nicht um einen Verweis auf eine Internetseite, sondern legt einen neuen sogenannten Namensraum fest: alle innerhalb von <math></math> notierten Elemente werden als MathML- und nicht als Xhtml-Sprachelemente interpretiert.

Um Zugriff auf die benannten Symbole (&int; &DifferentialD;) zu erhalten, muß auch die entsprechende Dtd-Datei (Dokumenttypdeklarationen) eingebunden werden; eine Stylesheet-Datei steuert die Ausgabe im semantischen Modus - und schon steht der vernünftigen Darstellung zumindest mit Mozilla 1.0 nichts mehr im Weg.

Eine genauere Beschreibung der Sprachelemente von MathML führt hier zu weit. Alles Wissenswerte findet man auf den entsprechenden Seiten des WWW-Konsortiums. Einen hervorragenden Einstieg in Html, Xhtml und Xml bietet übrigens die Online-Dokumentation SelfHTML.

Ein Beispiel

Dieses sinnfreie Beispiel demonstriert die Integration von MathML in Xhtml. Das Bild zeigt die Darstellung der Datei in Mozilla 1.0 (mit vergrößerter Schrift).

MathML-Beispiel in Mozilla

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html
 PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
 "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>MathML Beispiel</title>
</head>

<body>
<h1>
 Ein Beispiel
</h1>
<p>Ein wenig Text mit einer kleinen Grafik:</p>
<div><img src="logo.png" /></div>
<p>Und ein
<a href="http://www.fcb.de">Link</a>
sollte auch nicht fehlen, denn jetzt kommt der Clou:

 <math xmlns="http://www.w3.org/1998/Math/MathML">
  <mrow>
   <msubsup>
    <mo>&int;</mo>
    <mn>0</mn>
    <mn>1</mn>
   </msubsup>
   <mrow>
    <mo>&weierp;</mo>
    <mo>&ApplyFunction;</mo>
    <mrow>
     <mo>(</mo>
     <mi>x</mi>
     <mo>)</mo>
    </mrow>
    <mo>&InvisibleTimes;</mo>
    <mo>&DifferentialD;</mo>
    <mi>x</mi>
   </mrow>
  </mrow>
 </math>

 eine Formel mitten im Text,
 als hätte sie schon immer dazugehört.
</p>

<p>Weil's so schön war,
 notieren wir auch die Bedeutung der Formel:

 <math xmlns="http://www.w3.org/1998/Math/MathML">
  <apply>
   <int/>
    <bvar><ci>x</ci></bvar>
    <interval><cn>0</cn><cn>1</cn></interval>
    <apply>
     <co>&weierp;</co>
     <ci>x</ci>
    </apply>
  </apply>
 </math>

</p>
</body>
</html>

Veröffentlicht in:

HängeMathe Nr. 20

Juli 2002

Entstehungsdatum

Mai 2002

Naheliegende Abschweifungen

Der Hersteller empfiehlt