mboost-dp1

Ingen browsere forstår XHTML korekt


Gå til bund
Gravatar #1 - CableCat
19. maj 2011 09:25
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
Gravatar #2 - onetreehell
19. maj 2011 09:32
Er det sådan det skal se ud?

Edit: I w3m er boxene usynlige :)
Gravatar #3 - D_V
19. maj 2011 09:40
#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
<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.
Gravatar #4 - CableCat
19. maj 2011 10:19
#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).
Gravatar #5 - myplacedk
19. maj 2011 10:43
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.
Gravatar #6 - CableCat
19. maj 2011 12:42
#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.
Gravatar #7 - Daniel-Dane
19. maj 2011 12:57
CableCat (1) skrev:
Test din browser
http://peecee.dk/uploads/052011/imustbedoingsomethingwrong.png
Gravatar #8 - myplacedk
19. maj 2011 13:21
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".
Gravatar #9 - Windcape
19. maj 2011 14:21
#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

CableCat (6) skrev:
W3 kunne godt være mere tydelig.
Så absolut. W3Cs utydelighed, er grunden til at ingen browsere opfører sig ens, eller nogensinde har gjort det i HTMLs 15 års historie.

(P.S. Det har været de-facto knowlegde at ingen browsere forstår XHTML korrekt i snart 10 år :p)
Gravatar #10 - myplacedk
19. maj 2011 15:46
Windcape (9) skrev:
W3Cs utydelighed, er grunden til at ingen browsere opfører sig ens,

Bob bob... De opfører sig jo heller ikke ens der hvor standarderne ER tydelige.
Gravatar #11 - Windcape
19. maj 2011 16:15
myplacedk (10) skrev:
Bob bob... De opfører sig jo heller ikke ens der hvor standarderne ER tydelige.
Pfft, details!
Gravatar #12 - onetreehell
19. maj 2011 16:20
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?!???
Gravatar #13 - Windcape
19. maj 2011 16:29
#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:


<div><xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text></div>


For at få valid output.
Gravatar #14 - izym
19. maj 2011 18:08
XHTML er jo ikke en decideret XML udgave af HTML. Så vidt jeg ved, så er XHTML bl.a. lavet grundet uenigheder, omkring hvorvidt endtags er nødvendige eller ej, i visse sammenhænge.
Gravatar #15 - myplacedk
19. maj 2011 18:21
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.
Gravatar #16 - izym
19. maj 2011 18:25
I stand corrected.
Gravatar #17 - Windcape
19. maj 2011 18:48
myplacedk (15) skrev:
Undertitel: A Reformulation of HTML 4 in XML 1.0
Nej?

Der står

a reformulation of HTML 4 as an XML 1.0 application


Forskellen er ret markant! Så izym har faktisk ret.
Gravatar #18 - Windcape
19. maj 2011 18:51
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 shorthand
Misforstå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 />
Gravatar #19 - izym
19. maj 2011 19:07
Det er jeg skam helt indforstået med. Her tænker jeg på visse tilfælde i HTML, hvor det i følge standarden ikke er nødvendigt med hverken et end tag eller shorthand. At det er dårlig kode skik er så en anden sag.
Gravatar #20 - Windcape
19. maj 2011 19:11
#19

Det gav vel mening dengang. Mindre data at overføre!
Gravatar #21 - izym
19. maj 2011 19:34
#20

Det kan du selvfølgelig have ret i.
Gravatar #22 - onetreehell
19. maj 2011 21:28
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!??!
Gravatar #23 - Windcape
19. maj 2011 23:02
#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
Gravatar #24 - onetreehell
20. maj 2011 08:29
Jeg kan ikke se hvad der er galt i min tolkning i semantics i denne sammenhæng.

(næsten) en compiler skrevet i XSLT
Gravatar #25 - CableCat
20. maj 2011 09:00
Det intersande er at siden validere korekt. Så enten er validatoren forkert, eller så er browserne.
Gravatar #26 - Windcape
20. maj 2011 09:45
#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
Gravatar #27 - myplacedk
20. maj 2011 11:13
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.
Gravatar #28 - Faergemeister
20. maj 2011 11:15
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.
Gravatar #29 - myplacedk
20. maj 2011 11:18
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-...
Gravatar #30 - myplacedk
20. maj 2011 11:19
Faergemeister (28) skrev:
Og så er der også det faktum at noget godt kan validere uden at det giver det resultat programmøren troede det ville give.

Jojo. Man kan jo også sagtens overholde færdselsloven ord og intensioner, og alligevel køre forkert. ;-)
Gravatar #31 - Niklas H
20. maj 2011 17:10
Jeg kan ikke se hvad du vil med et tomt div-tag alligevel (med mindre du selvfølgelig bare vil give det et ID, og så hente noget ind med Javascript).
Gravatar #32 - CableCat
20. maj 2011 19:46
#31 Problemmet er at XML generatore ændre for eksmple <td></td> til <td/>. Altså hvis du har en table hvor nogle feldter er tomme.
Gravatar #33 - Windcape
20. maj 2011 19:48
#31

Så brug en HTML generator istedet? Eller generer din XML med XSLT til HTML.
Gravatar #34 - myplacedk
21. maj 2011 06:39
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.

Opret Bruger Login