Pl:Średnik rozdzielający wartości

From OpenStreetMap Wiki
Jump to navigation Jump to search

Średnik rozdzielający wartości (';')

używamy, w niektórych sytuacjach, jako część wartości tagów. Może to być konieczne, gdy pojedynczy element musi zawierać wiele wartości tego samego tagu.

Przykłady

nat_ref=B500;B550 w przypadku odcinka drogi, który jest opisany zarówno B500 jak i B550. Można to zrobić tylko wtedy, gdy ten sam odcinek drogi posiada obie wartości Ref (Miejsca, gdzie władze wprowadziły bałagan w ich systemie numeracji, lub gdzie dwie drogi łączą się w jedną, bez wybierania któregokolwiek numeru. Jest to dość rzadko, choć pozornie zaskakująco powszechne na amerykańskich skrzyżowaniach!).
Uwaga: Jeśli jest jakiś punkt na tym odcinku drogi, gdzie można przejść z jednego na drugi ref, to nie jest prawidłowe podejście. Zamiast tego można umieścić węzeł i podzielić drogę w tym miejscu.

Kilka drobnych tagów "właściwości" nadają się do zawierania wielu wartości. Na przykład, gdy mapujemy sklep samochodowy, możemy użyć tagu: service=dealer;tyres;repair. Jeśli jest to coś więcej niż tylko rzadka możliwość, to można się spodziewać, że w opisie tagu będą przykłady ilustrujący to podejście, jak na stronie tagu Tag:shop=car.

Ważne jest, aby wiedzieć, że tylko kilka wyspecjalizowanych aplikacji uznaje średnik rozdzielający wartości i tylko w kilku tagach.
Większość OSM narzędzi, aplikacji odwzorowania map, TagInfo i XAPI nie obsługuje tych wartości. Kilka z nich wybierze tylko pierwszą część konkatenacji, ale większość z nich uzna cały ciąg jako jedną wartość, więc wpis zostanie usunięty z wyników wyszukiwania jako nieznany i nigdy nie zostanie odwzorowany na mapach.

Kiedy NIE należy stosować średnika jako separatora wartości

Tak w ogóle należy uniknąć, w miarę możliwości, ';' rozdzielanych wartości. Nie używaj ich w mapowaniu i nie proponuj ich na Wiki, jeśli istnieją lepsze sposoby reprezentowania. Dlaczego? ...

Cała idea przyklejania średników do wartości tagów jest bardzo sprzeczna z celem jakim ma być ich prostota. Tagi mają być łatwe do zrozumienia dla mapujących: Łatwe dla nowych mapujących, aby wiedzieli, jak z nich korzystać. Łatwe dla ludzi do czytania i szybkiego wpisania podczas mapowania. Łatwe dla ludzi, podczas wpisania ich na mobilnych, dotykowych ekranach.

Tagi powinno być również banalnie proste dla użytkowników danych do pracy nad nimi. W rzeczywistości nie jest to przypadek. Jest wiele aspektów, które czynią OpenStreetMap tagowanie bardzo trudne dla użytkowników danych. Średnik jako separator wartości będzie jednym z nich. W trosce o każdego, kto próbuje użytkowania danych (osób budujących oprogramowanie do renderowania, wyszukiwania, "znajdź najbliższą kawiarnię" aplikacji mobilnych, etc) należy zminimalizować wykorzystanie znaków specjalnych jako wartości.

Szczególnie ważne jest, aby (tam, gdzie jest to możliwe) unikać ';' do oddzielania wartości w ważniejszych "najwyższego poziomu" tagach. Oznacza to, znaczniki które określają, jaki to jest element. W sytuacji, gdy masz wiele wartości, zazwyczaj, jest kilka alternatywnych rozwiązań:

  • Wybierz jedną z wartości Bierzemy "podstawową" wartość nadrzędną, i używamy jej.

