Standart DTD erweitern um ein Attribut in Elementen
NuSphere
- html
Hi,
ich habe mich zwar nun eingehend damit beschäfftigt wie das validieren von HTML-Quellcode funktioniert und habe festgestellt, dass es abhängig ist von dem DOCTYPE den ich angebe.
So weit so gut. Den Standart Quellcode zu validieren ist ja nicht schwer, da es ja in der DTD beschieben ist was erlaubt ist und was nicht. Nun möchten wir jedoch ein Attribut in speziellen Elementen hinzufügen. Hierbei ist nur wichtig das es hinzugefügt werden muss - warum dies sein muss tut nicht zur sache.
Dies führt aber zu einer Warnung bzw. zu einem Fehler welcher dargestellt wird mit "Fehler: there is no attribute 'ccindex'". Dieser Fehler entsteht weil durch die DTD nicht bekannt gegeben wurde, dass wir ein weiteres Attribut zulassen.
Von daher die Frage, wie kann man eine DTD erweitern um bestimmt Attribute dem Validator erlaubt werden. Noch besser das nur bestimmte Eigenschaften gültig sind.
Ich weiß das die möglich ist, nur habe ich im Moment keine Ahnung wie das zu realisieren ist.
Hier einmal der zu validierende Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
Titel der XHTML-Seite
</title>
</head>
<body>
<form name="f1" action="#" id="f1">
<input type="text" name="date_lae12_feldname" id="date_lae12_feldname" ccindex="datum" />
</form>
</body>
</html>
Bisheriger ansatz ist eine eigene DTD Datei zu erstellen und den Bereich zur Deklarierung des Inputfeldes zu erweitern - ungefähr so:
<!ELEMENT input EMPTY> <!-- form control -->
<!ATTLIST input
%attrs;
%focus;
type %InputType; "text"
name CDATA #IMPLIED
value CDATA #IMPLIED
checked (checked) #IMPLIED
disabled (disabled) #IMPLIED
readonly (readonly) #IMPLIED
size CDATA #IMPLIED
maxlength %Number; #IMPLIED
src %URI; #IMPLIED
alt CDATA #IMPLIED
usemap %URI; #IMPLIED
onselect %Script; #IMPLIED
onchange %Script; #IMPLIED
accept %ContentTypes; #IMPLIED
align %ImgAlign; #IMPLIED
ccindex CDATA #IMPLIED
>
Jedoch müssten wir dafür eine eigene DTD schreiben - beziehungsweise die zum aktuellem Stand kopieren und immer wieder aktuell halten.
Effektiver wäre es ja wenn man sagt. Nimm die Standart Datei und erweitere Sie um das entsprechende Attribut "ccindex" - Nur jetzt steh ich wie die Axt vorm Walde und weiß nicht mehr weiter.
Ich würde mich über konstruktive Vorschläge und Lösungsansätze freuen.
Mit freundlichen Grüßen
NuSphere
Hallo
Von daher die Frage, wie kann man eine DTD erweitern um bestimmt Attribute dem Validator erlaubt werden. Noch besser das nur bestimmte Eigenschaften gültig sind.
Ich weiß das die möglich ist, ...
Ist es nicht. Entweder, du benutzt einen Doctype und hältst dich dann auch an die damit in der entsprechenden DTD vorgegebenen Regeln, oder du schreibst dir deine eigene vollständige DTD. Damit ist es aber auch nicht mehr XHTML, sondern "irgendein" XML-Dialekt.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
Titel der XHTML-Seite
</title>
</head>
<body>
<form name="f1" action="#" id="f1">
<input type="text" name="date_lae12_feldname" id="date_lae12_feldname" ccindex="datum" /></form>
</body>
</html>
Muss es denn wirklich ein eigenes Attribut sein, oder reicht nicht vielleicht doch die Benutzung einer Klasse?
Jedoch müssten wir dafür eine eigene DTD schreiben - beziehungsweise die zum aktuellem Stand kopieren und immer wieder aktuell halten.
Veränderliche Attributnamen oder warum muss die DTD dann "immer wieder aktuell" gehalten werden?
Tschö, Auge
Hallo
Danke für deinen schnelle Post.
Muss es denn wirklich ein eigenes Attribut sein, oder reicht nicht vielleicht doch die Benutzung einer Klasse?
Da wir das ganze über ein JS Konstrukt ansprechen wollen - wüsste ich nicht, wie wir das ansonsten lösen wollen. Sinn der "übung" ist das taggen von vorhandenen Quellcode ohne alte Sachen zu verändern.
Veränderliche Attributnamen oder warum muss die DTD dann "immer wieder aktuell" gehalten werden?
Falls sich vorhandene Standarts ändern sollten, dann müsste unsere Datei angepasst werden. Dies sollte eigentlich nicht unbedingt, ergebniss der änderung sein.
Hallo
Muss es denn wirklich ein eigenes Attribut sein, oder reicht nicht vielleicht doch die Benutzung einer Klasse?
Da wir das ganze über ein JS Konstrukt ansprechen wollen - wüsste ich nicht, wie wir das ansonsten lösen wollen. Sinn der "übung" ist das taggen von vorhandenen Quellcode ohne alte Sachen zu verändern.
Ein <input>
, welches der Klasse "datum" angehört, sollte sich doch mit JavaScript erkennen lassen, oder? Naja, vielleicht denke ich da auch "zu kurz". :-)
Falls sich vorhandene Standarts ändern sollten, dann müsste unsere Datei angepasst werden. Dies sollte eigentlich nicht unbedingt, ergebniss der änderung sein.
Bereits vorhandene (also verabschiedete) Standards werden sich wohl nicht mehr verändern. Und ob man, wenn man wie ihr schon XHTML 1 benutzt, jedem neu verabschiedeten Standard hinterher hecheln muss, ... wer weiß?
Tschö, Auge
Ein
<input>
, welches der Klasse "datum" angehört, sollte sich doch mit JavaScript erkennen lassen, oder? Naja, vielleicht denke ich da auch "zu kurz". :-)
Vielleicht sollen wir einmal kurz erklären, was wir unter einer Klasse im HTML verstehen. Denn ich verstehe das du damit ein CSS zu dem HTML Element zuweißt.
Und bei unseren Codes ist das halt schon für CSS Klassen verwendet. Es geht im groben darum, dass es irgendwie eine Möglichkeit geben muss, einem HTML Feld eine Information zu geben ohne die folgenden Attribute zu berühren, da diese ja schon einen festen verwendungszweck haben:
class
name
id
value
Da wir aber dem Feld eine zusätzliche information - ähnlich einer Notiz - geben möchte, wollten wir die in einem neuen Attribut machen. Das hinzufügen von Notizen später via JS auslesen und verarbeiten. Alles spielt mit nur net der HTML-Validator. Und nun die Frage wie wir den klar schiff bekommen.
Yerf!
Da wir aber dem Feld eine zusätzliche information - ähnlich einer Notiz - geben möchte, wollten wir die in einem neuen Attribut machen. Das hinzufügen von Notizen später via JS auslesen und verarbeiten. Alles spielt mit nur net der HTML-Validator. Und nun die Frage wie wir den klar schiff bekommen.
Füge die Information doch per generiertem JS dem Node-Objekt des Input als Eigenschaft hinzu.
Gruß,
Harlequin
Yerf!
Da wir aber dem Feld eine zusätzliche information - ähnlich einer Notiz - geben möchte, wollten wir die in einem neuen Attribut machen. Das hinzufügen von Notizen später via JS auslesen und verarbeiten. Alles spielt mit nur net der HTML-Validator. Und nun die Frage wie wir den klar schiff bekommen.
Füge die Information doch per generiertem JS dem Node-Objekt des Input als Eigenschaft hinzu.
Leider nicht praktikabel - da wir genau das nicht wollten! ...
Das HTML-Konstrukt ist komplett vom JS getrennt und das JS soll nicht angepackt werden. Von daher nicht praktikabel.
Danke dir trotzdem
@@NuSphere:
Und bei unseren Codes ist das halt schon für CSS Klassen verwendet. Es geht im groben darum, dass es irgendwie eine Möglichkeit geben muss, einem HTML Feld eine Information zu geben ohne die folgenden Attribute zu berühren, da diese ja schon einen festen verwendungszweck haben:
class
Ein Element darf mehreren Klassen angehören – durch Leerzeichen getrennt: <foo class="bar baz">
Live long and prosper,
Gunnar
Ein Element darf mehreren Klassen angehören – durch Leerzeichen getrennt:
<foo class="bar baz">
Danke, ehrlich gesagt wusste ich das nicht - dies dürfte auf jeden Fall praktikabel sein. Werde das ersteinmal testen.
Aber einen anderen ansatz kennt hier keiner oder?!
Hallo
Ein
<input>
, welches der Klasse "datum" angehört, sollte sich doch mit JavaScript erkennen lassen, oder? Naja, vielleicht denke ich da auch "zu kurz". :-)Vielleicht sollen wir einmal kurz erklären, was wir unter einer Klasse im HTML verstehen. Denn ich verstehe das du damit ein CSS zu dem HTML Element zuweißt.
Dass ein HTML-Element mehr als einer Klasse angehören darf, weißt du ja nun schon. Hinzuzufügen ist, dass das Ansprechen einer Klasse mit CSS nur _ein_ Verwendungszweck ist. Wenn ich eine Gruppe von HTML-Elementen zu einer Klasse hinzufüge, sie also gewisse Eigenschaften (meist inhaltlich) gemeinsam haben, ist das erstmal so. Hernach kann ich diese Gruppe von Elementen per CSS besonders ansprechen oder auch z.B. mit JavaScript auf sie zugreifen.
Tschö, Auge
Moin!
Veränderliche Attributnamen oder warum muss die DTD dann "immer wieder aktuell" gehalten werden?
Falls sich vorhandene Standarts ändern sollten, dann müsste unsere Datei angepasst werden. Dies sollte eigentlich nicht unbedingt, ergebniss der änderung sein.
Sollte sich das W3C überlegen, dem Input offiziellerseits ein Attribut ccindex hinzuzufügen, bist du sowieso geliefert.
Wenn Validität und Standardkonformität für dich über alles geht, dann kannst du schlicht keine eigene DTD an XHTML angelehnt verfassen, weil das, was du produzieren willst, höchstens valide, aber nie standardkonform sein kann.
Wenn es dir darum geht, zu einem bestimmten Element javascriptseitig Metainformationen zu speichern, stehen dir alle existierenden HTML-Attribute offen. Außerdem kannst du in einer Javascript-Variablen als Lookup-Tabelle jede Element-ID des HTML mit ihren Metainformationen verbinden. Das wäre dann allerhöchstens ein kleiner Schnipsel Javascript pro <input> zusätzlich, sofern du diese Info über den Quelltext verteilen möchtest.
- Sven Rautenberg
@@NuSphere:
Von daher die Frage, wie kann man eine DTD erweitern um bestimmt Attribute dem Validator erlaubt werden.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
[
<!ATTLIST input
ccindex CDATA #IMPLIED
>
]
>
Noch besser das nur bestimmte Eigenschaften gültig sind.
http://de.selfhtml.org/xml/dtd/attribute.htm
Live long and prosper,
Gunnar
@@NuSphere:
Von daher die Frage, wie kann man eine DTD erweitern um bestimmt Attribute dem Validator erlaubt werden.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
[
<!ATTLIST input
ccindex CDATA #IMPLIED]
>
>
> > Noch besser das nur bestimmte Eigenschaften gültig sind.
>
> <http://de.selfhtml.org/xml/dtd/attribute.htm>
>
> Live long and prosper,
> Gunnar
Leider funktioniert dies nicht hundert Prozent, da zum einen "> ]" vor dem <html> - Tag gepostet wird, und zum anderen bekomme ich nun die meldung 'Warnung: <input> proprietary attribute "ccindex"'
wie kann ich das beheben?! Ansonsten schaut das schon sehr gut aus!
Dank dir auf jeden fall
@@NuSphere:
Leider funktioniert dies nicht hundert Prozent, da zum einen "> ]" vor dem <html> - Tag gepostet wird,
Äh ja, ich hätte dazuschreiben sollen, dass das nur bei Verarbeitung als XML geht.
Ansonsten: Verzichte auf Validität.
Live long and prosper,
Gunnar
Ansonsten: Verzichte auf Validität.
Leider nur ungern...
Ansonsten: Verzichte auf Validität.
Leider nur ungern...
Ich frage mich was für Nachteile erwartest du, wenn dein Code bewußt nicht valide ist? Bei der Rechtschreibung ist dir diese doch auch egal, trotz deiner Massenhanften Schreibfehler hat dich jeder verstanden. Dem Browser ist ein nicht valides Attribut ebenfalls egal.
Struppi.
Mahlzeit,
Gunnar, Du bist der Meister ... endlich zeigt der Validator mir ein grünes Licht, auch wenn ich selbstgebasteltes AJAX-Autovervollständigen in meinen Seiten verwende:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" [<!ATTLIST input autocomplete (off) #IMPLIED >]>
Danke!
MfG,
EKKi
Hi,
So weit so gut. Den Standart
Standard.
Quellcode zu validieren ist ja nicht schwer, da es ja in der DTD beschieben ist was erlaubt ist und was nicht. Nun möchten wir jedoch ein Attribut in speziellen Elementen hinzufügen.
Das kannst Du machen. Allerdings hast Du dann kein HTML mehr, sondern eine eigene Markup Language, die den Clients dieses Universums gänzlich unbekannt ist. Ich sehe nicht, was Du damit gewonnen hättest.
Hierbei ist nur wichtig das es hinzugefügt werden muss - warum dies sein muss tut nicht zur sache.
Okay. Was allerdings zur Sache tut ist dies: Warum um alles in der Welt muss ein nicht existentes Attribut an den Client _ausgeliefert_ werden?
Von daher die Frage, wie kann man eine DTD erweitern
Wende Dich an das W3C und begründe, warum HTML/4.02 und XHTML/1.01 mit diesem Attribut veröffentlicht werden sollten. Ansonsten kannst Du nur eine _neue_ DTD erzeugen.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Wenn Du XHTML verwendest, also ein XML, kannst Du einen XML-Namespace einführen, in dem dieses Attribut vorhanden ist.
Cheatah
@@Cheatah:
Wenn Du XHTML verwendest, also ein XML, kannst Du einen XML-Namespace einführen, in dem dieses Attribut vorhanden ist.
Wobei bei dessen Verwendung auch kein valides XHTML 1.0 rauskommt.
Live long and prosper,
Gunnar