fux: Validierung, DocType, standardkonform/Quirks

Hallo Experten,

ausgelöst von Problemen mit dem IE 8, der bei manchen meiner Websiten ab und zu meldet, dass die Webseite nicht richtig funktioniert oder ein Fehler auf der Webseite wäre mit der gewohnt unnützen Info, dass dies in Zeile 0, Spalte 0 wäre, hab ich den Basisaufbau meiner Webseiten einmal genauer angeschaut und versucht mittels W3C-Validierung hilfreiche Infos zu finden.

Ich hab bisher mit Strict-Mode gearbeitet, weil ich meinte, dass ich nur damit den IE zwingen könnte, meinen Code standardkonform zu interpretieren und den Quirksmode zu vermeiden.
Ich meine, mich an Erfahrungen von vor Jahren zu erinnern wo er im transitional/Loose Mode so Dinge wie falsche CSS-Angaben "width:200" ohne "px" tolerant ausgelegt und selbst korrigiert hat - bin mir darüber aber nicht ganz sicher.

Also nun zu den konkreten Fragen, die sich aus dem W3C-Check ergeben:
Bei DocType strict erhalte ich:
Attribute "TARGET" is not a valid attribute. Did you mean "target"
Mein HTML-Code ist: <a ...  target="_blank" ...>
Ich hab ja "target" geschrieben, aber das Problem liegt wohl einfach im Aufbau der DTD.
Wollte hierzu nur wissen, wie ich das target-Element im Strict-Mode anbringen kann.
Der Validator sagt: "... the document type you are using does not support that attribute for this element. This error is often caused by incorrect use of the "Strict" document type with a document that uses frames (e.g. you must use the "Transitional" document type to get the "target" attribute)"
Ich hab hier weder Frames noch embed.

Ich hab nun umgestellt auf transitional/loose, aber zur erfolgreichen Validierung fehlt's noch etwas.

Mein HTML beginnt so:

  
  
<?xml version="1.0" encoding="UTF-8" ?>  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
  "http://www.w3.org/TR/html4/loose.dtd">  
  
<html>  

Leerzeilen (auch 1. Zeile) aufgrund servergeneriertem HTML)

1. wie gebe ich in hrefs cgi-Parameter (&param=abc) valide an?
Beim Check erhalte ich die Fehlermeldung
general entity "param" not defined
Das ist wohl generell ein Problem, dass hier XML validiert werden soll.
Die Lösung ist doch wohl nicht, dass ich "&" durch "&amp;" ersetze?

2. document type does not allow element "DIV" here
Es geht um divs innerhalb eines a-Tags.

Innerhalb a dürfen also nur Inline-Elemente sein.
Rein inhalts-/darstellungsbezogen habe ich im Link Block-Elemente, sprich mehrere Blöcke übereinander, die ich mit CSS unterschiedlich auszeichne.
Muss ich hier also Klimmzüge machen und andere Tags verwenden, die eigentlich nicht so geeignet sind?

Ich will nicht mit aller Gewalt ein valides Dokument erreichen.
Meine Haltung/Idee dazu ist eher, dass ich damit die Wahrscheinlichkeit erhöhe, dass mein Dokument in den gängigsten Browsern richtig angezeigt wird und ich nicht jeden Teil testen muss bzw. weniger Darstellungsprobleme zu erwarten hab.
Ob das auch für den IE gilt?? Leider gibt MS nicht so viel drauf, standardkonform zu arbeiten - dies ändert sich mit IE 8 auch nur bedingt.

