Chybná hlavička HTTP Content-Type

Otevřená data se vystavují na webu a jsou přístupná typicky přes protokol HTTP(S). Ten má svá pravidla, která je pro správné fungování webu nutné dodržovat. Jedno z pravidel se týká indikace toho, jaký je formát zdroje (stránky, souboru) je přenášen. Webový server tedy v odpovědi na požadavek klienta na stažení souboru posílá nejen obsah samotný, ale i metainformace, tzv. HTTP hlavičky. Ty si můžeme zobrazit pomocí standardního nástroje curl: curl -I <URL>, nebo ve vývojářské konzoli běžného webového prohlížeče. V jedné z nejdůležitějších hlaviček server klientovi sděluje, v jakém formátu jsou přenášená data. Jedná se o HTTP hlavičku Content-Type a hodnotou v této hlavičce je tzv. Media Type, nebo také MIME Type, který například pro CSV soubory je text/csv. Je-li tato hlavička nastavena špatně, může dojít k chybné interpretaci přenášených dat. Hodnota v této hlavičce by tedy měla odpovídat jak přenášenému obsahu, tak také hodnotě uvedené v metadatech distribuce datové sady. Toto se týká každého zdroje na webu, v kontextu otevřených dat tedy zejména souborů s daty, datových schémat, podmínek užití a dokumentací datových sad. Důležitou roli zde hraje taky správně implementovaná komprese.

Úplný seznam MIME typů spravuje IANA - Autorita pro přidělování čísel (identifikátorů) na Internetu.

Formát dat MIME-typ
CSV soubor text/csv
Schéma pro CSV dle CSV on the Web application/csvm+json
Schéma pro CSV dle Table Schema application/json
JSON soubor application/json
Schéma pro JSON soubor application/json
XML soubor s převážně strukturovaným obsahem application/xml
XML soubor s převážně textovým obsahem text/xml
Schéma pro XML dle XML Schema application/xml
RDF soubor v serializaci Turtle text/turtle
RDF soubor v serializaci TriG application/trig
RDF soubor v serializaci N-Triples application/n-triples
RDF soubor v serializaci N-Quads text/turtle
RDF soubor v serializaci JSON-LD application/ld+json
RDF soubor v serializaci RDF/XML application/rdf+xml

Zde uvádíme MIME typy, se kterými se nejčastěji setkáváme u chybně poskytovatných otevřených dat.

Formát dat MIME-typ
HTML stránka text/html
Text text/plain
Proud osmic (bajtů) application/octet-stream

Aby byl MIME typ správně indikován, je obvykle třeba korektně nastavit webový server (nginx, Apache, Microsoft IIS, …). Pokud jde o staticky poskytované soubory, používá se obvykle tabulka párující přípony souborů a MIME typy. Je třeba dát pozor na to, že soubory se stejnou příponou mohou odpovídat různým MIME typům. Například obecný JSON soubor má příponu .json stejně jako schéma pro CSV, MIME typy se ale liší. Je pak třeba vhodně strukturovat konfiguraci serveru, případně umístění souborů v souborovém systému serveru. Pokud se jedná o dynamicky poskytovaná data, hlavičku Content-Type nastvuje služba, která data generuje.

Otevřená data se obvykle reprezentují v textových formátech. Znaky v těchto souborech pak z pravidla používají kódování UTF-8, ale u starších XML souborů se můžeme v českém prostředí setkat s kódovaními ISO-8859-2 nebo Windows-1250. Je proto vhodné HTTP hlavičku Content-Type rozšířit o informaci indikující použité kódování, celá hlavička pak vypadá například takto: Content-Type: text/csv; charset=utf-8. Například pro webový server nginx je třeba použít v konfiguraci charset utf-8; a ujistit se, že v hodnotě charset-types je uvedeno text/csv.