hallo Forum ;-)
Ich experimentiere grade ein bißchen mit SSI herum und muß dazu wohl doch die eine oder andre Nachfrage stellen. In SELFHTML gibts eine sehr kurz gefaßte Erläuterung dazu, aber die Übersicht ist leider nicht nur kurz, sondern auch unvollständig.
Erst einmal: ich habe zum Durchtesten mit WinXP meinen lokalen Apache 2.0.44 benutzt - selbstverständlich "kann" der SSI. Um es mir online anzuschauen, benutze ich einen Provider, der den IIS 5 einsetzt - auch da sind SSI zulässig. Die Dokumentation, die ich am häufigsten konsultiert habe, ist natürlich die Apache-Dokumentation, für den IIS habe ich noch nix gefunden, auch in der MSDN nicht (hallo Bio ;-)), möglicherweise hab ich in der MSDN aber auch nicht alles durchsucht. Daher weiß ich nicht genau, was der IIS _prinzipiell_ bereitstellt. Google liefert mir schlicht zuviele Adressen, um alles tatsächlich durchstöbern zu können ... Hat jemand irgendwo eine möglichst tabellarisch aufgearbeitete Gegenüberstellung, welche "Befehle" für SSI im Apache und im IIS eingesetzt werden können (ungefähr in der Art, wie es in http://selfhtml.teamone.de/cgiperl/intro/ssi.htm#uebersicht zu finden ist)?
So, und jetzt drei Nachfragen:
erstens:
Ich habe eine Test-Konstruktion, bei der in einem (X)HTML-file (das selbstverständlich *.shtml heißt) links einen schmalen Layer (DIV) mit der Navigation liegt, und rechts aus einer längeren Liste mit exakt gleich CSS-positionierten DIVS jeweils einer sichtbar gemacht wird. Das funktioniert ganz gut, ist ja auch nur 'ne "Fingerübung". Jetzt bestehen meine unsichtbaren/sichtbaren DIV's aber im Prinzip nur aus sowas:
<div id="name">
<!--#include file="datei.htm" -->
</div>
Und da gehts dann los. Mein Apache weigert sich, ein HTML-Dokument einzubinden, obwohl ich exakt so verfahren bin, wie in der Apache-Dokumentation beschrieben. Nenne ich das file aber statt "datei.htm" mal probeweise "datei.txt", macht er es. Der IIS meines Providers erklärt sich solidarisch und verfährt ebenso. Hat jemand eine Erklärung dafür? Ich kann und will meine HTML-Dokumente natürlich nicht mit einer "falschen" Extension versehen, weil sie auch einzeln, also als eigenständige Dokumente, aufrufbar bleiben sollen ...
Und dann: Meine HTML-Dokumente haben alle eine DOCTYPE-Angabe, zwei meta-tags, einen Header-Bereich usw. Das heißt, ich habe unter Umständen mehrere Dutzend (immer dieselben) DOCTYPE-Angaben, die bereits auf dem Server in einer "großen" Datei zusammengeklebt werden und auch so beim Browser ankommen, ebenso habe ich mehrere dutzendmal
<html>
<head>
...
</head>
<body>
...
</body>
</html>
mozilla und Internet Explorer machen das zwar mit, und zeigen es mir bei rechtem Mausklick auch brav als Quelltext an (Opera hab ich im Moment nicht installiert), aber schön ist das halt nicht, und obs valide wäre, mochte ich gar nicht erst testen. Natürlich könnte ich das alles rausstreichen, und als einzigen "Content" meiner HTML-Dokumente nur noch das drinstehen lassen, was normalerweise zwischen <body> und </body> steht - aber dann sind die Einzelseiten nicht mehr valide und ich kann mich nicht mehr leiden. Das einzige, was mir bisher eingefallen ist, wäre, sämtliche HTML-Dokumente vor dem Includieren erst durch ein Perl-Script aufrufen zu lassen, das die "überflüssigen" Auszeichnungen entfernt. Hat jemand ne bessere Idee?
zweitens:
Jetzt möchte ich aber in (mindestens) eins meiner DIV's ein XML-Dokument reinschubsen. Geht zwar prinzipiell auch, aber da gibts Unterscheide bei den Servern. Mein Apache möchte es gerne in der Form
<!--#include virtual="daten.xml" -->
haben, dann gehts prima. Aber der IIS bei meinem Provider zeigt da gar nix an, der möchte zwingend
<!--#include file="daten.xml" -->
Zwar kann ich beide Angaben in meine SHTML reinschreiben, für die Browserdarstellung ergibt das keinen Unterschied, aber für den "Quelltext" in meinem Browsercache ergibt das eine Verdopplung der Größe. Bleibt mir wirklich nix andres übrig als mit einer "if"-Abfrage über "SERVER_SOFTWARE" den grade aktiven Server zu ermitteln?
Und dann ergibt sich ein ähnliches Problem für die "Kopfdaten" wie bei den HTML-Dokumenten. Ich habe in meiner XML drinstehen:
<?xml version='1.0' encoding="ISO-8859-1"?>
<!DOCTYPE schnauss SYSTEM "style/test.dtd">
<?xml-stylesheet type="text/xsl" href="style/test.xsl"?>
was normalerweise gut funktioniert, wenn ich meine XML als Einzeldatei über den Server aufrufe. Binde ich sie aber mit SSI ein, bekommt der Browser das nicht mehr als Dateikopf angezeigt, sondern erst nach viel, viel anderem HTML-Code, es steht also nicht mehr im Dateikopf (da steht eine andere DOCTYPE-Angabe) und dann scheint es ihm egal zu sein, meine DTD und meine XSL werden nicht mehr vollständig berücksichtigt (Details erspare ich mir im Moment, das wird ein anderer Thread, weil ich dazu noch mehr "XML-Nachfragen" habe)
drittens:
Macht das überhaupt Sinn, aich so eine "SSI-Konstruktion" auszudenken? Folgendes Hemmnis sehe ich: zwar sind sämtliche Einzeldateien hübsch klein, auch die HTML-Dokumente und meine XML sind höchstens 40 kB groß. Aber wenn ich jetzt nur 30 Stück davon includiere, werden sie ja alle bereits auf dem Server zusammengeklebt und im Browser dargestellt, was dazu führt, daß die Anzeige des "Quelltextes" der im Browser angezeigten Gesamtdatei schnell mal eine Größe von 1 MB und mehr erreichen kann. Das ist lokal natürlich kein Problem, aber online mag ich mir ja nicht erst 1 MB runtersziehen müssen, selbst mit meiner DSL-Verbindung nicht. Und bei einem "Projekt", in dem es dann ja in den HTML-Dokumenten auch noch diverse Grafiken geben kann und in dem ich mit 30 Einzeldokumenten bei weitem nicht auskomme, kann mich das doch bedenklich xtimmen. Meine bisherigen online-Testläufe hab ich zwar nur mit 20 HTML-Dokumenten gemacht, und erstaunlicherweise war die Browseranzeige nahezu sofort da. Trotzdem bin ich da mißtrauisch.
Es macht nicht viel Sinn, die URL zu nennen, weil ihr ja damit die "SSI-Konstruktion" nicht zu sehen bekommt. Ich hoffe, ich hab mein augenblickliches "Problem" einigermaßen verständlich dargestellt.
Grüße aus Berlin
Christoph S.