HTML rekonfigurieren
Christoph Schnauß
- xml-derivat
morgens ;-)
Ich hab nen etwas abseitiges Problem: verschiedene Tutorials, wie zum Beispiel das PHP-Handbuch (http://www.php-center.de/de-html-manual/) werden mit Hilfe von DocBook XML DTD (siehe http://www.oasis-open.org/docbook/xml/) generiert/formatiert. Wenn ich mir dann in einem Editor den HTML-Quelltext anschaue, kriege ich sowas zu sehen:
<HTML
<HEAD
<TITLE
Wie wir die Formate generieren</TITLE
<META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.73
"><LINK
REL="HOME"
TITLE="PHP Handbuch"
HREF="index.html"><LINK
REL="UP"
TITLE="Über das Handbuch"
HREF="about.html"><LINK
REL="PREVIOUS"
igitt. Das mag zwar eben "xml-generiert" sein, aber die "reine Lehre" von validem HTML, wie wir sie hier gemeinhin verfechten, kommt da doch mehr als zu kurz.
Ich lade mir nun gelegentlich ein paar solcher Seiten (die Angewohnheit, diese Methode zu verwenden, ist ziemlich verbreitet) herunter, weil ich sie eben gerne auch offline haben möchte. Das können auch schonmal ein paar Dutzend im Bündel werden.
Jetzt will ich natürlich, daß auf meinem Rechner das oben angeführte Ausschnitt-Beispiel in der Form
<html>
<head>
<title>Wie wir die Formate generieren</title>
<meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.73">
<link rel="home" title="PHP Handbuch" href="index.html">
<link rel="up" title="Über das Handbuch" href="about.html">
<link rel="previous"
abgelegt wird - also ohne die zahlreichen Zeilenumbrüche und konsequent mit Kleinschreibung - und in bezug auf zahlreiche "überflüssige" tags auch bei fast allen diesen Seiten nahezu um die Hälfte kleiner. Fast immer sind da auch eine Vielzahl von DIV's und SPAM's drin, die ich offline alle rausstreichen möchte, andrerseits möchte ich meine individuelle CSS reinstecken.
Bei einer einzelnen heruntergeladenen Datei krieg ich das ja auch noch hin, aber wenn es sich (wie beim PHP-Handbuch und anderen online-Dokumentationen) um ein Paket mit mehreren tausend teilweise sehr umfangreichen Seiten handelt, ist das in "Handarbeit" schlicht unsinnig. Ich will aber beispielsweise eine eigene CSS einbinden und ähnliche Kleinigkeiten, und ich will das wirklich nur offline zur Verfügung haben und nicht "nach Korrektur" online wieder Anderen zur Verfügung stelöen.
Zwar habe ich Programme, di auf einen Rutsch bei mehereren hundert HTML-Dateien etwas ändern können (Textpad kann das, Ulli Meybohms Phase5 auch), aber immer nur in einzelnen Schritten, und leider gehört der Zeilöenumbruch in solchen "generierten" HTML-Dokumenten nicht dazu. Klar, wozu werden die Dinger denn auch generiert, jeder Browser zeigt sie ja ordentlich an ...
Kriege ich solche Seiten nun mit irgendeiner XML-Syntax wieder "zurückverwandelt" in ganz einfaches HTML ?
Grüße aus Berlin
Christoph S.
Hi Christoph,
ich kenne zu Deinem Problem kein Tool oder irgendeine vorgefertigte Loesung. Meine Idee waere, ein Makro zu schreiben fuer Deinen bevorzugten Editor. Ich benutze Ultraedit, aber ich bin sicher, dass eine ganze Anzahl anderer Editoren das auch koennen.
Die meisten HTML Editoren koennen schon Hause aus den Text formatieren, Tags kleinschreiben usw., sodass Dein Makro mit wenig Aufwand zu realisieren waere. Beispiele waeren Dreamweaver oder Homesite, HTML Kit von www.chami.com, sowie Proton und Phase 5 von www.meybohm.de. Die drei letzgenannten sind hochkaraetige Freeware, alle andern stehen als Testversionen zu Verfuegung.
Auch TidyGUI von http://perso.wanadoo.fr/ablavier/TidyGUI waere zumindest fuer einen Teil der Aufgabe gut geeignet.
Jetzt erstmal gute Nacht
Dieter
Hallo Christoph,
werden mit Hilfe von DocBook XML DTD (siehe http://www.oasis-open.org/docbook/xml/) generiert/formatiert.
Formatiert wird mit DSSSL, DocBook ist "nur" eine DTD.
Kriege ich solche Seiten nun mit irgendeiner XML-Syntax wieder "zurückverwandelt" in ganz einfaches HTML ?
Das kommt darauf an, ob diese Datein XML-Mäßg durchgehen: well-formed sind.
Dann kanst ja ein XSL-Schreiben, und die Dateien dann (wieder) transformieren.
Sonst irgendeinen Editro suchen in dem Du Makrso erstellen und Ablaufen lassen kannst (wie im XMetal oder XMLSpy) oder Sripte (wie im Homesite). (Wie es mit anderen Editroren bestellt ist weiss ich nicht.
Unter Umständen könntest du dir auch Tidy auch so konfigureren, dass er dir deine Wünsche erfüllt.
Grüße
Thomas
hallo Thomas,
Kriege ich solche Seiten nun mit irgendeiner XML-Syntax wieder "zurückverwandelt" in ganz einfaches HTML ?
Das kommt darauf an, ob diese Datein XML-Mäßg durchgehen: well-formed sind.
müßten sie eigentlich, da sie ja "generiert" sind
Dann kanst ja ein XSL-Schreiben, und die Dateien dann (wieder) transformieren.
Eben, das dachte ich mir *g*. Aber dafür fehlt mir der methodische Ansatz. Andersherum krieg ich es hin, also neue Dateien erzeugen kann ich, aber bestehende transformieren kriege ich nicht hin.
Grüße aus Berlin
Christoph S.
Hallo Christoph,
Kriege ich solche Seiten nun mit irgendeiner XML-Syntax wieder "zurückverwandelt" in ganz einfaches HTML ?
Das kommt darauf an, ob diese Datein XML-Mäßg durchgehen: well-formed sind.
müßten sie eigentlich, da sie ja "generiert" sind
Nicht unbedingt: die Dateien könnten z.B: <br> enthalten und <img> oder <meta> etc. (ohne />) oder die Attributwerte stehen nicht zwischen " ". Sprich wenn die Dateien keine XHTML sind, ist dieser Weg verschlossen, was so wie ich jetzt ausprobierte der Fall ist.
Also wie weiter?
Ich habe das zwar jetzt nur mit einer Datei gemacht: in Homesite gibt es Tidy includiert, aber ich habe das selbe mit TidyGUI auch versucht: das Ergebniss ist eine XML-Datei. Ich habe nicht allzu viel dazu konfigurieren müssen, allerdings die XML-Deklaration musste ich selber mit dem encoding ergänzen (<?xml version="1.0" encoding="ISO-8859-1" ?>) sonst, wäre die Datei ungülitg (wegen ü,ä etc.)
Das ganze kann man auch mit mehreren Dateien auf einmal machen: also am Ende würdest du eine Menge an XML-Datein haben (ich versuche so eine XML-Datein unten mitzuposten)
Dann kanst ja ein XSL-Schreiben, und die Dateien dann (wieder) transformieren.
Eben, das dachte ich mir *g*. Aber dafür fehlt mir der methodische Ansatz. Andersherum krieg ich es hin, also neue Dateien erzeugen kann ich, aber bestehende transformieren kriege ich nicht hin.
Wenn du mal XML hast ist es weniger kopmliziert. Die Dateien sind ja vom Struktur her alle identisch, du kannst dann je nach Bedarf Templates für Elemente (mit oder ohne bestimmte Attribute oder mit oder ohne bestimmten Inhalt, mit oder ohne bestimmten Vorgänger, Nachfolger, Eltern, Kinder usw. usf.) etc. definieren und dann die Dateien z.B. mit Saxon im batch-Modus Transformieren.
Grüße
Thomas
--------------
OK: die Datei habe ich jetzt hochladen müssen:
http://www.meta-text.net/test/ref_xml.xml
hi,
Ich habe [...] das selbe mit TidyGUI auch versucht: das Ergebniss ist eine XML-Datei. Ich habe nicht allzu viel dazu konfigurieren müssen, allerdings die XML-Deklaration musste ich selber mit dem encoding ergänzen (<?xml version="1.0" encoding="ISO-8859-1" ?>)
Ich habe mir TidyGUI erst nochmal besorgen müssen - HomeSite habe ich derzeit nicht installiert, mag es auch nicht
Wenn du mal XML hast ist es weniger kopmliziert. Die Dateien sind ja vom Struktur her alle identisch, du kannst dann je nach Bedarf Templates [...] definieren und dann die Dateien z.B. mit Saxon im batch-Modus Transformieren.
Ich bin gerade noch dabei, mir die DocBook-Sachen genauer anzuschauen. Es muß ja einen Grund haben, weshalb von so vielen Dokumentationen auf diese Ausgabemethode zurückgegriffen wird und dann eben solche HTML-Seiten entstehen. Das PHP-Handbuch ist nur eines von vielen Beispielen
OK: die Datei habe ich jetzt hochladen müssen:
http://www.meta-text.net/test/ref_xml.xml
Danke. Habs mir mal runtergezogen. Das ist ein überzeugendes Ergebnis als Beispiel
Grüße aus Berlin
Christoph S.
Hallo,
Ich bin gerade noch dabei, mir die DocBook-Sachen genauer anzuschauen. Es muß ja einen Grund haben, weshalb von so vielen Dokumentationen auf diese Ausgabemethode zurückgegriffen wird und dann eben solche HTML-Seiten entstehen. Das PHP-Handbuch ist nur eines von vielen Beispielen
Der erste und vielleicht wichtigeste Grund ist, das DocBook eben eine quasi Standardisierte DTD ist. Und sie ist besonders gut für Bücher über Soft und Hardware geignet (aber keines wegs nur dafür)
Sie ist sehr flexibel und mit ihren Modulen dekt sie sämtliche -sagen wir mal so - Anfoderungen ab. Und, sie ist frei verfügbar. Es gibt jede Menge freie Software (neben der kommerziellen)(http://sources.redhat.com/docbook-tools/ die docBook unterstützen.
Grüße
Thomas
OK: die Datei habe ich jetzt hochladen müssen:
http://www.meta-text.net/test/ref_xml.xml
Danke. Habs mir mal runtergezogen. Das ist ein überzeugendes Ergebnis als BeispielGrüße aus Berlin
Christoph S.
Hi
Kriege ich solche Seiten nun mit irgendeiner XML-Syntax wieder "zurückverwandelt" in ganz einfaches HTML ?
Ich wüsste keine Lösung mit was XML mäßigem, aber sowas dürfte mit Perl/PhP/beliebe regex fähige Sprache doch recht gut machbar sein. Allerdings ist das mit dem überflüssigen Tags entfernen (so gut wie) unmöglich. Ich hab mal kurz folgendes auprobiert, funktioniert auch ganz gut:
##wäre jetzt wie erkennbar in Perl####
$text = 'irgendein irgenwie eingelesener Text';
$text =~ s/(\r)?\n>/>\n/g;#alle > in einer neuen Zeile nach oben schieben
$qwer = 0;
while ($qwer < 30)#hab keine Ahnung warum das noetig ist, ich bin auch zu muede um "wirklich" nachzudenken, auf jedenfall werden Tags in mehreren Linien sonst nur zum Teil (Die erste neue Linie) wieder in ein Linie gebracht
{
$text =~ s/(<[^>]*)\r?\n/$1 /g; #Tags in mehreren Linien in eine Linie bringen
$qwer++;
}
$text =~ s/></>\n\r</g;#hintereinnanderfolgende Tags in mehrere Zelien bringen
$text =~ s/(<.*>)/lc($1)/eg;# Tags kleinschreiben
print $text;#beliebeige Ausgabeform
Das ist jetzt nur sehr schnell mal getippt, und nicht sonderlich verständlich, aber funktioniert ganz gut. Allerdings wird im Moment der ganze Inhalt von Tags kleingeschrieben, was unpraktisch sein kann. Ausserdem müsste man dem Script noch beibringen dass es alle Dateien eines Verzeichnisses so korigiert werden, was aber IMHO nicht schwer ist.
Die beste Lösung wäre allerdings natürlich ein neues XSLT Script/Programm/wasauchimmer, wie heißt das jetzt korrekt? Ich denke allerdings das sowas nicht gerade vorhast ;-).
mfg Andres Freund
guten Morgen,
$text = 'irgendein irgenwie eingelesener Text';
$text =~ s/(\r)?\n>/>\n/g;#alle > in einer neuen Zeile nach oben schieben
$qwer = 0;
while ($qwer < 30)#hab keine Ahnung warum das noetig ist, ich bin auch zu muede um "wirklich" nachzudenken, auf jedenfall werden Tags in mehreren Linien sonst nur zum Teil (Die erste neue Linie) wieder in ein Linie gebracht
{
$text =~ s/(<[^>]*)\r?\n/$1 /g; #Tags in mehreren Linien in eine Linie bringen
$qwer++;
}
$text =~ s/></>\n\r</g;#hintereinnanderfolgende Tags in mehrere Zelien bringen
$text =~ s/(<.*>)/lc($1)/eg;# Tags kleinschreiben
print $text;#beliebeige Ausgabeform
Das ist jetzt nur sehr schnell mal getippt, und nicht sonderlich verständlich
Doch, ist ganz gut verständlich. Hat jedenfalls methodisch durchaus Sinn, danke.
Ich werds mir heut mal anschauen uns umzusetzen versuchen.
Die beste Lösung wäre allerdings natürlich ein neues XSLT Script/Programm/wasauchimmer, wie heißt das jetzt korrekt? Ich denke allerdings das sowas nicht gerade vorhast ;-).
Naja, wenn mir sonst nix andres übrigbleiben würde ... Ich habe bloß mit XML bisher nicht so sehr viel Erfahrungen. HTML mit Hilfe von XML zu generieren, kriege ich hin, aber HTML mit Hilfe von XML bzw. XSLT "umzuwandeln" habe ich bisher nicht versucht. Aber man kann ja auch eine Kombination von XML und PERL probieren
Grüße aus Berlin
Christoph S.