Metadata i HTML

HTTP handler jo om hypermedia: Du mottar et dokument som har lenker til andre dokumenter. Men visste du at det er mulig å lenke til andre dokumenter uten å putte lenkene inni dokumenter?

HTTP deler jo responsen i data og metadata, nemlig i selve dokumentet og headers (“hoder”?). Header’ene beskriver selve dokumentet sett utenifra; f.eks. Last-Modified forteller når dokumentet sist ble endret. Content-Length forteller hvor mange bytes det er. Cache-Control forteller deg om hvor lenge du bør anse dokumentet som gyldig. Allow forteller deg hva du kan gjøre med dokumentet. Ad kjedsommelig. Men det finnes en HTTP header som har vært med siden 1990 men som ble tatt ut av selve HTTP spec’en fordi den ikke var særlig i bruk1. Jeg snakker om Link header’en.

HTML blir jo ofte hyllet som det ultimate hypermediaformatet, på grunn av a og link taggene. Faktisk anbefaler Sam Ruby et al at man bruker HTML så langt det lar seg gjøre hvis man skal lage en RESTful web service. Skal man lage en to-do-liste web service så burde man returnere application/xhtml med head og body og en HTML-liste for hver to-do-liste…

Men å si at dette andre dokumentet er en i en rekke av dokumenter (next/previous), eller at atom feeden til dokumentet er her: Det er jo metadata! Jeg ønsker ikke å måtte forkludre dokumentet mitt. Hva om jeg returnerer et dokument som ikke har rom for lenker? Putt dem i HTTP header’ene istedenfor i HTML header’en:

Link: <http://my/other/reference.txt>; rel="alternate"; type="text/plain"
Link: <http://mypage/me>; rev="made"; title="John Doe"

Mark Nottingham har forsøkt å beskrive Link headeren i en egen Internet Draft2, og diskusjonen fortsetter hos w3c3. Om man bruker Link header’en istedenfor lenker inni dokumentet så trenger ikke klienten forstå dokumentet. Om jeg serverer et WORD dokument eller en PDF så har de vidt forskjellig metamodeller; Jeg kunne hente ut forfatter, men da må jeg ha en WORD parser eller en PDF parser. Om de lå i header’en ville jobben min som klient være betydelig lettere, om jobben består i å finne dokumenter av en viss forfatter.

Personlig anser jeg at metadata hører hjemme i HTTP header’en, og ikke i dokumentet. Metadata i dokumentet er jo plutselig data. At HTTP og HTML begge støtter både data og metadata er litt kunstig, og speiler kanskje det faktum at webben stammer fra fil-servere som ikke hadde noen særlig rik meta-modell. Både Last-Modified, Content-Length og Allow støttes jo av ethvert filsystem, og HTML fikk jo tilogmed meta http-equiv tags som skulle erstatte HTTP headers. Det er jo helt sykt! Tiden er kanskje moden for å putte metadata der det hører hjemme, nemlig i HTTP!

1 Link Header esw.w3.org

2 Mark Nottinghams Draft

3 Diskusjon om temaet

Kommentarer

Personlig anser jeg at metadata hører hjemme i HTTP header’en, og ikke i dokumentet.

En grunn til å binde metadata sammen med data er at de dermed flyttes rundt sammen. Metadata-standarder som EXIF/IPTC og ID3 er embeddet i dokumentene, og det passer bra. Metadataen hører til et dokument og kan per definisjon ikke puttes på et annet dokument, så det er naturlig at de pakkes sammen med det til tilhører.

Jeg foretrekker at HTTP tar seg av protokollen, og at resten er forbeholdt dokument og applikasjon. Last-Modified og slike uttrykker noe om ressursene HTTP håndterer, og behøver ikke nødvendigvis være noe knyttet til menneskelig aktivitet, slik som redigersflyten til dokumenter. HTTP har dokument-orienterte (men lite brukte) headere som Content-Language, og jeg mener disse passer best i dokumentet.

I et litt bredere perspektiv skulle jeg selv ønske at verden kunne samle seg rundt ett metadatabegrep og implementere dette som en transparent del av operativsystemene. Så kunne alle filer bære rundt på metadata på samme måte, og vi kunne bruke HTTP til å la metadata flyte rundt. Om programmer og folk lærte å håndtere disse som

Det siste poenget ditt om at verden skulle samle seg og implementere metadatahåndtering som en del av OS’et viser jo kanskje at du mener at de egentlig ikke hører hjemme i dokumentet :-)

(Jeg vet ikke hvor siste del av kommentaren min ble av.)

Annonse