Mathias: XHTML/Reihenfolge "encoding" und "DOCTYPE"

Hallo Leute,

seit einiger Zeit hätte der (X)HTML-Validator vom W3C ja gern das "encoding" der Seite angegeben. Empohlen wird, die Zeile

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

am Anfang der Datei einzufügen (oder alternativ ein META-Tag).

Wenn ich aber diese besagte Zeile vor den DOCTYPE stelle, dann erkennt der IE6 selbigen nicht und interpretiert die Seiten nach dem alten "M$-Standard".

Also ändere ich die Reihenfolge in

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>...

Validator und IE6 sind nun zufrieden. Aber entspricht das ganze auch noch echtem XML? Was könnte dagegen sprechen?

MfG Mathias

  1. Hallo,

    Wenn ich aber diese besagte Zeile vor den DOCTYPE stelle, dann erkennt der IE6 selbigen nicht und interpretiert die Seiten nach dem alten "M$-Standard".

    was ist der alte MS-Standard?

    Was könnte dagegen sprechen?

    Die XML-Empfehlung:
    http://www.w3.org/TR/1998/REC-xml-19980210#NT-prolog
    Es steht nirgendwo explizit ausserhalb der Produktionsregeln. Diese aber besagen, dass die XML-Deklaration immer am Beginn eines XML-Dokuments stehen muss, wenn Sie gesetzt wird.

    Aber du hast recht, der IE6 läßt das durchgehen. Xerces (ein anderer XML-Parser) meldet sich mit der meiner Meinung nach richtigen Meldung:
    "org.xml.sax.SAXParseException: The XML declaration may only appear at the very beginning of the document."

    Gruß
    Franz

    1. Hallo Franz,,

      was ist der alte MS-Standard?

      vermutlich meint er den Switch zwischen standardkonform und den MS-
      Standards (<marquee> etc.).

      [...]

      da möchte ich nochmal nachfragen. Ist der folgende Teil ein korrektes
      Dokument nach XHTML 1.0 Strict oder ist da etwas zuviel, zuwenig oder
      falsch angeordnet:

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      <head>
      <title>example</title>
      </head>
      <body>
      <p>content</p>
      </body>
      </html>

      Das Attribut lang in <html> steht für die Sprache des Dokumentes und
      müßte dann bei dt. Seiten demzufolge lang="de" heißen?

      Viele Grüße,
      Stefan

      1. Hallo Stefan,

        vermutlich meint er den Switch zwischen standardkonform und den MS-
        Standards (<marquee> etc.).

        Aha, und wenn man dem IE also XHTML ankündigt, dann versteht er seine eigenen nicht-standardkonformen Tags nicht mehr. Finde ich gut ;-), aber in der Praxis sicherlich ein Problem für einige Webseiten, die auf XHTML umstellen wollen, aber trotzdem einige MS-Tags nutzen möchten.

        da möchte ich nochmal nachfragen. Ist der folgende Teil ein korrektes
        Dokument nach XHTML 1.0 Strict oder ist da etwas zuviel, zuwenig oder
        falsch angeordnet:

        Aus meiner Sicht alles korrekt.

        Einige Anmerkungen:

        • XML-Deklaration könnte man theoretisch weglassen, da Du als encoding UTF-8 angegeben und das als Standard angenommen wird, wenn kein encoding angegeben wird.
        • mit dem lang-Attribut in xhtml kennen ich mich nicht so gut aus, und ich weiss auch nicht genau was die Browser dabei eigentlich auswerten. Aber eigentlich benötigt man ja nur ein solches Language-Attribut. Also entweder das xml:lang-Attribut oder das xhtml:lang-Attribut.
        • Falls du ein gültiges Dokument benötigst, musst du das xml:lang-Attribut in der DTD deklarieren
        • Ja und dann gibt es ja noch das leidige Namensraumthema: Eigentlich gehört das lang-Attribut nicht zum Gültiggeitsbereich des deklarierten Standardnamensraums, da Attribute generell nicht in den Gültigkeitsbereich von Standardnamensräumen fallen.

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
        <head>
        <title>example</title>
        </head>
        <body>
        <p>content</p>
        </body>
        </html>

        Das Attribut lang in <html> steht für die Sprache des Dokumentes und
        müßte dann bei dt. Seiten demzufolge lang="de" heißen?

        ja, die Kürzel sind standardisiert nach ISO 639, oder so...

        Gruß
        Franz

        1. Hallo Stefan,

          vermutlich meint er den Switch zwischen standardkonform und den MS-
          Standards (<marquee> etc.).

          Genau den!

          Aha, und wenn man dem IE also XHTML ankündigt, dann versteht er seine eigenen nicht-standardkonformen Tags nicht mehr. Finde ich gut ;-), aber in der Praxis sicherlich ein Problem für einige Webseiten, die auf XHTML umstellen wollen, aber trotzdem einige MS-Tags nutzen möchten.

          Schwierigkeiten gibt es vor allem mit CSS, die auch auf IE5 laufen sollen, da "width"- und "height"-Angaben im W3C-Standard-Mode anders (richtig) interpretiert werden, als es IE4/5 (falsch) tun.

          • XML-Deklaration könnte man theoretisch weglassen, da Du als encoding UTF-8 angegeben und das als Standard angenommen wird, wenn kein encoding angegeben wird.

          Das W3C sagt dazu: It is very important that the character encoding of any XML or (X)HTML document is clearly labeled. This can be done in the following ways ...

          • Ja und dann gibt es ja noch das leidige Namensraumthema: Eigentlich gehört das lang-Attribut nicht zum Gültiggeitsbereich des deklarierten Standardnamensraums, da Attribute generell nicht in den Gültigkeitsbereich von Standardnamensräumen fallen.

          Damit kann ich jetzt wenig anfangen?!

          MfG Mathias

          1. Hallo Stefan,

            vermutlich meint er den Switch zwischen standardkonform und den MS-
            Standards (<marquee> etc.).
            Genau den!

            Aha, und wenn man dem IE also XHTML ankündigt, dann versteht er seine eigenen nicht-standardkonformen Tags nicht mehr. Finde ich gut ;-), aber in der Praxis sicherlich ein Problem für einige Webseiten, die auf XHTML umstellen wollen, aber trotzdem einige MS-Tags nutzen möchten.
            Schwierigkeiten gibt es vor allem mit CSS, die auch auf IE5 laufen sollen, da "width"- und "height"-Angaben im W3C-Standard-Mode anders (richtig) interpretiert werden, als es IE4/5 (falsch) tun.

            • XML-Deklaration könnte man theoretisch weglassen, da Du als encoding UTF-8 angegeben und das als Standard angenommen wird, wenn kein encoding angegeben wird.
              Das W3C sagt dazu: It is very important that the character encoding of any XML or (X)HTML document is clearly labeled. This can be done in the following ways ...
            • Ja und dann gibt es ja noch das leidige Namensraumthema: Eigentlich gehört das lang-Attribut nicht zum Gültiggeitsbereich des deklarierten Standardnamensraums, da Attribute generell nicht in den Gültigkeitsbereich von Standardnamensräumen fallen.
              Damit kann ich jetzt wenig anfangen?!

            MfG Mathias

            1. Hallo Stefan,

              vermutlich meint er den Switch zwischen standardkonform und den MS-
              Standards (<marquee> etc.).
              Genau den!

              Aha, und wenn man dem IE also XHTML ankündigt, dann versteht er seine eigenen nicht-standardkonformen Tags nicht mehr. Finde ich gut ;-), aber in der Praxis sicherlich ein Problem für einige Webseiten, die auf XHTML umstellen wollen, aber trotzdem einige MS-Tags nutzen möchten.
              Schwierigkeiten gibt es vor allem mit CSS, die auch auf IE5 laufen sollen, da "width"- und "height"-Angaben im W3C-Standard-Mode anders (richtig) interpretiert werden, als es IE4/5 (falsch) tun.

              • XML-Deklaration könnte man theoretisch weglassen, da Du als encoding UTF-8 angegeben und das als Standard angenommen wird, wenn kein encoding angegeben wird.
                Das W3C sagt dazu: It is very important that the character encoding of any XML or (X)HTML document is clearly labeled. This can be done in the following ways ...
              • Ja und dann gibt es ja noch das leidige Namensraumthema: Eigentlich gehört das lang-Attribut nicht zum Gültiggeitsbereich des deklarierten Standardnamensraums, da Attribute generell nicht in den Gültigkeitsbereich von Standardnamensräumen fallen.
                Damit kann ich jetzt wenig anfangen?!

              MfG Mathias

              <p style="display: none">Das kann ich auch *g*</p>

          2. Hallo Matthias,

            Mist, irgendwas schiefgelaufen beim ersten Mal...

            Das W3C sagt dazu: It is very important that the character encoding of any XML or (X)HTML document is clearly labeled. This can be done in the following ways ...

            Ja, das Thema hatten wir bereits mal hier.
            Es gehört sicher zum guten Stil, eine XML-Deklaration immer anzugeben. Die XML-Empfehlung fordert jedoch keine:
            http://www.w3.org/TR/REC-xml#sec-prolog-dtd Produktionsregel [22]

            Selbstvertändlich benötigt man Sie immer, wenn man ein anderes encoding als UTF-8 oder UTF-16 angeben möchte. UTF-8 und UTF-16 muss jeder XML-Parser unterstützen, alles andere ist im Prinzip optional.

            Damit kann ich jetzt wenig anfangen?!

            Macht nix, ist auch nicht wirklich wichtig, eher Korinthenkackerei ;-). Das Thema Namensräume ist eines der umstrittensten im XML-Bereich und weist einige Obskuritäten auf, die nicht besonders intuitiv sind. Dazu gehört eben die, dass Attribute nicht zum Standardnamensraum gehören, auch wenn Sie zu einem Element gehören, dass in den Gültigkeitsbereich des Standardnamensraums fällt.

            Sehr detaiiliert zu Namensräumen:
            http://www.rpbourret.com/xml/NamespacesFAQ.htm und insbesondere zu Attributen und Standardnamensräumen: http://www.rpbourret.com/xml/NamespacesFAQ.htm#q5_3.

            Gruß
            Franz

            MfG Mathias