ChristianR: validator Fehler kein Fehler ?!

Wenn ich unter http://validator.de.selfhtml.org/

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"[  
<!-- DOCTYPE-ADJUSTMENTS 4 IFrame-Viewer -->  
  <!ATTLIST li  
   itemid     ID       #IMPLIED  
   groupid    CDATA    #IMPLIED  
   meta       CDATA    #IMPLIED>  
]>  
  
  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">  
	<head>  
		<title>..:: DTD-Test ::..</title>  
	</head>  
	<body>  
		hallo Welt<br/>  
		<ul>  
			<li>item</li>  
			<li groupid="group" itemid="item1">item 1</li>  
			<li groupid="group" itemid="item2">item 2</li>  
			<li groupid="group" itemid="item3">item 3</li>  
		</ul>  
	</body>  
</html>

validiere ist alles IO.

Wenn ich unter http://validator.w3.org/ die gleiche Datei checke erhalte ich:

Validation Output:  1 Error

1. Error Line 544, Column 3: the attribute definition list already declared attribute "itemid" as the ID attribute

Die Datei hat keine 544 Zeilen? Ist es nun ein Fehler oder nicht?

  1. Hallo,

    Wenn ich unter http://validator.de.selfhtml.org/ ...

    vergiss Sekundärquellen. ;-)

    Wenn ich unter http://validator.w3.org/ die gleiche Datei checke erhalte ich:

    Validation Output:  1 Error
       1. Error Line 544, Column 3: the attribute definition list already declared attribute "itemid" as the ID attribute

    Die Datei hat keine 544 Zeilen?

    Auch nicht, wenn du die DTD mit hinzurechnest? Anscheinend betrachtet der Validator die als Teil des Dokuments und zählt die Zeilen einfach mit.

    Ist es nun ein Fehler oder nicht?

    Es ist einer. Du deklarierst ein Attribut neu, das in der DTD schon existiert.

    Ciao,
     Martin

    --
    Nein, es ist nicht wahr, dass bei der Post Beamte schneller befördert werden als Pakete.
    1. Es ist einer. Du deklarierst ein Attribut neu, das in der DTD schon existiert.

      Jaein wenn ich als Typ CDATA angebe kommt der Fehler nicht hat aber die doofe Eigenschaft das ich nun auch mehrfach die gleiche ID haben kann und das wollte ich vermeiden bzw. in einen Validationsprozess als Fehler angezeigt bekommen.

    2. @@Der Martin:

      nuqneH

      Ist es nun ein Fehler oder nicht?
      Es ist einer.

      Ja.

      Du deklarierst ein Attribut neu, das in der DTD schon existiert.

      Nein.

      In der DTD steht:

      <!ATTLIST li  
        %attrs;  
        type        %LIStyle;      #IMPLIED  
        value       %Number;       #IMPLIED  
        >
      

      Auch '%attrs' schließt weder @itemid noch @groupid noch @meta ein.

      Der Fehler ist, dass es in XHTML 1.0 untersagt ist, eigene Attribute hinzuzufügen.

      Qapla'

      --
      Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
    3. Hi,

      Wenn ich unter http://validator.w3.org/ die gleiche Datei checke erhalte ich:
      Validation Output:  1 Error
         1. Error Line 544, Column 3: the attribute definition list already declared attribute "itemid" as the ID attribute

      Die Datei hat keine 544 Zeilen?

      in Zeile 544 der DTD ( http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ) endet die Definition des li-Elements.

      Es ist einer. Du deklarierst ein Attribut neu, das in der DTD schon existiert.

      Nein - (X)HTML kennt kein itemid-, groupid- oder meta-Attribut - keine der Attributdeklarationen bezieht sich auf ein existentes Attribut, das neu deklariert wird.

      Das Problem hier ist, daß nur ein Attribut mit type ID pro Element existieren darf (damit z.B. klar ist, auf welches Attribut sich ein #id-Selector bezieht, oder eine Methode getElementById, ...).

      In den (X)HTML-Doctypes wird das id-Attribut mit dem type ID versehen - ein zusätzliches Attribut vom Typ ID ist daher nicht möglich.

      cu,
      Andreas

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

        nuqneH

        Das Problem hier ist, daß nur ein Attribut mit type ID pro Element existieren darf

        Ja [XML10], das kommt noch zu dem von mir Erwähntem hinzu.

        Allerdings lässt sich dies nicht per DTD ausdrücken. Wenn also gegen die DTD validiert wird (was Validome doch tut, oder?), sollte dieser Fehler gar nicht gefunden werden.

        Erst, wenn gegen das XML Schema validiert wird (wie es Christoph Schneegans’ Validator tut), dann sollte dies erkannt werden können.

        Qapla'

        --
        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
        1. Hi,

          Das Problem hier ist, daß nur ein Attribut mit type ID pro Element existieren darf
          Allerdings lässt sich dies nicht per DTD ausdrücken.

          Da das ja eine Regel für die DTD ist, nicht für die Dokumente, wäre es ja auch nicht sinnvoll, das per DTD auszudrücken.

          Wenn also gegen die DTD validiert wird (was Validome doch tut, oder?), sollte dieser Fehler gar nicht gefunden werden.

          Doch, es muß gefunden werden, daß die DTD fehlerhaft ist.

          cu,
          Andreas

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

            nuqneH

            Doch, es muß gefunden werden, daß die DTD fehlerhaft ist.

            Nein, AFAIS.

            Eine DTD kann nicht sagen: erlaubt sind die Attribute @foo und @bar, allerdings nur eins von beiden, wenn beide vom Typ BAZ sind.

            Nicht in ihrer Macht. Dazu bedarf* es Kontextsensitivität, die erst XML Schema liefert.

            Qapla'

            * ein A für ein Ü vormachen? ;-)

            --
            Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
            1. Hi,

              Doch, es muß gefunden werden, daß die DTD fehlerhaft ist.

              Ein

              <!ATTLIST foo
                 bla     ID       #IMPLIED
                 blubb   ID       #IMPLIED>

              (egal, ob das jetzt direkt da steht, oder über irgendwelche Ersetzungen (Entities) zusammenkommt)

              ist ein Fehler in der DTD.

              Eine DTD kann nicht sagen: erlaubt sind die Attribute @foo und @bar, allerdings nur eins von beiden, wenn beide vom Typ BAZ sind.

              Bei anderen Typen als ID wäre es erlaubt, daß es mehrere Attribute von diesem Typ gibt. Aber der Typ ID ist speziell, wie ein Highlander. Es kann nur einen geben!

              In der Attributliste zu einem Element ist maximal ein Attribut vom type ID erlaubt.
              Also kann es gar nicht zur Auswahl "eins von mehreren vom Typ ID" kommen, da das zweite Attribut vom type ID schon in der DTD verboten ist.

              Nicht in ihrer Macht. Dazu bedarf* es Kontextsensitivität, die erst XML Schema liefert.

              Nein, für das Verbot, mehrere Attribute vom Typ ID für ein Element zu definieren, braucht's kein Schema.
              Das ist bereits in der DTD verboten.

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              O o ostern ...
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2. Hi,

      	<li groupid="group" itemid="item1">item 1</li>  
      	<li groupid="group" itemid="item2">item 2</li>  
      	<li groupid="group" itemid="item3">item 3</li>  
    

    Was sollen diese beiden Attribute leisten, was class und id nicht können?

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1.   	<li groupid="group" itemid="item1">item 1</li>  
        	<li groupid="group" itemid="item2">item 2</li>  
        	<li groupid="group" itemid="item3">item 3</li>  
      

      Was sollen diese beiden Attribute leisten, was class und id nicht können?

      itemid hat prinzipiell die gleiche Funktion wie das originale ID nur frage ich in einen js ab ob für das Element eine id existiert oder nicht. Somit könnte ich nicht mehr unterscheiden. Goup ist nur eine Gruppierung / Zusammenfassung von Elementen welche gleichen oder ähnlichen inhaltes sind und keine CSS-Steuerung (class brauche ich dann auch wieder in meinem js)

      1. Hi,

        itemid hat prinzipiell die gleiche Funktion wie das originale ID nur frage ich in einen js ab ob für das Element eine id existiert oder nicht. Somit könnte ich nicht mehr unterscheiden.

        Was unterscheiden?
        Welche Information versuchst du über die (Nicht-)Existenz einer ID zu vermitteln?

        Goup ist nur eine Gruppierung / Zusammenfassung von Elementen welche gleichen oder ähnlichen inhaltes sind und keine CSS-Steuerung (class brauche ich dann auch wieder in meinem js)

        Ein Element kann mehreren Klassen angehören.
        Und die gewünschte Information dort unterzubringen, erscheint mir noch weitaus sinnvoller, als dein derzeitiges vorgehen.

        Ansonsten, in einer kontrollierten Umgebung, in der man davon ausgehen kann, dass die verwendeten Clients mitspielen, könnte HTML5 mit der Möglichkeit, Custom Attributes zu nutzen, für dich interessant sein.
        Oder du bleibst bei XHTML, verzichtest auf Validität, und freust dich einfach, wenn die bestehenden Browser trotzdem mitspielen.

        MfG ChrisB

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