Na stupni otevřenosti 3 by měly mít distribuce datových sad přiřazeno datové schéma, které popisuje požadovanou syntaktickou strukturu distribucí. Pro vyjádření datového schématu je nutno zvolit vhodný jazyk pro jeho vyjádření. Jazyk závisí na datovém formátu, který byl zvolen pro vyjádření distribuce.
Při návrhu datových schémat dodržujte následující pravidla:
Při práci s formátem CSV se nejprve seznamte s nejčastějšími chybami při použití formátu CSV.
Pro řadu datových sad formát CSV není vhodný a je lepší je publikovat v některém ze strukturovanějších formátů, viz Otevřené formální normy.
Prvním krokem k tvorbě schematu pro CSV data je určení toho, jak se budou jmenovat jednotlivé sloupce CSV souboru, jaké budou mít datové typy a jaký budou mít význam. Pro dosažení maximální míry interoperability postupujte v následujících krocích:
_
_
, např. pokutovaný_ič
, pokutovaný_název
Jako jazyk pro definici schématu pro data v CSV použijte standard Metadata Vocabulary for Tabular Data z rodiny standardů W3C CSV on the Web (CSVW). Standard říká, jak má být CSV soubor publikovaný na webu popsán pomocí přídavného JSON-LD souboru, který je publikován spolu s CSV souborem.
Použití CSVW schématu si ilustrujeme na zjednodušeném příkladu pro následující dvousloupcové CSV:
"idhod","hodnota" "747627675","14.91" "747628556","14.96"
Jednoduchý CSVW deskriptor (JSON soubor) pro tento CSV soubor může vypadat například takto:
{ "@context": ["http://www.w3.org/ns/csvw",{"@language": "cs"}], "url": "012052-17data091517.csv", "tableSchema": { "columns": [{ "name": "idhod", "titles": "idhod", "dc:description":"unikátní identifikátor údaje Veřejné databáze ČSÚ", "required": true, "datatype": "string" }, { "name": "hodnota", "titles": "hodnota", "dc:description":"zjištěná hodnota", "required": true, "datatype": "number" }], "primaryKey": "idhod" } }
Jednotlivé položky v JSON deskriptoru mají následující význam:
@context
musí obsahovat minimálně URL http://www.w3.org/ns/csvw
, v tomto případě obsahuje ještě specifikaci češtiny jakožto výchozího jazyka textových položek schématu.url
musí obsahovat (relativní či absolutní) URL popisovaného CSV souboru. Každý CSV soubor má tedy vlastní JSON deskriptor.tableSchema
musí obsahovat buďto URL jiného JSONu se samotným schématem, což je použitelné pro sdílení jednoho schématu více CSV soubory a jejich JSON deskriptory, nebo přímo schéma samotné.columns
obsahuje pole s popisky jednotlivých sloupcůprimaryKey
obsahuje identifikaci primárního klíče v CSV tabulce. To může být buďto jeden sloupec, nebo pole sloupců.name
specifikuje *identifikátor* sloupce v CSV souboru jakožto objektu. Nejedná se o název sloupce v souboru, ten je popsán dále jako jedna z jeho vlastností. Musí to být validní část URI, případná diakritika zde tak musí být zakódovaná pomocí procentového kódování.titles
obsahuje jeden či více (jako pole) názvů sloupců v CSV. Lze tedy použít jedno schéma pro více CSV souborů, které mají dokonce různé názvy sloupců, případně v hlavičce používají různé jazyky.dc:description
obsahuje textový popis významu sloupce.required
specifikuje, zda je hodnota v tomto sloupci povinná či nikolivdatatype
lze použít hodnoty založené na datových typech XML Schema.
Vystavený JSON deskriptor dle CSVW by pak měl být poskytován s HTTP hlavičkou Content-Type: application/csvm+json; charset=utf-8
a pojmenován podle popisovaného souboru, tedy pro xxx.csv
to bude xxx.csv-metadata.json
.
Toto je jen minimalistický příklad toho, co lze popsat pomocí CSVW. Pro využití všech možností je třeba postupovat dle specifikace.
Deskriptor CSV souboru lze oddělit od schématu, pokud schéma chceme použít pro více CSV souborů.
Pak budeme mít JSON soubor schema.json
se schématem samotným:
{ "@context": ["http://www.w3.org/ns/csvw",{"@language": "cs"}], "columns": [{ "name": "idhod", "titles": "idhod", "dc:description":"unikátní identifikátor údaje Veřejné databáze ČSÚ", "required": true, "datatype": "string" }, { "name": "hodnota", "titles": "hodnota", "dc:description":"zjištěná hodnota", "required": true, "datatype": "number" }], "primaryKey": "idhod" }
A deskriptor každého CSV souboru se na něj bude odkazovat (nejspíše však pomocí plného, absolutního URL):
{ "@context": ["http://www.w3.org/ns/csvw",{"@language": "cs"}], "url": "012052-17data091517.csv", "tableSchema": "schema.json" }
CSV popsané pomocí CSVW lze nejjednodušeji validovat nástrojem csvw-validator. Ten má jednak sdílené webové rozhraní, a také lze spustit z příkazové řádky nebo použít jako webovou službu.
CSV popsané pomocí CSVW lze validovat například pomocí nástroje rdf-tabular, který stačí nasměrovat na CSV soubor, a v případě nedodržení doporučeného pojmenování JSON deskriptoru i na tento deskriptor.
Tedy rdf validate xxx.csv
CSV popsané pomocí CSVW lze validovat například pomocí knihovny csvlint.rb, kterou stačí spustit a nasměrovat na JSON deskriptor, který pak ukazuje na CSV data, případně schéma. Tedy csvlint -s schema.json
pro lokální schéma v souboru v souborovém systému, nebo s plným URL deskriptoru, např. csvlint -s https://data.mvcr.gov.cz/soubory/czechpoint/2007.json
.
Webové rozhraní csvlint doporučení CSV on the Web neumí!
Pro popis XML schématu se používá jazyk XML Schema.
Prvním krokem k tvorbě schematu pro XML data je určení toho, jak se budou jmenovat a jak budou zanořeny jednotlivé elementy v XML souboru, jaké budou mít datové typy a jaký budou mít význam. Pro dosažení maximální míry interoperability postupujte v následujících krocích:
_