On 10/26/18 2:28 PM, Philippe Verdy wrote:

> Le jeu. 25 oct. 2018 à 16:45, Francois Gouget <fgou...@free.fr
> <mailto:fgou...@free.fr>> a écrit :
>
>     On Thu, 25 Oct 2018, Megan Parat wrote:
>     [...]
>
>     > 08:00-17:45; PH,Sa,Su 08:00-09:00 off, Mar 01-Mar Su[-1]
>     17:45-19:00,
>     > Oct 01-Oct Su[-1] 17:45-19:30, Mar Su[-1]-Apr 30,Sep
>     17:45-20:30, May
>     > 01-Aug 31 17:45-21:30
>
>     [...]
>
>     Là où la page opening_hours laisse penser que la virgule ne peut être
>     utilisée que dans les listes (d'années, de mois ou d'heures), la
>     spécification complète indique qu'on peut l'utiliser partout où on
>     peut
>     utiliser le point-virgule :
>
>     |  opening_hours = <time_domain>
>     |  <time_domain>: <rule_sequence> { <any_rule_separator>
>     <rule_sequence> }
>     |  any_rule_separator: ';' | ',' | '||'
>
>
> Pas tout à fait :
> * le point-virgule dans un attribut indique une liste non-ordonnée
> (dont les éléments peuvent être librement permutés sans changement
> d'interprétation) : c'est valable normalement pour tout attribut OSM.
> * alors que la virgule impose un ordre de priorité.
>
> De fait les éléments séparés par point-virgules doivent être
> indépendants (ne pas se recouvrir, ou bien être équivalents
> sémantiquement)
>
> Ce qui n'est pas le cas dans l'exemple ici car le premier élément de
> la liste séparée par point-virgule "08:00-17:45" couvre une bonne
> partie du second (qui indique des horaires différents pour certaines
> dates).
>
> Il ne devrait donc pas y avoir de point-virgule du tout dans ton
> exemple, où la virgule dans un liste vient ajouter des éléments
> (ajouter des plages horaires, ou en retirer avec "off")  à la liste en
> modifiant les précédents.

L'ordre a une importance en général :

La spécification explique que la syntaxe générale d'opening_hours est
une liste de sélecteurs séparés par des points-virgules. Les horaires
retenus pour une date correspondent au *dernier* sélecteur valide. (cf.
explication pour time_domain sur la page
https://wiki.openstreetmap.org/wiki/FR:opening_hours/specification)

L'intérêt de la virgule est de pouvoir écrire par exemple '08:00-18:00,
Fr 20:00-24:00'. Avec une virgule, pour le vendredi, c'est ouvert de 8h
à 18h, puis de 20h à minuit. Avec un point-virgule, c'est ouvert
seulement de 20h à minuit car la deuxième règle est valable pour ce
jour, et ainsi prend précédence. (cf. explication de
additional_rule_separator §1)

> La syntaxe utilisée ci-dessus est en fait ambiguë puisque la partie
> séparée par des virgules (une fois le point-virgule converti en
> virgule) contient les éléments suivants, qui doivent être lus dans
> l'ordre, chaque élément modifiant le calendrier:
> - au départ (liste vide), par défaut tout est fermé, tous les jours
> quelque soit l'heure
> - "08:00-17:45" : ajoute l'ouverture tous les jours à cette plage
> horaire (cela remplace la fermeture
Correct pour le moment.
> - "PH" : n'indique aucune plage horaire, donc veut dire que cela
> ajoute l'ouverture toute la journée (24/24) des jours fériés
> - "Sa" : n'indique aucune plage horaire, donc veut dire  que cela
> ajoute l'ouverture toute la journée (24/24) de tous les samedis
> (fériés ou pas)
> - "Su 08:00-09:00 off" : exclue de tout ce qui précède l'ouverture de
> 8h à 9h si c'est un dimanche (donc le dimanche reste ouvert 23h sur 24
> si c'est férié, sinon ouvert seulement de 9h à 17h45)

La virgule est aussi utilisée pour les énumérations d'années, mois,
jours de la semaines, etc... (eg. 'Mo,We,Fr 08:00-18:00'). (cf. les
définitions de weekday_sequence, monthday_selector et year_selector)

Normalement, cette règle devrait prendre précédence sur les précédentes
si elle s'applique. Ça n'a pas trop de sens car c'est fermé par défaut.
C'est pour ça que si la règle définit une fermeture, celle ci se content
de supprimer la plage horaire. Donc pour '08:00-18:00; Mo 08:00-12:00
off', c'est ouvert le Lundi de midi à 18h. (cf. l'explication de
<rule_modifier> (closed) )

C'est pour ça qu'il y a un point-virgule et non une virgule. Car le
comportement est le même et l'outil d'évaluation préfère le premier (car
il est moins complexe je suppose).

> - "Mar 01-Mar Su[-1] 17:45-19:00 : ajoute l'ouverte à cette plage
> horaire tous les jours de entre le 1er du mois de mars et le dernier
> dimanche de mars (n'a pas d'effet sur les dimanches fériée de mars,
> mais les autres dimanches non fériés de mars ont une ouverture allongée)
> - etc. (autres plages horaires ajoutées pour d'autres dates)
>
Elle s'applique pour les dimanches fériés car c'est la dernière qui
correspond et on utilise des virgules.
> Cette liste ne peut pas être librement permutée (notamment entre les
> éléments contenant des "off" et ceux qui sont "on" par défaut), mais
> peut être permutée entre deux éléments "on" s'il n'y a aucun élément
> "off" entre les deux.
>
> Et c'est le cas ici car tous les éléments sont "on" (par défaut), SAUF
> le 4e (Su 08:00-09:00) qui est "off".
>
> Hors je ne pense pas que ce soit ce que tu voulais (pas convaincu que
> tu voulais mettre des jours fériés avec une ouverture 24/24 (ou 23/24
> le dimanche). Si tu retire le 4e élément (Su 08:00-09:00 off), tous
> les autres éléments sont librement permutables puisqu'ils sont tous
> "on" par défaut : ils forment une combinaison (en "ou") de tous les
> horaires indiquer, ne peuvent pas se contredire entre eux mais peuvent
> se recouvrir mutuellement.
Il ne forment un "ou" que si on utilise des virgules.
> Si tu utilises le ";" les éléments doivent être mutuellement exclusifs
> entre les dates concernées, mais c'est encore sujet à ambiguïté (le
> point-virgule ne devrait dont pas être utilisé du tout, la virgule en
> revanche garantie et impose l'ordre d'interprétation).
>
> En général il est plus simple de concevoir les opening_hours en
> listant d'abord au début tous les éléments "on" (par défaut) dans un
> ordre quelconque pour ajouter des horaires d'ouverture, et seulement
> ensuite en listant tous les éléments "off" aux aussi dans un ordre
> quelconque pour retirer certains horaires ajoutés par la première
> liste (donc mentionner des exceptions à la première liste) : il n'y a
> alors aucun risque d'ambiguité.
>
> L'ennui de la syntaxe actuelle est qu'elle oblige à répéter
> explicitement la propriété "off" pour chacun des éléments "off" de la
> seconde liste; il aurait juste suffit d'imposer l'ordre "liste de tous
> les horaires d'ouverture", puis un mot clé "off" suivi de la liste des
> exceptions où des horaires sont fermés). On aurait eu une syntaxe
> allégé (plus d'obligation de répéter "off", plus facile à interpréter,
> et jamais ambiguë
>
> Mais dans l'état actuel il faut éviter d'avoir une alternance de "on"
> à "off", puis à nouveau à "on".
Pour faire simple, la spécification n’interprète pas les valeurs de
cette manière.


> plus besoin de virgule (encore moins le "|" inutile)

J'ai pas très envie d'expliquer. C'est détaillé dans l'explication de
fallback_rule_separator. Si on parle bien du "||"

Megan.

_______________________________________________
Talk-fr mailing list
Talk-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-fr

Répondre à