bkil, On We, 26. Dez. 2018 at 20:05 bkil <bkil.hu...@gmail.com> wrote in thread "[Tagging] Feature Proposal - RFC - Top up": > Stefan, I think most of us here do not fully understand your hard arguments, > but if you could please elaborate a bit more or give some more examples, > maybe we could better address your concerns. > Anyway, this question sounds a bit orthogonal to the proposal at hand. Could > anyone please link to a previous discussion with arguments in this topic? I'm > absolutely sure
Thanks for asking. I'm opening a new thread here. I'm also sure and I know that somebody took the time to write up a matrix of pro's and con's of the options, but can't remember for now. > Getting back to the proposal at hand, how would you map this place? > > top_up:phone:Vodafone=yes > top_up:phone:Telekom=yes > top_up:phone:Telenor=yes > top_up:phone:Blue_mobile=no > top_up:transport=yes > > Which one would cut it instead in your opinion? > top_up:phone=Vodafone;Telekom;Telenor > top_up:transport=yes I can't follow what "transport" means here, but yes: the latter would be one alternative. This misuse of prefixes is called "over-namespacing" [1]. Read the fifth sentence in the intro [1] and let me summarize the troubles of over-namespacing: 1. it is bad to tag/key reuse and 2. it disseminates the data scheme. Given the bad example of "service:bicycle:*" the value "retail" in "service:bicycle:retail=yes" may be potentially used also in other shops. A proper scheme would be "service=*" (or at least "bicycle_service=*"), having key "service" and values "retail,repair,second_hand;...". I know that semicolons are not easy to process, but: Putting values in keys in the form "subkey:value1=yes/no; subkey:value2=yes/no" instead of "subkey=value1;value2" is worse: it's detrimental to any data management from capturing to analysis. So, I tend to call this "prefix-fooling". It's really turning processing of key-values (or key-value pairs KVP, entity-attribute-values EAV, dictionnaries, associative arrays, map collections, Hash stores/hstores) ad absurdum. In addition to the troubles of over-namespacing mentioned above there are following consequences of prefix-fooling - among others (sticking at the example "service:bicycle:retail=yes;service:bicycle:repair=yes;"): * Existing code to validate and cleanup values is in vain: One can't check with usual functions if a value is in range "retail,repair,second_hand". * Existing code to match is in vain too: Prefix-fooled keys pretend to have mixed cases (which they should'nt). * Worse, users still extend "yes/no" values to arbitrary values (which again makes processing unnecessarily complicated). * Even worse, users are encouraged to invent new sparsely used keys (which we can't prevent, but it's less harmful in the values). * Source code is flooded by boolean expressions (which would else be a single function) and need to be predefined in the code (instead of being put in values). * Values in namespaces/prefixes/suffixes are hard or impossible to search, match, count or group in computer languages, including SQL. This list is incomplete but let me exemplify the points above in specific example [2] where's currently p.ex. "service:bicycle:Mobiler_Servive=yes": Here someone at least has written "yes" correctly, but he 1. used a mix of upper case and "_", 2. typed "Servive" wrongly and 3. invented some german key (which would be OK to me if the user would have invented "service=Mobile"). As a consequence OSM Wiki tends to be flooded by Wiki-Key pages (one "service:bicycle:retail", one for "service:bicycle:second_hand", etc.), one can't search for partial key names (like "service") in Wiki, Editor Presets [3] or Overpass (regex "*service*" is an error in Overpass), etc... To conclude: I consider values in namespaces/prefixes/suffixes harmful and I hope this thread helps to avoid and correct over-namespacing and prefix-fooling. :Stefan [1] https://wiki.openstreetmap.org/wiki/Namespace [2] https://www.openstreetmap.org/node/4672943370 [3] https://2018.stateofthemap.org/2018/T061-An_excursion_in_to_the_world_of_OSM_tagging_presets/ Am Mi., 26. Dez. 2018 um 20:05 Uhr schrieb bkil <bkil.hu...@gmail.com>: > > Stefan, I think most of us here do not fully understand your hard arguments, > but if you could please elaborate a bit more or give some more examples, > maybe we could better address your concerns. Anyway, this question sounds a > bit orthogonal to the proposal at hand. Could anyone please link to a > previous discussion with arguments in this topic? I'm absolutely sure that it > comes up annually around here, but I'm newbie here, so I can't tell from the > top of my head. > > On our local list, this argument usually comes up in the other way around: I > usually want to endorse a way to use as much semicolons as possible to ease > the work of mappers, while everyone else lists counter arguments that boolean > alternatives are the upcoming norm. > > The socket key grew up from power_supply, check how they use that in taginfo. > Consider the following example: > socket:cee_17_blue=2 > socket:cee_7_3=yes > > It indicates that we have 2 sockets of the first, and they also have some of > the second kind, but we don't know how many. Perhaps it came from an import, > from memory, or there was simply not enough time to count them all. How else > would you tag this? > > Getting back to the proposal at hand, how would you map this place? > > top_up:phone:Vodafone=yes > top_up:phone:Telekom=yes > top_up:phone:Telenor=yes > top_up:phone:Blue_mobile=no > top_up:transport=yes > > Which one would cut it instead in your opinion? > top_up:phone=Vodafone;Telekom;Telenor > top_up:transport=yes > > Or this one: > top_up=phone:Vodafone;phone:Telekom;phone:Telenor;transport > > Or try to translate this example: > top_up:phone=yes > top_up:transport=yes > > Would it correspond to this? > top_up=phone:transport > > Given proper presets & UI, a mapper simply ticks some boxes and be done with > it - no typing needed. And anyway, I use the contact:* schema extensively and > I do not feel that to slow me down - it's just a matter of learning to touch > type or using proper autocompletion. > > From a performance perspective, if one has a Telenor card and wants to top > up, geolocating a place is as simple as looking up top_up:phone:Telenor=yes > in the granular case using a DB index/map (key-value based bigdata storage > also shines here). If we crammed everything into the same top_up or > top_up:phone field, we would need regexp lookups that are much less > efficient. Although, if this was the only drawback, we would have the option > to build an intermediate shadow database from the master OSM just for the > purpose of efficient lookups (basically normalizing to the same form as seen > above). > > Actually the best solution would be to combine the advantages of both. It > would not be really difficult to come up with an editor in which you could > enter top_up:phone=Telenor,Vodafone,Telekom and it would automatically expand > to the above form on pressing enter (including the missing entries defaulting > to *=no!). Namespacing has the added benefit of sorting the keys > alphabetically putting them nearby (the same advantage for contact:*=*), > although an interface could choose to compress these as they wish. > > Full disclosure: up to now, I was happy to use semicolons in cuisine=*, as I > don't expect people to do lookups for these and there's sometimes a dozen of > them, but this does cause sleepless night. Fortunately, editors support > checkboxes for this field in this scheme. > > On Wed, Dec 26, 2018 at 6:03 PM Stefan Keller <sfkel...@gmail.com> wrote: >> >> Am Mi., 26. Dez. 2018 um 16:47 Uhr schrieb Martin Koppenhoefer >> <dieterdre...@gmail.com>: >> > For practical reason, I would expect a scheme >> > characteristic_I_need_to_know=yes/no >> > >> > much easier to evaluate than one like: >> > some_services=foo;characteristic_I_need_to_know;bar >> >> No it's not easier. The following >> some_services_foo=yes/no >> some_services_characteristic_I_need_to_know=yes/no >> some_services_bar=yes/no >> >> is three times more to read and write for humans, as compared to >> some_services=foo;characteristic_I_need_to_know;bar >> >> and - again: >> >> The form "detail:value:sub_value(:...)=?" >> (1.) breaks fundamental(!) assumptions in OSM (assuming tags as a key >> and value(s)). >> And (2) it breaks programming principles (requiring a attribute-name >> having value(s)). >> >> So it's obvious why the Wiki and taginfo and you name it can't cope >> with it. I'm sorry, but it's hard to be more clear and explicit than >> that. >> >> And I hope for OSM that it's not becoming common - even given there >> are other bad examples like recycling or service:bicycle [1]. >> >> :Stefan >> >> P.S. Note that it's the fact that there are alternatives especially to >> the boolean yes/no/unkown case and that tagging schemes like "socket" >> [2] is acceptable since it's still about a value in the key=value >> pair. >> >> [1] https://taginfo.openstreetmap.org/search?q=service%3Abicycle >> [2] https://wiki.openstreetmap.org/wiki/Key:socket >> >> Am Mi., 26. Dez. 2018 um 16:47 Uhr schrieb Martin Koppenhoefer >> <dieterdre...@gmail.com>: >> > >> > >> > >> > sent from a phone >> > >> > > On 26. Dec 2018, at 15:08, Stefan Keller <sfkel...@gmail.com> wrote: >> > > >> > > Tag-proposals in the form >> > > <tag_attr_name>:<type_value->[:<subtype_value>]=yes/no should be >> > > avoided. It's shifting values to attribute names! >> > >> > >> > it’s not a value, it‘s a property ;-) >> > it depends on your interpretation, e.g. motorroad=yes >> > oneway=yes >> > >> > aren’t these values and we should tag them >> > road_restrictions=motorroad;oneway? >> > >> > >> > top_up:phone=yes >> > means: provides phone top up. >> > For practical reason, I would expect a scheme >> > characteristic_I_need_to_know=yes/no >> > >> > much easier to evaluate than one like: >> > some_services=foo;characteristic_I_need_to_know;bar >> > >> > >> > Cheers, Martin >> > _______________________________________________ >> > Tagging mailing list >> > Tagging@openstreetmap.org >> > https://lists.openstreetmap.org/listinfo/tagging >> >> _______________________________________________ >> Tagging mailing list >> Tagging@openstreetmap.org >> https://lists.openstreetmap.org/listinfo/tagging > > _______________________________________________ > Tagging mailing list > Tagging@openstreetmap.org > https://lists.openstreetmap.org/listinfo/tagging _______________________________________________ Tagging mailing list Tagging@openstreetmap.org https://lists.openstreetmap.org/listinfo/tagging