Einzelnen Beitrag anzeigen
  #3 (permalink)  
Alt 16.11.2007, 20:35
gato gato ist offline
Standardkatze
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 06.02.2007
Beiträge: 1.820
gato ist einfach richtig nettgato ist einfach richtig nettgato ist einfach richtig nettgato ist einfach richtig nettgato ist einfach richtig nett
Standard

10. Nur in XML erlaubte Zeichen verwenden
Diese Richtlinie muss befolgt werden.

Das Dokument darf nur aus Zeichen bestehen, die in einem XML-1.0-Dokument ebenfalls erlaubt sind.

Begründung

Zeichen, die in einem XML-Dokument der Version 1.0 (dazu gehören alle XHTML-Dokumente) nicht erlaubt sind, dürfn nicht verwendet werden, da ein XML-Parser sonst einen Fehler wirft.

Beispiel: In HTML wird das Zeichen U+000C () wie ein Leerzeichen behandelt. In XML ist es verboten.

11. Das tbody-Element
Diese Richtlinie muss befolgt werden.

Tabellen (table-Elemente) dürfen keine tr-Elemente als Kindelemente besitzen. tr-Elemente dürfen nur Kinder von thead-, tfoot- und tbody-Elementen sein.

Begründung

In HTML können einige Elemente im Quelltext weg gelassen werden. Sie werden dann nachträglich vom Parser eingefügt. Das gilt z.B. für das html-, body- und tbody-Element. In XHTML (genauer: XML) kann diese Eigenschaft eines Elements nicht ausgedrückt werden, daher ist das html- und das body-Element in XHTML Pflicht. Das tbody-Element jedoch nicht.
Dieser Unterschied ergibt sich nicht direkt aus der Spezifikation, sondern aus den Dokumenttypdefinitionen (DTDs):
Zitat:
Zitat von Beliebige HTML-DTD
Code:
<!ELEMENT TABLE - - (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>
<!ELEMENT TBODY - O (TR)+ -- table body -->
Zitat:
Zitat von Beliebige XHTML-DTD
Code:
<!ELEMENT table (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
Alle wichtigen Eigenschaften des table-Elements sind definiert: In XHTML wird der Elementname klein geschrieben, es kann ein caption-Element beinhalten, ein oder mehrere col- bzw. colgroup-Elemente und auch thead- und tfoot-Elemente. Der letzte Punkt der Elementdefinition macht den Unterschied zwischen HTML und XHTML klar.
In HTML kann ein table-Element keine tr-Elemente als Kind besitzen, dafür ist das tbody-Element pflicht. Das tbody-Element ist jedoch so definiert, dass der Autor es nicht in den Quelltext schreiben muss, der HTML-Parser fügt das Element selbstständig ein.
Da diese Eigenschaft XML-Elementen unbekannt ist wurde die Definition des table-Elements in XHTML leicht verändert: Es kann entweder thead-, tfoot- und tbody-Elemente als Kind haben - dann müssen diese auch in den Quelltext geschrieben werden - oder tr-Elemente.

12. Die Interpretation von Stilangaben
Diese Richtlinie muss befolgt werden.

Stilregeln müssen so definiert werden, dass sie bei der Verarbeitung eines Dokuments als HTML bzw. XML eine identisch Ausgabe erzeugen.

Begründung

Für HTML gibt es eine Reihe von Sonderregelungen, die bei der Interpretation von Stilangaben beachtet werden müssen. In XHTML-Dokumenten werden diese Sonderregelungen jedoch nicht berücksichtigt.
Zitat:
Zitat von http://www.w3.org/TR/xhtml1/#C_13
CSS defines different conformance rules for HTML and XML documents; be aware that the HTML rules apply to XHTML documents delivered as HTML and the XML rules apply to XHTML documents delivered as XML.
Nicht alle CSS-fähigen Browser setzen diese Regeln korrekt um, das ist mitunter einer der Gründe, warum sich Autoren von XHTML-Quelltext hier der Problematik nicht bewusst sind.
Die Spezifikation von CSS 2.1 ist zwar schon recht ausgereift, aber noch immer in Bearbeitung. Daher könnten diese Sonderregelungen in Zukunft auch wegfallen.
Im einzelnen sind folgende Bereiche betroffen:

12.1 Hintergrundfarbe und -Bild des Anzeigebereichs
Zitat:
Zitat von http://www.w3.org/TR/2007/CR-CSS21-20070719/colors.html#background
For HTML documents whose root HTML element has computed values of 'transparent' for 'background-color' and 'none' for 'background-image', user agents must instead use the computed value of those properties from that HTML element's first BODY element child when painting backgrounds for the canvas, and must not paint a background for that BODY element. Such backgrounds must also be anchored at the same point as they would be if they were painted only for the root element. This does not apply to XHTML documents.
In dieser Sonderregelung für HTML stecken viele Informationen. Geht man die Spezifikation der relevanten Eigenschaften und diesen Absatz Schritt für Schritt durch, werden aus der Spezifikation folgende Punkte deutlich:
  • Für jedes Element ist der Standardwert der background-color-Eigenschaft transparent (durchsichtig).
  • Für jedes Element ist der Standardwert der background-image-Eigenschaft none (keines).
  • In HTML wird der Anzeigebereich durch das body-Element definiert, in XML durch das Wurzelelement des Dokuments (in XHTML das html-Element).
  • Ist keine dieser Eigenschaften für das html-Element definiert, aber eine oder beide für das body-Element, so werden diese definierten Eigenschaften vom body-Element entfernt und auf das html-Element übertragen.
Wäre eine dieser Eigenschaften also für das body-Element definiert, würde bei der Anzeige des Dokuments als XML tatsächlich nur das body-Element und nicht der Anzeigebereich betroffen sein.

12.2 Die overflow-Eigenschaft des Anzeigebereichs
Zitat:
Zitat von http://www.w3.org/TR/2007/CR-CSS21-20070719/visufx.html#overflow
UAs must apply the 'overflow' property set on the root element to the viewport. HTML UAs must instead apply the 'overflow' property from the BODY element to the viewport, if the value on the HTML element is 'visible'. The 'visible' value when used for the viewport must be interpreted as 'auto'. The element from which the value is propagated must have a used value for 'overflow' of 'visible'.
Diese Sonderregelung ähnelt der für die Eigenschaften von Hintergrundfarbe und Bild. Auch hier ergeben sich folgende Punke aus der Spezifikation:
  • Für jedes Element ist der Standardwert der overflow-Eigenschaft visible. Das bedeutet, wenn für ein Element Höhe und Breite definiert sind, der Inhalt aber mehr Platz als verfügbar benötigt, wird der Inhalt außerhalb des Elements dargestellt. Sind Höhe und Breite nicht definiert, so vergrößert sich das Element, bis genug Platz für seinen inhalt ist.
  • Ist der Wert der overflow-Eigenschaft für das html-Element visible und der Wert der Eigenschaft für das body-Element definiert, so wird der Wert vom body-Element entfernt und auf das html-Element übertragen.
  • Das html-Element bestimmt die Beschaffenheit des Anzeigebereichs. Ist der Wert der overflow-Eigenschaft für das html-Element visible, verändert er sich automatisch auf „auto“ (d.h. der Bereich sollte Scrollbar werden, das ist aber vom Darstellungsprogramm abhängig).

12.3 Groß- und Kleinschreibung

Wird ein Dokument als XML verarbeitet spielt die Groß- und Kleinschreibung eine wichtige Rolle. Die trifft auch auf Stilangaben zu. Element- und Attributnamen müssen kleingeschrieben werden.

13. Die Verabeitung von Skripten
Diese Richtlinie muss befolgt werden.

Die write()- bzw. writeln()-Methoden in JavaScript dürfen nicht verwendet werden. Wird mit Methoden des DOM gearbeitet müssen die Namensraum-fähigen Methoden des Level-2-DOMs verwendet werden.
Die Begründung folgt in den Unterpunkten.

13.1 document.write()

Die JavaScript-Funktionen write() und writeln() können in XHTML nicht verwendet werden, da es durch die Definition von XML Skripten verboten ist, während des Parsevorgangs beliebigen neuen Text in das Dokument einzufügen.

13.2 Verwendung von DOM-Level-2-Methoden

Alle XHTML-Elemente und -Attribute befinden sich im XHTML-Namensraum (http://www.w3.org/1999/xhtml). Soll in das Dokument dynamisch ein neues Element eingefügt werden, so muss das einzufügende Element (das gilt auch für Attribute) dem XHTML-Namensraum angehören. Dies ist nur mit den Methoden des DOM-Level-2-Kerns möglich.
Zitat:
Zitat von http://www.w3.org/TR/DOM-Level-2-Core/core.html#Namespaces-Considerations
DOM Level 1 methods are namespace ignorant.
Das bedeutet, fügt man mit der Level-1-Methode createElement() ein p-Element ein, erhält man kein Absatzelement, sondern ein unbekanntes Inlinelemement (Inline deshalb, weil das der Standardwert für undefinierte Elemente ist).
Stattdessen muss man die Namensraum-fähigen Level-2-Methoden verwenden. Diese haben den selben Namen, nur mit „NS“ als Suffix.
Code:
NeuesElement = document.createElementNS('http://www.w3.org/1999/xhtml','p');
Der Vorteil der Level-2-Methoden ist, dass das erzeugte Element sowohl von XML-Parsern als auch von HTML-Parsern verarbeitet werden kann.
Elemente aus dem XHTML-Namensraum werden von üblichen HTML-Parsern als identische HTML-Elemente erkannt. Der tatsächliche HTML-Namensraum wäre aber „null“, da HTML selbst über keinen Namensraum verfügt.
Mit Zitat antworten