validator Fehler kein Fehler ?!
ChristianR
- html
0 Der Martin0 ChrisB0 ChristianR1 ChrisB
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?
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 attributeDie 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
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.
@@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'
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 attributeDie 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
@@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'
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
@@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? ;-)
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
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
<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)
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