Cs:Oddělování hodnot středníkem

From OpenStreetMap Wiki
Jump to navigation Jump to search

V některých situacích v hodnotách značek používáme oddělování hodnot středníkem (znakem ';'). Může to být nezbytné, pokud prvek potřebuje mít více hodnot stejného klíče.

Je důležité, abyste věděli, že pouze několik specializovaných aplikací umí zacházet s hodnotami oddělenými středníkem a pouze u několika značek. Většina nástrojů OSM, vykreslovačů mapy, Taginfo a XAPI tyto hodnoty neumí zpracovat. Několik z nich vyhodnotí pouze první část spojení, ale většina z nich bude celý řetězec považovat za jednu hodnotu, takže položka bude zahozena z výsledků vyhledávání a výstupu nástrojů jako neznámá a nikdy nebude vykreslena v mapách.

Příklady použití

  • Značka ref=B500;B550 pro sekci silnice, která má obě označení B500 a B550. Tohle budete potřebovat pouze, pokud stejná sekce silnice má obě hodnoty ref=*. Poznámka: Pokud je na této sekci silnice nějaký bod, kde se mění reference z jedné na druhou, pak toto není správný postup. Namísto toho umístěte do cesty uzel a cestu v tomto místě rozdělte.
  • Některé menší značky "vlastností" se nabízí k použití více hodnot. Například, když mapujete obchod s auty, můžete přidat značku: service=dealer;tyres;repair, jak je popsáno na stránce shop=car.
  • Složité hodnoty, které evidentně nelze reprezentovat pomocí podklíčů (obzvlášť jedná-li se o neřazený seznam položek) mohou používat středník: opening_hours=Tu-Fr 08:00-18:00;Mo 09:00-18:00;Sa 09:00-12:00;closed Aug

Kdy NEPOUŽÍVAT

Obecně se vyhýbejte oddělování hodnot středníkem vždy, když je to možné. Nepoužívejte je při mapování a ani je nenavrhujte na wiki, pokud existuje lepší cesta, jak věci reprezentovat. Je to proto, že použití hodnot oddělených středníkem je proti snaze dělat věci jednoduše jako pro přispěvatele dat (mappery) tak pro uživatele dat. V zájmu nových přispěvatelů a kohokoliv, kdo se snaží data používat (lidí vytvářejících software pro vykreslování, vyhledávání, aplikací typu "najdi nejbližší kavárnu", atd.), bychom měli minimalizovat použití hodnot se speciálními znaky.

Obzvlášť důležité je (kdykoliv je to rozumně možné) se vyhnout středníkem odděleným hodnotám v důležitých značkách. Tedy značkám, které definují, co je prvek zač. V situaci, kdy máte několik hodnot, existuje několik alternativních přístupů:

  • Zvolte jednu z hodnot. Zvolte tu převládající "primární" hodnotu a tu použijte. Například: když mapujete něco, co je kavárna, ale také bar. Je mnohem vhodnější si vybrat amenity=cafe nebo amenity=bar (podívejte se na kavárnu/bar a zvolte si. Je to primárně kavárna, nebo bar?) Není dobrým nápadem to označit jako amenity=cafe;bar.
  • Rozdělte prvek. Rozdělte věci na odlišné prvky, abyste je mohli označit odděleně normálními značkami. Příklad: mapujete knihovnu, ve které je kavárna. Umístěte uzel pro kavárnu a pak zmapujte knihovny (větší budovy) jako plochu, nebo jen jako oddělený uzel. Není dobrým nápadem to značit jako amenity=library;cafe.

V obou příkladech, pokud použijete ';' v hodnotě amenity, pak v brzké době je nedokáže najít žádná mobilní aplikace typu "najdi nejbližší kavárnu". I když je samozřejmě možné, aby systémy hodnotu prošly a rozdělily ji u středníku, většina existujících systémů to prostě nedělá.

Detaily syntaxe

Vyplňování mezerou

Často používáme hodnoty oddělené středníkem bez dalších dodatečných mezer (příklad: ref=B500;B550), ovšem je možné přidávat mezeru za každý středník (příklad: ref=B500; B550). To se používá obzvlášť při značení otevírací doby opening_hours=*. Momentálně existuje inkonzistence mezi editory JOSM a Potlatch (oběma verzemi) v jejich přístupu k automatickému oddělování hodnot.

Escapování ';;'

Pokud v samotné hodnotě dat je středník, pak mappeři by ho měli zadávat jako dva po sobě jdoucí středníky ';;'. Tento postup se nazývá  escapování a používá se v počítačovém programování a datových formátech. Jelikož k tomuto téměř nikdy nedochází, zmiňujeme to zde spíše jako kuriozitu. Velmi málo nástrojů, které používají data OpenStreetMap by tomu rozumělo.

Starší oddělovače

Než se komunita shodla na oddělování středníkem ';', bylo navrhováno několik jiných znaků pro oddělování hodnot. Tyto zahrnovaly: "/" (lomítko), " " (mezeru), "-" (pomlčku) a "#" (křížek). Středník je nyní široce akceptován jako znak pro oddělování a je podporován editory Potlatch a JOSM. Starší varianty je nyní možno nahradit.


Podpora v software

Editory

  • iD(en), Potlatch 1(en) a Potlatch 2(en) při spojování cest, které mají stejné klíče, spojuje hodnoty značky dohromady a odděluje je středníkem. Což ovšem ve většině případů vede k nesprávnému značení, které je potřeba nahradit jednou, platnou hodnotou. Ovšem když se přidává značka s klíčem, který již na stejném prvku existuje, iD přidává další značku s odlišným klíčem, který je vytvořen přidáním _1, _2, atd. za původní klíč.
  • JOSM to dělá (pouze pokud(en) uživatel při dotazu explicitně zvolí, aby se uchovaly "všechny" hodnoty značky.

Vykreslování

  • Mapbox Streets nahrazuje ; pomlčkou ( — ) v jakékoliv značce name=* nebo name:*=*. U primárních klíčů jako jsou amenity=* nebo shop=* používá pouze část do prvního středníku a zbytek zahazuje.
  • MapQuest Open(en) interpretuje ref=* tak, že umisťuje každou hodnotu oddělenou středníkem na zvláštní znak.

Alternativy

Pokud navrhujete nové schéma značení, které by požadovalo, aby se hodnoty oddělovaly středníkem, pak zvažte jeho převedení na jmenné prostory s hodnotami Boolean a za použití více značek. Například hypotetické schéma popisující druhy knih a položek ve veřejné knihovně by mohlo být vyjádřeno jako:

amenity=library
library:stock=books;newspapers;recorded_music

Je pravděpodobně lepší schéma přepsat a koncept vyjádřit jako:

amenity=library
library:stock:books=yes
library:stock:newspapers=yes
library:stock:recorded_music=yes

Značky payment=* a fuel=* jsou dobrými příklady tohoto druhého přístupu. Značky s hodnotami Boolean, jako jsou tyto, mohou být později rozšířeny o další hodnoty nebo dokonce smysluplně rozšířeny o vnořené jmenné prostory.

Viz také