mboost-dp1
Ingen browsere forstår XHTML korekt
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Det irritere mig godt nok at alle browsere mener at <div/> skal fortolkes til <div> og ikke <div></div>. For det betyder at hvis man køre HTML igennem i XML-parser så fucker det op der hvor der er tomme elementer. Fordi pasreren korrekt omskriver <td></td> til <td/>.
Problemet viser sig for eksempel i TYPO3 og CherryPy.
Test din browser
Problemet viser sig for eksempel i TYPO3 og CherryPy.
Test din browser
#1
Browseren opfører sig korrekt nok, ifølge specifikationen af XHTML 1.0 Strict
I ovenstående, står der at shorthand closing kun er tilladt for de elementer som er deklereret i DTD'en med attributen EMPTY.
Helt specifikt drejer det sig om følgende
Så browserne opfører sig som sådan ikke forkert, da de ser noget invalid XHTML, og prøver at redde dagen.
Browseren opfører sig korrekt nok, ifølge specifikationen af XHTML 1.0 Strict
I ovenstående, står der at shorthand closing kun er tilladt for de elementer som er deklereret i DTD'en med attributen EMPTY.
Helt specifikt drejer det sig om følgende
<area />
<base />
<br />
<col />
<hr />
<img />
<input />
<link />
<meta />
<param />
Så browserne opfører sig som sådan ikke forkert, da de ser noget invalid XHTML, og prøver at redde dagen.
#3 Jeg kan ikke finde noget i dit link der støtter din påstand.
Jeg fandt Compatibility Guidelines som fortæller at det er en godt idé at ikke bruge <hr></hr> eller <div/> (to sider af samme sag).
Jeg fandt Compatibility Guidelines som fortæller at det er en godt idé at ikke bruge <hr></hr> eller <div/> (to sider af samme sag).
CableCat (4) skrev:Jeg kan ikke finde noget i dit link der støtter din påstand.
Det vigtigste er nok denne sætning:
"All elements other than those declared in the DTD as EMPTY must have an end tag."
Men XML-specifikationen siger at der er 3 slags tags. Start, slut og "empty-element". Og:
"Empty-element tags may be used for any element which has no content, whether or not it is declared using the keyword EMPTY. For interoperability, the empty-element tag should be used, and should only be used, for elements which are declared EMPTY.
Dvs. XHTML-standarden siger at du ikke må bruge <div />, og at du skal bruge <div></div> i stedet. Men XHTML-standarden bygger oven på XML, som ser at de har samme betydning, og dog råder til at betragte dem som forskellige fordi nogle applikationer gør det.
Det må vel betyde at XHTML ikke helt er XML.
#5 W3 kunne godt være mere tydelig.
4.3 siger at du gerne må bruge "empty element shorthand" hvis elementet er i "DTD as EMPTY" listen. Men de siger ikke direkte at du ikke må bruge det, hvis elementet ikke er i listen.
Spørgsmålet er vel om <div/> er et "end tag" eller ej. Jeg vil jo mene det både er et start og et end tag.
Min testside valider.
4.3 siger at du gerne må bruge "empty element shorthand" hvis elementet er i "DTD as EMPTY" listen. Men de siger ikke direkte at du ikke må bruge det, hvis elementet ikke er i listen.
Spørgsmålet er vel om <div/> er et "end tag" eller ej. Jeg vil jo mene det både er et start og et end tag.
Min testside valider.
http://peecee.dk/uploads/052011/imustbedoingsomethingwrong.pngCableCat (1) skrev:Test din browser
CableCat (6) skrev:Men de siger ikke direkte at du ikke må bruge det, hvis elementet ikke er i listen.
Jo da: "All elements other than those declared in the DTD as EMPTY must have an end tag."
CableCat (6) skrev:Spørgsmålet er vel om <div/> er et "end tag" eller ej.
Det er det ikke. Både XML- og XHTML-standarden siger at det hverken er et start-tag eller et slut-tag. Det er en "empty-element".
#1
Det store spørgsmål er hvorfor du bruger XHTML? Enten brug HTML4, eller HTML5 (hvor HTML5 har samme regler for self-closing tags som overstående).
Derudover, hvilken semantisk værdi har et tomt container-element? Som #3 påpeger, er det kun non-container elementer som kan lukkes automatisk.
(x)HTML er designet ud fra et semantisk synspunkt, ikke ud fra at det skulle være XML. Ellers havde XHTML været XSLT :p
(P.S. Det har været de-facto knowlegde at ingen browsere forstår XHTML korrekt i snart 10 år :p)
Det store spørgsmål er hvorfor du bruger XHTML? Enten brug HTML4, eller HTML5 (hvor HTML5 har samme regler for self-closing tags som overstående).
Derudover, hvilken semantisk værdi har et tomt container-element? Som #3 påpeger, er det kun non-container elementer som kan lukkes automatisk.
(x)HTML er designet ud fra et semantisk synspunkt, ikke ud fra at det skulle være XML. Ellers havde XHTML været XSLT :p
Så absolut. W3Cs utydelighed, er grunden til at ingen browsere opfører sig ens, eller nogensinde har gjort det i HTMLs 15 års historie.CableCat (6) skrev:W3 kunne godt være mere tydelig.
(P.S. Det har været de-facto knowlegde at ingen browsere forstår XHTML korrekt i snart 10 år :p)
Windcape (9) skrev:(x)HTML er designet ud fra et semantisk synspunkt, ikke ud fra at det skulle være XML. Ellers havde XHTML været XSLT :p
WTF?!???
#12
Hvad? Markup sprog som HTML er jo netop designet omkring semantik, og ikke som et data-format.
XSLT (som er XML baseret) bruges modsat til automatiserede transformationer af XML til et markup sprog (som f.eks. HTML). Hvor bla. at <div /> vil blive transformeret til <div></div> med en korrekt parser.
Jeg kan nævne at visse Java baserede XSLT parsere gør det forkert, hvilket så kræver at man skriver:
For at få valid output.
Hvad? Markup sprog som HTML er jo netop designet omkring semantik, og ikke som et data-format.
XSLT (som er XML baseret) bruges modsat til automatiserede transformationer af XML til et markup sprog (som f.eks. HTML). Hvor bla. at <div /> vil blive transformeret til <div></div> med en korrekt parser.
Jeg kan nævne at visse Java baserede XSLT parsere gør det forkert, hvilket så kræver at man skriver:
<div><xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text></div>
For at få valid output.
izym (14) skrev:XHTML er jo ikke en decideret XML udgave af HTML.
Fra http://www.w3.org/TR/xhtml1/:
Titel: XHTML™ 1.0 The Extensible HyperText Markup Language (Second Edition)
Undertitel: A Reformulation of HTML 4 in XML 1.0
Det er den JEG tænker på, når der snakkes om XHTML, og det er vel også den vigtigste standard som kaldes XHTML.
izym (14) skrev:Så er XHTML bl.a. lavet grundet uenigheder, omkring hvorvidt endtags er nødvendige eller ej, i visse sammenhænge.
In SGML-based HTML 4 certain elements were permitted to omit the end tag; with the elements that followed implying closure. XML does not allow end tags to be omitted. All elements other than those declared in the DTD as EMPTY must have an end tag. Elements that are declared in the DTD as EMPTY can have an end tag or can use empty element shorthandMisforståelsen her er dog, for dig, det samme som for Cablecat.
"/>" er ikke det samme som "end tags". "/>" er "shorthand".
Så du skal altid lukke elementer (i modsætning til HTML4), f.eks. <div></div>, men du kan ikke altid bruge shorthand som <br />
Windcape (13) skrev:#12
Hvad? Markup sprog som HTML er jo netop designet omkring semantik, og ikke som et data-format.
XSLT (som er XML baseret) bruges modsat til automatiserede transformationer af XML til et markup sprog (som f.eks. HTML). Hvor bla. at <div /> vil blive transformeret til <div></div> med en korrekt parser.
XSLT har også en sematic. WTF!??!
#22
XSLT har ikke semantiske elementer som f.eks. <em> <strong> eller lign. der udtrykker sig i en lingvistisk sammenhæng.
XSLT kan transformere elementer til HTML eller XML elementer, men har i sig selv ikke ikke semantiske elementer.
Du tænker for meget i baner med sprogdesign her. Du skal tænke mindre datalogisk.
Se evt. http://da.wikipedia.org/wiki/Semantik
XSLT har ikke semantiske elementer som f.eks. <em> <strong> eller lign. der udtrykker sig i en lingvistisk sammenhæng.
XSLT kan transformere elementer til HTML eller XML elementer, men har i sig selv ikke ikke semantiske elementer.
Du tænker for meget i baner med sprogdesign her. Du skal tænke mindre datalogisk.
Se evt. http://da.wikipedia.org/wiki/Semantik
Jeg kan ikke se hvad der er galt i min tolkning i semantics i denne sammenhæng.
(næsten) en compiler skrevet i XSLT
(næsten) en compiler skrevet i XSLT
Det intersande er at siden validere korekt. Så enten er validatoren forkert, eller så er browserne.
#24
Som jeg skrev, så snakker vi ikke om semantik i en datalogisk sammenhæng, men i en kontekst af sprogstudier.
Altså betydning af fremhævningen for læseren. (Det kan være implicit fremhævning, som f.eks. <abbr>).
Læs evt. http://en.wikipedia.org/wiki/Semantic_HTML
Som jeg skrev, så snakker vi ikke om semantik i en datalogisk sammenhæng, men i en kontekst af sprogstudier.
Altså betydning af fremhævningen for læseren. (Det kan være implicit fremhævning, som f.eks. <abbr>).
Læs evt. http://en.wikipedia.org/wiki/Semantic_HTML
CableCat (25) skrev:Det intersande er at siden validere korekt. Så enten er validatoren forkert, eller så er browserne.
Det må være validatoren, da standarden tydeligt siger at "<div />" ikke er gyldigt XHTML.
Det er i øvrigt langt fra den eneste fejl i validatoren. Dertil kommer at mange ting i standarderne ikke kan valideres automatisk. Så at en side består det valideringstjek betyder absolut ikke at siden overholder standarderne, og det siger da slet intet om at overholde intentionerne i standarderne. "Valid" betyder kun at validatoren ikke fandt nogen fejl, ikke at der ikke er fejl.
Kort sagt: W3C-validatorerne er gode værktøjer, men de garanterer altså ikke så meget.
CableCat (25) skrev:Det intersande er at siden validere korekt. Så enten er validatoren forkert, eller så er browserne.
Og så er der også det faktum at noget godt kan validere uden at det giver det resultat programmøren troede det ville give.
Og her er beviset på at validatoren ikke går så højt op i empty-element shorthand som XHMTL-standarden og W3C gør. Bemærk at den ikke finder nogen fejl, og den warning der kommer er irrelevant. Læs teksten i XHTML'en længere nede på siden:
http://validator.w3.org/check?uri=http%3A%2F%2Fqa-...
http://validator.w3.org/check?uri=http%3A%2F%2Fqa-...
http://validator.w3.org/check?uri=http%3A%2F%2Fqa-...
http://validator.w3.org/check?uri=http%3A%2F%2Fqa-...
CableCat (32) skrev:#31 Problemmet er at XML generatore ændre for eksmple <td></td> til <td/>. Altså hvis du har en table hvor nogle feldter er tomme.
a) Konfigurer din XML-generator til at give det output du skal bruge
eller
b) Lav lidt simpel post-processing hvor du rette fejlen
eller
c) Brug et værktøj som er beregnet til at generere HTML/XHTML (eller få rettet bug'en hvis det allerede er det du gør)
Man kan godt argumentere for at en browser burde reagere anderledes på den HTML-fejl, men det er altså HTML'en der har fejl, ikke browseren. Og selv hvis alle de browsere du tester med tolkede det som du ønsker, så burde du stadig rette dit HTML til.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.