Most recent comments
Liveblogg nyttårsaften 2017
Tor, 11 months, 1 week
Jogging og blogging
Are, 1 year, 11 months
Liveblogg nyttårsaften 2016
Are, 1 year, 11 months
Reading in dark times
Are, 2 years
Moldejazz 2016
Camilla, 2 years, 4 months
Dørskilt
Karoline, 2 years, 4 months
Halifax
Tor, 2 years, 5 months
Sony Smartwatch 3 review
Tor, 2 years, 6 months
Numerikk, takk
Tor, 2 years, 6 months
Topp tur
Camilla, 2 years, 8 months
50 book challenge
Camilla, 11 months, 1 week
Ten years ago
Pics or it never happened!
Tor
Controls
Register

(X)HTML

For en stund siden tenkte jeg at det ville være kult om calcuttagutta validerte på html-sjekkeren til W3C. Jeg kom faktisk ganske nært, men ingen sigar. Som en fortsettelse av diskusjonen fra i går tenkte jeg å skrive litt om hva jeg kom frem til.

Det første man må gjøre hvis man vil lage en nettside med gyldig html er at man må bestemme seg for hvilken html man skriver. HTML 4.01? HTML 5? XHTML? Strict eller transitional? Så hva er det som avgjør hva vi bør bruke? Vel, vi kjører jo på Django, og Django leverer XHTML. Det betyr at all html som kommer fra Django er i XHTML format. Det gjelder imidlertid bare den koden som faktisk er generert av Django. Mesteparten av siden du ser rundt deg kommer fra mal-filer, som jeg har skrevet, og der skriver jeg naturligvis det jeg vil. Det som kommer fra Django er nesten utelukkende input-feltene i ulike skjemaer, og de er altså i XHTML. Det er ikke alltid så stor forskjell på de ulike (X)HTML-variantene, men en av dem er at i XHTML må en tag alltid lukkes, men ikke i HTML. Så for eksempel en bilde-tag kan se slik ut i HTML
<img src="fint_bilde" >

mens i XHTML ser den slik ut
<img src="fint_bilde" />

der den siste skråstreken lukker tagen. Så Django produserer altså XHTML, så da bør vi sikkert gå for det? Vel, fullt så enkelt er det ikke. Vi bruker nemlig også et bibliotek som heter bleach. Dette er det som roter igjennom all tekst som blir postet, luker ut ondsinnet kode, lukker tager du har glemt å lukke og denslags. Bleach er igjen er basert på et python-bibliotek som heter html5lib, og som navnet tilsier produserer det HTML 5. Problemet er at bleach funker så bra, og er det eneste jeg har funnet som gjør jobben så bra og enkelt, så det er lite aktuelt å bytte det ut med det første. Og Django er det naturligvis fullstendig uaktuelt å bytte ut. Dermed er vi i den irriterende situasjon at vi nesten alltid vil ha både HTML og XHTML på siden, så vi er i grunnen dømt til ikke å kunne validere.

En annen ting jeg eksperimenterte litt med var å serve siden som application/xml i stedet for text/html. Det er visstnok det man egentlig skal gjøre med XHTML. Jeg er ikke helt sikker på hva forskjellen er rent teknisk, men det har en del å si praktisk. Fordelene med å serve som application/xml er at vi kunne fått mathml til å funke, noe jeg lenge har ønsket meg, pluss at det ville føre til at siden ikke ville funke i det hele tatt på Internet Explorer. Disse fordelene blir imidlertid oppveid av ulempen, som er at siden faktisk nekter å laste om den ikke er 100% gyldig. Det betyr at vi ikke lenger kunne brukt bleach, og det betyr også at vi måtte vært helt skråsikre på at det ikke var mulig for en bruker å putte inn ugyldig kode i en artikkel. Det skal ikke mer til enn en bilde-tag som ikke er lukket, så nekter hele siden å laste.

Så hvor går veien videre. Vel, personlig liker jeg HTML 5, om ikke annet så fordi Apple sier at hvis man har HTML 5, javascript og css trenger man ikke Flash, og jeg liker ikke flash. Dessuten kan jeg de tre andre sånn høvelig greit, så om jeg skulle bli nødt til å ta meg jobb som webutvikler i en postapokalyptisk fremtid når himmelen er dekket av skyer og ingen trenger solceller, ser jeg helst at Flash forsvinner stille fra intertubene. HTML 5 kommer forøvrig til å inneholde (tror jeg) både XHTML 1.0 og HTML 4, altså all gyldig XHTML er også gyldig HTML 5, så når HTML 5 er ferdig er det i grunnen bare å bytte første linje i kildekoden, så er vi i boks. Tror jeg.

Spørsmålet er så om det vil gjøre saken noe bedre med hensyn til å tvinge frem gyldige nettsider, og det tror jeg kanskje ikke, da HTML 5 (eller implementasjonene av HTML 5) visstnok skal være omtrent like sloppy som det vi har i dag. Det spørs dermed om det beste ikke ville være å kikke på en eller annen separat kodesjekker man kan bruke i utviklingen. Lint, for eksempel.

-Tor Nordam

Comments

Are,  08.01.11 18:41

Det ser jo ut som vi mangler bare to småting for å validere som HTML5 når jeg prøver på w3c.org :) Det gjør jo ikkeno at komponenter leverer xhtml så lenge den også tilfeldigvis er gyldig HTML5. Hva med å endre doctype til html5 og fikse disse? Jeg er usikker på om den siste er noe krøll.

Line 5, Column 57: When the attribute xml:lang in no namespace is specified, the element must also have the attribute lang present with the same value.

Line 1414, Column 64: Self-closing syntax (/>) used on a non-void HTML element. Ignoring the slash and treating as a start tag.
Tor,  11.01.11 13:48

Nå validerer vi jaggu som html5. Slett ikke verst. Lurer på hvorfor jeg ikke kom på å bytte før?

Den første feilen var in ting som må være der i xhtml, men ikke i html5, og den andre feilen var en pinlig typo som ville vært oppdaget for lenge siden om ikke alle nettleserne hadde vært så slappe.