Przykład: Mapujemy coś co jest kawiarnią, ale także barem. Jest o wiele bardziej pomocne wybranie amenity=cafe lub amenity=bar (przyjrzyjmy się kawiarni/barowi, i dokonajmy wyboru. Czy jest to przede wszystkim kawiarnia, lub przede wszystkim bar.? ) Nie jest dobrym pomysłem aby oznaczyć jako amenity=cafe;bar.

  • Podziel element Rozdzielamy na oddzielne węzły/linie, aby umożliwić niezależne oznaczanie z normalnymi tagami. Jest to dobre rozwiązanie gdy elementy znajdują się w różnych miejscach przestrzennych.

Przykład: Mapujemy bibliotekę, która ma kawiarnię wewnątrz niej. Umieszczamy węzeł kawiarni, następnie przedstawiamy bibliotekę (większy budynek) jako obszar, lub jako oddzielny węzeł innego punktu reprezentującego bibliotekę. Nie' jest dobrym pomysłem oznaczyć jako amenity=library;cafe.

W obu przypadkach, jeśli używamy ';' jako oddzielenie wartości w tagu "amenity", w najbliższym czasie, nie będzie możliwe odwzorowane w aplikacjach mobilnych typu "Znajdź moją najbliższą kawiarnię". Mimo że dla systemów jest całkowicie możliwa analizy wartości i rozdzielanie ich przez znak ';', większość istniejących systemów nie zrobi tego, a większość systemów prawdopodobnie nigdy nie będzie.

Dziwactwa i niespójności

Inne separatory?

Trwają dyskusje na temat różnych aspektów separatorów wartości znacznika, ale jesteśmy mniej lub bardziej zgodni, że jako separator najbardziej pasuje średnik ';'. Możemy zauważyć użycie innych znaków do oddzielenia wartości. W przeszłości ludzie sugerowali, na przykład: "/" (ukośnik), " " (spacja), "-" (myślnik) lub "#" (krzyżyk). Obecnie średnik jest powszechnie akceptowany jako znak do wykorzystania, i jest dostępny w Potlatch i JOSM (te edytory automatycznie umieszczą znaki ';', gdy będziemy łączyć elementy)

Spacja przed wartością

Powinno być ...

service=dealer;tyres;repair

czy

service=dealer; tyres; repair ?

W wielu opisach tagów pokazany jest średnik oddzielający wartości bez dodatkowego odstępu, jednak jest bardzo powszechne dodawanie spacji po każdym znaku ';'. Obecnie jest niezgodność pomiędzy JOSM a Potlatch (obie wersje), w podejściu do automatycznego rozdzielania wartości.

Znak modyfikacji z ';;'

Sugerowano, że jeśli, w rzeczywistej wartości odwzorowującej dane, występuje średnik, należy wprowadzić go jako dwa kolejne średniki ';;'. To jest podejście ze "znakiem modyfikacji" stosowane w programowaniu komputerowym i formatach danych. Wynika z tego, że ludzie rozwijający systemy analizowania, powinni uwzględnić ';;'. W praktyce sytuacja ta nie jest nigdy stosowana i praktycznie jest obsługiwana przez zero systemów analizowania.

Lepsze alternatywy

Patrząc wyżej, co zrobić jeśli mapujemy coś: każde z proponowanych podejść, prawie zawsze robi lepsze mapy niż podawanie wartości wraz z średnikiem.

Jeśli proponujemy nowy schemat, w którym, wydaje się, będzie potrzebne oddzielanie wartości średnikami, należy rozważyć przekształcenie go w przestrzeń nazw z Boolean wartościami i użyciem wiele tagów. Na przykład hipotetyczny schemat opisujący rodzaje książek i przedmiotów, które oferuje biblioteka publiczna, może być wyrażony jako:

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

Ale chyba lepiej przepisać schemat, aby wyrazić pomysł jako:

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

Tagi payment=* i fuel=* są dobrymi przykładami tego drugiego podejścia. Tagi Boolean-valued, takie jak te, mogą być rozszerzone później o dodatkowe wartości, w razie potrzeby.

Zobacz też