Gruß, Robert

  1. Hallo,

    Also nun zu den konkreten Fragen, die sich aus dem W3C-Check ergeben:
    Bei DocType strict erhalte ich:
    Attribute "TARGET" is not a valid attribute. Did you mean "target"

    den Wortlaut dieser Meldung habe ich schon mehrfach verflucht, er ist einfach irrführend.

    Mein HTML-Code ist: <a ...  target="_blank" ...>
    Ich hab ja "target" geschrieben, aber das Problem liegt wohl einfach im Aufbau der DTD.

    Nein, das Problem liegt darin, dass das Attribut target in den Strict-Varianten nicht erlaubt ist.

    Wollte hierzu nur wissen, wie ich das target-Element im Strict-Mode anbringen kann.

    Überhaupt nicht.

    1. wie gebe ich in hrefs cgi-Parameter (&param=abc) valide an?
      Beim Check erhalte ich die Fehlermeldung
      general entity "param" not defined
      Das ist wohl generell ein Problem, dass hier XML validiert werden soll.

    Nein, das hat mit XML nichts zu tun.

    Die Lösung ist doch wohl nicht, dass ich "&" durch "&amp;" ersetze?

    Doch, genau das: Du hast hier das et-Zeichen und willst, dass es "wörtlich" genommen wird, und nicht als Startzeichen für eine Entity-Referenz oder NCR. Also musst du es korrekt maskieren.

    1. document type does not allow element "DIV" here
      Es geht um divs innerhalb eines a-Tags.

    Das ist nicht erlaubt. Ein div ist ein Blockelement; in a ist aber nur inline-Inhalt zulässig. Ich weiß nicht, was du mit dem div im Link anstellen willst; vermutlich solltest du es durch span ersetzen, oder die Struktur grundsätzlich überdenken. Oft ist das div auch unnötig, wenn man das a-Element selbst mit CSS zu einem Blockelement umwidmet.

    Rein inhalts-/darstellungsbezogen habe ich im Link Block-Elemente, sprich mehrere Blöcke übereinander, die ich mit CSS unterschiedlich auszeichne.

    Ich kann mir nicht vorstellen, dass mehrere Blockelemente innerhalb eines Links inhaltlich-strukturell sinnvoll sind.

    Ich will nicht mit aller Gewalt ein valides Dokument erreichen.

    Wenn du so viel Erfahrung hast, dass du die Konsequenzen der Non-Validität im einzelnen abschätzen kannst, gut. Das traue ich aber den wenigsten zu.

    Meine Haltung/Idee dazu ist eher, dass ich damit die Wahrscheinlichkeit erhöhe, dass mein Dokument in den gängigsten Browsern richtig angezeigt wird und ich nicht jeden Teil testen muss bzw. weniger Darstellungsprobleme zu erwarten hab.

    Richtig.

    Ob das auch für den IE gilt?? Leider gibt MS nicht so viel drauf, standardkonform zu arbeiten - dies ändert sich mit IE 8 auch nur bedingt.

    Sagen wir's anders: Ein Dokument mit validem HTML und validem CSS ist normalerweise eine gute Voraussetzung für eine fehlerfreie Anzeige. Im IE scheint das allerdings weitgehend wurscht zu sein.

    Ciao,
     Martin

    --
    Bitte komme jemand mit einem *g* zum Wochenende, damit nicht über mich gelacht wird.
      (Gunnar Bittersmann)
    1. Hallo Martin,

      Wollte hierzu nur wissen, wie ich das target-Element im Strict-Mode anbringen kann.

      Überhaupt nicht.

      Kopfschüttel!
      Ich hab gelernt, dass man Links zu fremden Websites üblicherweise in neuem Fenster öffnet, sodass die eigene Website weiterhin im Browser (und somit im Gedächtnis des Surfers) verbleibt.
      Kennst Du den Sinn, dass es das target-Element nicht gibt?
      Strict-Mode zu benutzen ist doch IMHO eher anstrebenswert; kann man target hier anders realisieren?

      1. wie gebe ich in hrefs cgi-Parameter (&param=abc) valide an?
        Beim Check erhalte ich die Fehlermeldung
        general entity "param" not defined
        Das ist wohl generell ein Problem, dass hier XML validiert werden soll.

      Nein, das hat mit XML nichts zu tun.

      Ich meine, im Prinzip schon, denn in XML werden ja Entity-Referenzen durch vorangestelltes "&" realisiert.

      Die Lösung ist doch wohl nicht, dass ich "&" durch "&amp;" ersetze?

      Doch, genau das: Du hast hier das et-Zeichen und willst, dass es "wörtlich" genommen wird, und nicht als Startzeichen für eine Entity-Referenz oder NCR. Also musst du es korrekt maskieren.

      Welllll, ich will ja nicht ein "&"-Zeichen im Browser sichtbar darstellen (&amp;), sondern eine URL *wie sie ist* in mein HTML-Dokument schreiben.
      Aber diese Kröte werde ich wohl schlucken müssen, da HTML eben eine Unterart von SGML ist - wie auch XML (tja, beim Forum-Antworten lerne ich durch nebenläufige Recherche auch immer was dazu ;-)  )
      ... und HTML immer mehr zu einem XML-Format "gedrängt" wird (was ich durchaus positiv sehe).

      1. document type does not allow element "DIV" here
        Ich weiß nicht, was du mit dem div im Link anstellen willst; vermutlich solltest du es durch span ersetzen, oder die Struktur grundsätzlich überdenken.

      Tja, um dem Standard zu genügen, muss ich also spans benutzen und mittels CSS display:block zu Blockelementen machen, was ich mit divs von Haus aus hätte.

      Erinnert mich a bisserl an Bürokratie ...

      Schöne Grüße, Robert

      1. Hi,

        Wollte hierzu nur wissen, wie ich das target-Element im Strict-Mode anbringen kann.
        Überhaupt nicht.
        Kopfschüttel!
        Ich hab gelernt, dass man Links zu fremden Websites üblicherweise in neuem Fenster öffnet, sodass die eigene Website weiterhin im Browser (und somit im Gedächtnis des Surfers) verbleibt.

        das war mal. Heutzutage dominiert mehr und mehr der Gedanke, dem Besucher eben *nicht* ohne sein Zutun neue Fenster an den Kopf zu schmeißen.

        Kennst Du den Sinn, dass es das target-Element nicht gibt?

        Ja, "Strict" soll ein "sauberes", ordentlicheres Arbeiten begünstigen bzw. erzwingen. Also beispielsweise den Verzicht auf target; Erklärung siehe oben. ;-)

        Strict-Mode zu benutzen ist doch IMHO eher anstrebenswert; kann man target hier anders realisieren?

        Naja, du kannst neue Fenster auch mit Javascript erzeugen, wenn du deinen Besuchern unbedingt auf den Senkel gehen möchtest.

        general entity "param" not defined
        Das ist wohl generell ein Problem, dass hier XML validiert werden soll.
        Nein, das hat mit XML nichts zu tun.
        Ich meine, im Prinzip schon, denn in XML werden ja Entity-Referenzen durch vorangestelltes "&" realisiert.

        Ja, das definiert aber nicht XML so, sondern der gemeinsame Vorfahr SGML. XML übernimmt das Prinzip einfach nur.

        ... und HTML immer mehr zu einem XML-Format "gedrängt" wird (was ich durchaus positiv sehe).

        Äh, nein. Wenn du HTML und XML verheiraten willst, brauchst du das nicht mehr zu erfinden: XHTML gibt's schon lange.

        Tja, um dem Standard zu genügen, muss ich also spans benutzen und mittels CSS display:block zu Blockelementen machen, was ich mit divs von Haus aus hätte.
        Erinnert mich a bisserl an Bürokratie ...

        Wenn es verboten ist, auf dem Weihnachtsmarkt blaue Marktstände aufzustellen, dann nimmt man halt eine dunkelrote Bude und hängt eine blaue Plane drüber. ;-)

        Ciao,
         Martin

        --
        F: Was ist schneller: Das Licht oder der Schall?
        A: Offensichtlich der Schall. Wenn man den Fernseher einschaltet, kommt immer erst der Ton, und dann erst das Bild.
        1. Äh, nein. Wenn du HTML und XML verheiraten willst, brauchst du das nicht mehr zu erfinden: XHTML gibt's schon lange.

          Von XHTML sprach ich doch!

          Es ist gut so, dass Webseiten nicht nur Daten sondern auch mehr Semantik transportieren.

          Ciao, Robert

          1. Von XHTML sprach ich doch!

            Es ist gut so, dass Webseiten nicht nur Daten sondern auch mehr Semantik transportieren.

            Tun sie aber nicht - Weder XHTML transportiert in keiner weise mehr Semantik als HTML - solange man von Ergänzungen wie RDF oder ähnlichem absieht.

      2. @@fux:

        nuqneH

        Ich hab gelernt, dass man Links zu fremden Websites üblicherweise in neuem Fenster öffnet, sodass die eigene Website weiterhin im Browser (und somit im Gedächtnis des Surfers) verbleibt.

        Schlechte Schule.

        Kennst Du den Sinn, dass es das target-Element nicht gibt?

        “Don't pollute my screen with any more windows, thanks […]” (Top Ten Mistakes in Web Design, Punkt 9 [Nielsen]) S.a. Diskussion im Thread Internetseitenlink im neuen Fenster öffnen

        Strict-Mode zu benutzen ist doch IMHO eher anstrebenswert;

        Der Verzicht auf missbilligte Elemente und Attribute ist anstrebenswert. Wenn du sonst etwas benötigt, was es in Transitional gibt, aber in Strict nicht, dann nimm halt Transitional.

        kann man target hier anders realisieren?

        Wer ja sagt, verbreitet Unsinn.

        Ich meine, im Prinzip schon, denn in XML werden ja Entity-Referenzen durch vorangestelltes "&" realisiert.

        In SGML auch. BTW, XML ist SGML.

        Tja, um dem Standard zu genügen, muss ich also spans benutzen und mittels CSS display:block zu Blockelementen machen, was ich mit divs von Haus aus hätte.

        In HTML5 werden Blockelemente in 'a' erlaubt sein. Und das ist auch gut so.

        Ähm, du kennst außer 'div' und 'span' doch noch andere Elemente, oder?

        Qapla'

        --
        Volumen einer Pizza mit Radius z und Dicke a: pi z z a
        1. Ich hab gelernt, dass man Links zu fremden Websites üblicherweise in neuem Fenster öffnet, sodass die eigene Website weiterhin im Browser (und somit im Gedächtnis des Surfers) verbleibt.

          Schlechte Schule.
          ...
          “Don't pollute my screen with any more windows, thanks […]”

          Das mag ein marketingorientierter Mensch anders sehen.
          Durch das Verlinkungsprinzip des www wird der Surfer zu mehr oder minder weiten Exkursionen verleitet und könnte die ursprüngliche Website darüber vergessen.
          Die Diskussion an genannter Stelle ist ja schon lang genug und ich sehe, dass dem User eine Wahlmöglichkeit genommen wird.

          Strict-Mode zu benutzen ist doch IMHO eher anstrebenswert;

          Der Verzicht auf missbilligte Elemente und Attribute ist anstrebenswert. Wenn du sonst etwas benötigt, was es in Transitional gibt, aber in Strict nicht, dann nimm halt Transitional.

          Ich benutzte strict mit dem Hintergedanken, mich selbst zu möglichst schlankem (attributfreiem) HTML zu motivieren und Layout mit CSS zu steuern.

          In HTML5 werden Blockelemente in 'a' erlaubt sein. Und das ist auch gut so.

          Schön, dass W3C ein Einsehen hat und Du mir zustimmst!

          Ähm, du kennst außer 'div' und 'span' doch noch andere Elemente, oder?

          Ja natürlich! Sonst kenne ich noch <br> und verwende es intensiv!

          .
          .
          .
          .
          .
          .
          .
          .
          .... prust

          Ciao

          1. Hi,

            “Don't pollute my screen with any more windows, thanks […]”

            Das mag ein marketingorientierter Mensch anders sehen.

            Und ein Schwein sieht Hygiene anders.

            Durch das Verlinkungsprinzip des www wird der Surfer zu mehr oder minder weiten Exkursionen verleitet und könnte die ursprüngliche Website darüber vergessen.

            Und was wäre schlimm daran?

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
            1. Durch das Verlinkungsprinzip des www wird der Surfer zu mehr oder minder weiten Exkursionen verleitet und könnte die ursprüngliche Website darüber vergessen.

              Und was wäre schlimm daran?

              Ist das eine rhetorische Frage?
              Falls nicht: Es gibt Websites, die etwas verkaufen wollen, andere produzieren nur mehr oder wenig interessanten (subjektiv bewerteten) Text.

              Ciao, Robert

              1. Hi,

                Durch das Verlinkungsprinzip des www wird der Surfer zu mehr oder minder weiten Exkursionen verleitet und könnte die ursprüngliche Website darüber vergessen.

                Und was wäre schlimm daran?

                Ist das eine rhetorische Frage?

                Nein.

                Falls nicht: Es gibt Websites, die etwas verkaufen wollen

                Und warum sollten sie das nicht mehr können, wenn sie zum Wohle der Entscheidungsfreiheit des Nutzers auf das target-Attribut verzichten würden?

                (Um uns einen round-trip zu ersparen: Nein, auch das ist keine rhetorische Frage.)

                MfG ChrisB

                --
                “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        2. In HTML5 werden Blockelemente in 'a' erlaubt sein. Und das ist auch gut so.

          Ein href-Attribut auf jedes Element wäre besser gewesen.

          Ich würde folgendes

          <table>  
            <tr href="foo.html">  
              <td />  
              <td />  
            </tr>  
          </table>
          

          diesem hier

          <table>  
            <a href="foo.html">  
              <tr>  
                <td />  
                <td />  
              </tr>  
            </a>  
          </table>
          

          vorziehen - schon allein aus ästhetischen Gesichtspunkten.

          1. @@suit:

            nuqneH

            Ein href-Attribut auf jedes Element wäre besser gewesen.

            Sag ich doch!

            Chronologie zählt hier nicht als Ausrede. ;-)

            Qapla'

            --
            Volumen einer Pizza mit Radius z und Dicke a: pi z z a
            1. Chronologie zählt hier nicht als Ausrede. ;-)

              Den hab' ich ausgeblendet :p

  2. @@fux:

    nuqneH

    […] und den Quirksmode zu vermeiden.
    Ich meine, mich an Erfahrungen von vor Jahren zu erinnern wo er im transitional/Loose Mode so Dinge wie falsche CSS-Angaben "width:200" ohne "px" tolerant ausgelegt und selbst korrigiert hat - bin mir darüber aber nicht ganz sicher.

    Transitional und Quirksmodus hat nichts miteinander zu tun.

    Wollte hierzu nur wissen, wie ich das target-Element im Strict-Mode anbringen kann.

    „Lies unsere FAQ, dort sind häufig gestellte Fragen direkt beantwortet.“ Steht auf der Startseite des Forums. Warum hast du das missachtet?

    Mein HTML beginnt so:
    <?xml version="1.0" encoding="UTF-8" ?>

    Damit schickst du den 6er IE doch in den Quirksmodus. Lass die überflüssige XML-Deklaration weg!

    1. wie gebe ich in hrefs cgi-Parameter (&param=abc) valide an?

    „Lies unsere FAQ, dort sind häufig gestellte Fragen direkt beantwortet.“ Steht auf der Startseite des Forums. Warum hast du das missachtet?

    Das ist wohl generell ein Problem, dass hier XML validiert werden soll.
    Die Lösung ist doch wohl nicht, dass ich "&" durch "&amp;" ersetze?

    Doch, ist sie. Und das ist nicht nur bei XML so, sondern auch bei HTML.

    Innerhalb a dürfen also nur Inline-Elemente sein.
    Rein inhalts-/darstellungsbezogen habe ich im Link Block-Elemente,

    Darstellungsbezogene Blöcke müssen keine HTML-Blockelemente sein. Unterscheide zwischen HTML-Blockelementen und CSS-Blockelementen! http://forum.de.selfhtml.org/archiv/2006/6/t132132/#m854853, http://forum.de.selfhtml.org/archiv/2007/4/t149631/#m972077 ff.

    Qapla'

    --
    Volumen einer Pizza mit Radius z und Dicke a: pi z z a
    1. Hallo Gunnar,

      nach dem Lesen Deines Abschlussgrußes Qapla wird mir auch der Ton Deines Beitrags klar/konsistent.

      „Lies unsere FAQ, dort sind häufig gestellte Fragen direkt beantwortet.“ Steht auf der Startseite des Forums. Warum hast du das missachtet?

      Das gesamte selfhtml hab ich in meinem Leben sicher schon mehrfach gelesen und auch auf der faq-Seite war ich schon früher - halt wegen anderen Fragen.
      Hätte nicht erwartet, dass meine Fragen dort beantwortet würden, weil ich diese als speziell eingeschätzt hatte.
      Also gut - mea culpa!
      Trotzdem bitte ich um Verständnis, dass man bei jeder Frage nicht sämtliche Resourcen durchgeht und auch bei der Suche nicht das Richtige findet weil man nicht die richtige Frage zu stellen weiß.

      1. wie gebe ich in hrefs cgi-Parameter (&param=abc) valide an?
        „Lies unsere FAQ, dort sind häufig gestellte Fragen direkt beantwortet.“

      Ich meinte, was unter "HTML-eigene Zeichen maskieren" beschrieben ist, beziehe sich nur auf Text im Body von Tags (wenn ich zB ein >-Zeichen darstellen will) und dass dies in Attribut-Werten innerhalb von Quotes nicht nötig wäre.
      Da es in Browsern auch ohne Maskierung funktioniert hat, kam ich nicht auf die Idee, dass es zu maskieren wäre - bis ich versuchte zu validieren.
      Aber was in Browsern geht, ist ja kein Maßstab.

      Hab in selfhtml vergeblich Infos/Beispiele zu hrefs mit cgi-Parametern gesucht - auch nicht im Bereich cgi/Perl/PHP gefunden.
      Wenn's da wirklich nix is, rege ich an, wenigstens einen Satz dazu hinzuzufügen.

      Ok, kannst Dein Batleth wieder wegpacken.

      Gruß, Robert

      1. @@fux:

        nuqneH

        Ok, kannst Dein Batleth wieder wegpacken.

        Ich hab es noch nicht einmal geschwungen.

        Qapla'

        --
        Volumen einer Pizza mit Radius z und Dicke a: pi z z a
        1. Ok, kannst Dein Batleth wieder wegpacken.

          Ich hab es noch nicht einmal geschwungen.

          Und ich hab mich Dir zuliebe in die klingonische Kultur eingearbeitet ...

          Qapla'

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

      Damit schickst du den 6er IE doch in den Quirksmodus. Lass die überflüssige XML-Deklaration weg!

      Noch dazu handelt es sich um HTML 4.01 Transitional - da ist eine XML-Deklaration sowieso etwas "ungebräuchlich".

      1. Hi,

        Noch dazu handelt es sich um HTML 4.01 Transitional - da ist eine XML-Deklaration sowieso etwas "ungebräuchlich".

        Sag ich doch!

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        1. Sag ich doch!

          Ich lese die Posts chronologisch - zum Zeitpunkt hatte ich deinen noch nicht gelesen :)

          1. Ich lese die Posts chronologisch

            Gibt's dafür eine technische Hilfe - von der Forums-Software gibt's ja keinen Link dazu?
            Höchstens per Newreader mit Sortiermöglichkeit.

            1. Hi,

              Ich lese die Posts chronologisch

              Gibt's dafür eine technische Hilfe - von der Forums-Software gibt's ja keinen Link dazu?

              http://forum.de.selfhtml.org/hilfe/benutzerspezifische_ansicht.htm

              MfG ChrisB

              --
              “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  3. Hi,

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

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
      "http://www.w3.org/TR/html4/loose.dtd">

    Was bitte soll eine XML-Deklaration, wenn Du gar kein XML verwendest?

    Die ist schon bei XHTML in vielen Fällen überflüssig - aber bei Verwendung von HTML ist sie schlichtweg falsch.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  4. Danke Euch allen für die Postings!
    Hab Einiges dabei gelernt!

    Ciao, Robert