====== 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 '', 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é [[https://www.iana.org/assignments/media-types/|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ě [[špatná-praxe:komprese|implementovaná komprese]]. ===== Seznam nejpoužívanějších datových typů a odpovídajících MIME typů ===== [[https://www.iana.org/assignments/media-types/|Úplný seznam MIME typů]] spravuje [[https://www.iana.org/|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 [[https://www.w3.org/standards/techs/csv#w3c_all|CSV on the Web]] | ''application/csvm+json'' | | Schéma pro CSV dle [[https://frictionlessdata.io/specs/table-schema/|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 [[https://www.w3.org/XML/Schema|XML Schema]] | ''application/xml'' | | RDF soubor v serializaci [[https://www.w3.org/TR/turtle/|Turtle]] | ''text/turtle'' | | RDF soubor v serializaci [[https://www.w3.org/TR/trig/|TriG]] | ''application/trig'' | | RDF soubor v serializaci [[https://www.w3.org/TR/n-triples/|N-Triples]] | ''application/n-triples'' | | RDF soubor v serializaci [[https://www.w3.org/TR/n-quads/|N-Quads]] | ''text/turtle'' | | RDF soubor v serializaci [[https://www.w3.org/TR/json-ld/|JSON-LD]] | ''application/ld+json'' | | RDF soubor v serializaci [[https://www.w3.org/TR/rdf-syntax-grammar/|RDF/XML]] | ''application/rdf+xml'' | ===== Seznam nejčastějších chybně používaných MIME typů ===== 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'' | ===== Konfigurace webového serveru pro správnou indikaci MIME typů ===== Aby byl MIME typ správně indikován, je obvykle třeba korektně nastavit webový server ([[http://nginx.org/|nginx]], [[https://httpd.apache.org/|Apache]], [[https://www.iis.net/|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. ===== MIME typy a kódování ===== 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 [[http://nginx.org/en/docs/http/ngx_http_charset_module.html|použít v konfiguraci]] ''charset utf-8;'' a ujistit se, že v hodnotě ''charset-types'' je uvedeno ''text/csv''.