Für die meisten Beispiele gilt: IExplorer und Opera konnte ich bisher kaum
zur „Zusammenarbeit“ bewegen. Das betrifft insbesondere die Anzeige
mit der xml/css2-Kombination. Der xml/xsl/css-Code scheint nicht das Problem zu sein,
denn die Gecko-basierten Browser (Mozilla, Firefox, Netscape, Galeon u.a.) rendern
einigermaßen klaglos. Ebenso transformieren Mozilla 1+ (TransforMiiX), Saxon 6.5.2/3 (instant), LibXML2/xsltproc
und Expat/Sablotron (1.95.6/0.98+). Auch Msxsl/Msxml (3.40/4.20) transformieren als “stand-alone”.
MSIE6 tut es unter einigen Verrenkungen, die die Anzeige der Resultate betreffen.
Von Mozilla und Saxon heißt es, daß sie sich recht genau
an die Standards halten, und wenigstens dies versuche ich auch.
Ein besonderes Problem für einige Prozessoren (MSXSL, xsltproc, UXT) sind die in der internen DOCTYPE
Untermenge (“Internal Subset”) definierten Entitäten, die XML-Code enthalten.
Die entsprechenden Entity-Referenzen werden nicht immer vollständig aufgelöst – und dann auch
nicht transformiert. Hier kann eine XML-Kanonisierung (Canonical XML, “C14N”) durch einen
vorgeschalteten Parser (RXP, xmllint) helfen, der die Referenzen ersetzt, Default-Attribute und Attributwerte einsetzt,
und die DOCTYPE-Deklaration beseitigt.
TeXML.dtd –
XML Doctype Definition für TeXML. Mit
provisorischen “usage comments”.
Es enthält auch namespace-Importe für xhtml, xlink und xml-events.
TeXML.css –
CSS-2 Stylesheet zur direkten Anzeige im Browser,
z.B. mit „Mozilla 1+“. Häufig gebrauchte eigene
Definitionen localDEF.css als Import.
TeXML2TeX.xsl –
XSLT Stylesheet transformiert TeXML nach text/plain (La)TeX.
Getestet mit
Saxon 6.5.2/3 (instant)
Mozilla/Firefox 1.0 ff. (TransforMiiX)
Expat/Sablotron (1.95.6/0.98+)
LibXML2/LibXSLT/xsltproc (2.6.10/1.1.7)
MSXML (3.40+4.20) mit msxsl.exe [nicht MSIE]
MSXML (3.40+4.20) mit cscript.exe, Windows Script Host (WSH 5.6)
nach XML-c14n: Altova XSLT
nach XML-c14n: Unicorn XSLT (1.50)
TeXML-HTpre.xsl –
XSLT Stylesheet transformiert TeXML nach xHTML
und <pre>embedded (La)TeX-code</pre>.
Nur eine Variante von TeXML2TeX.xsl, die Syntax-Highlight ermöglicht.
TeXML.ent –
Bisher ignorieren Mozilla und Saxon(?) die externen Entitäten
(Moz. die ganze DTD, IE dagegen liest alles!). Sie
müssen in jeder Datei im DOCTYPE nochmals deklariert sein.
Entitäten sind aber ungemein praktisch, denn sie können Zeichen und Code enthalten.
Deshalb lohnt vorerst auch schon eine reine „Aufbewahrungs-Datei“.
ENTITAGS
Ein anderer Ansatz: Entitäten als (leere) Element-Tags mit eigenem Namensraum.
entitags.xml – ohne Stil und DTD;
wird von *.xsl als Transformations-Datenbank verwendet. Bei Updates sollten die Attribut-Werte unbedingt „gleichwertig“ zu den Werten in entitags.mod bleiben.
entitags.mod – DTD-Modul, das von TeXML.dtd importiert wird.
Streng gesehen überflüssig, da der ganze Aufwand nur gemacht ist für Browser, die die DTD eben nicht lesen.
Aber eine Transformation ist natürlich schneller, wenn die schon vom Parser gelesenen und vorbelegten Attributwerte benutzt werden.
entitags.css – wird von TeXML.css importiert und zur Anzeige benötigt.
entitagX.xml – transformiert „sich selbst“
zu einem JavaScript-Array (für TeXML.js) und einem CSS2-Stylesheet (z.B. entitags.css).
Entweder den entsprechenden Teil aus dem Browser-Fenster herauskopieren, oder je nach Stand-Alone-Prozessor den Parameter NN='JS' oder NN='CSS' setzen.
entitagX-HTpre.xml – ebenso, aber IE5/6+MSXML3
brauchen eben (zu) oft eine Sonderbehandlung, damit es auch da funktioniert.
Letztlich bringt der Ansatz aber den nützlichen Nebeneffekt, daß diese „Zeichenkodierung“ vom Parser durchgereicht wird
und später – im Stylesheet – beliebig verarbeitet werden kann.
TeXML.js –
Einige DOM/JavaScript Funktionen für den Zugriff auf
XML-Dokumente. Teilweise nur experimentell.
xhtml:onload/onunload Event-Handler für das <TeXML>-Element.
einen simplen “Document-Object-Viewer” als Hilfe und Kontrolle für Node-Manipulationen.
TeXML2TeX() ein halbwegs vollständiger JavaScript-Transformator: TeXML nach text/plain LaTeX ohne XSLT.
Auswertung einer URL-Query ?ss=file.css, um eine <?xml-stylesheet?> PI zu erzeugen. (s.u.)
makeTOC() erzeugt automatisch ein Inhaltsverzeichnis, falls irgendwo im Dokument die Attribute id="toc" und im Root-Element xhtml:onload="iniTeXML();" gesetzt sind.
Während TeXML.js dazu gedacht ist, in einer TeXML-Datei geladen zu werden – und damit nebenbei in jeder Datei einen Selbst-Transformator zur Verfügung stellen kann –
ist der folgende Script-Auszug auch für xHTML-Dateien und Browser, die XML nicht anzeigen und zugleich Script-fähig machen können.
TeXML2TeX.js & TeXML2TeX.wsf –
der JavaScript-Transformator aus TeXML.js in einer Version, die mit Mozilla und IExplorer (6+) funktioniert und gleichwertige Ergebnisse produziert.
Dazu noch ein Kommandozeilen-Wrapper zum Gebrauch mit dem “Windows Script Host 5.6”.
Für IE6+/WSH56 mußten natürlich einige fehlende DOM2-XML-Interfaces simuliert werden. Anwendung s.u.
Als Nebenprodukt von vielleicht allgemeinerem Interesse ein WSH/JScript/MSXML-Interface zum XML-Parser
und XSLT-Prozessor.
TeXML.xml –
Die „gute Absicht“ eines TeXML-Manuals in TeXML/XML,
das bisher aber nur einigen Blindtext zur Demonstration enthält. Es
importiert TeXML.css und benötigt zur Anzeige einen
CSS-2 fähigen Browser; z.B. Mozilla. Mit
“view page source” o.dgl. überzeuge man sich, ob es
sich um TeXML handelt.
TeXML-texmlxsl.xml –
Gleiches Testfile (gleicher TeXML-Code), das stattdessen
TeXML2TeX.xsl importiert und den TeX-Code als
text/plain im Browser zeigt. Mit “select all |
copy” kann man diesen über das Clipboard in einen beliebigen
Editor übernehmen. Mit “view page source”
überzeuge man sich, ob es sich um TeXML handelt.
[FIXED: Transformation
problemlos von file://localhost/...,
aber nicht vom http://...-Server ???
Mit .htaccess den Mime-Type setzen.]
TeXML-nostyles.xml –
ohne jedes Stylesheet, das mit Explorer über das Standard-Stylesheet (IE: defaultss.xsl)
ebenfalls in einen Node-Tree transformiert werden sollte. Ok mit IE6 bzw. msxml3-Parser, aber
IE5 hat ein Problem mit den parametrisierten namespaces der DTD.
TeXML-nostyles.xml?ss=TeXML.css –
erzeugt mittels DOM/JavaScript eine <?xml-stylesheet?> processing-instruction.
Sinn machen eigentlich nur darstellende (nicht transformierende) Stylesheets.
Dafür kann ein Stylesheet eigener Wahl zu eigenen Zwecken in der Adresszeile gesetzt
werden, ohne das Quellfile verändern zu müssen.
Zur besseren Anschaulichkeit „vor-transformierte“ oder exportierte Exemplare:
TeXML-xhtmlpre.html –
mit TeXML-HTpre.xsl, das den TeX-Code in xhtml/pre einbettet.
TeXML-treeview.html –
mit treeview.xsl (Autor: Dave Lindquist), das einen Node-Tree wie vom IE gewohnt erzeugt.
Da Saxon die DTD liest, sind im Gegensatz zu einer Mozilla-Transformation die Fix- und Defaultwerte integriert.
Umgekehrt hat ein Stylesheet keinen Zugriff auf die DOCTYPE-Deklaration bzw. deren interne Untermenge.
Es bekommt vom vorgeschalteten XML-Parser also z.B. die Entity-Werte, nicht die Entities selbst).
Deshalb ist auch dieser Knotenbaum kein vollständiges Abbild der Quell-Datei.
TeXML-codeview.html –
mit SciTE (“Scintilla Text Editor”) zu HTML
exportierter TeXML-Quell-Code, das Folding und Syntax-Highlight bewahrt.
Diesmal ein vollständiges, nicht unbedingt aktuelles, Abbild der Quell-Datei.
Transformation lokaler Files
Praktische Versuche, erste Beispiele.
Da ich meine lokalen TeX-Fonts&Styles nicht im Netz stehen habe, sind die xml-Files für sich nicht ausreichend, um die entsprechenden pdf-Files zu erzeugen.
Auch eine Online-Transformation nach TeX ohne JavaScript (!) ist noch nicht möglich, da alternative Stylesheets nicht hinreichend funktionieren und ich die Dateien nicht – wie oben – fast identisch doppelten Platz belegen lassen will.
Nippon (Philipp Franz v. Siebold (1796–1866), ²1897) [SieboldNippon.pdf, ca. 933 KB, A5, 285 Seiten]
xslt.html [xslt.js] – eine „XSLTransfactory“
ab Mozilla 1.2.1+ und IE6+MSXML3: Experimente mit DOM/JavaScript- und XSLTransformationen.
Dafür eine eigenständige Primitiv-Seite, der die zu transformierenden Dateien als URL-Query übergeben werden, wie folgend schon vorbereitet.
Die Transformation muß nach Abschluß des Ladevorgangs noch eigens aktiviert werden.
Allgemeines JavaScript-Interface zur XSLT-Engine für beliebige XML/XSL-Transformationen
Einige Referenzen … IBM’s alphaWorks TeXML+Java/TeXMLatté “has been retired” (V1R4; Oct 29, 1999)
Douglas Lovell’s TeXML: Typesetting XML with TeX (TUG-Artikel, ca. 177 KB, PDF)
Oleg Paraschenko: GetFO’s TeXML+Python