[OSM-talk-fr] opening_hours contre les parcs parisiens
Philippe Verdy
verdy_p at wanadoo.fr
Ven 26 Oct 12:28:58 UTC 2018
Le jeu. 25 oct. 2018 à 16:45, Francois Gouget <fgouget at free.fr> a écrit :
> On Thu, 25 Oct 2018, Megan Parat wrote:
> [...]
> > En utilisant les particularités des séparateurs de règles, et un ordre
> > particulier, j'ai cette expression d'opening_hours qui comporte 161
> > caractères :
> >
> > 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
> >
> > Je crois qu'elle est valide.
>
> Joli !
> Après consultation de la "spécification complète" (dont je ne trouve le
> lien que dans la version anglaise du wiki), je crois aussi qu'elle est
> valide.
>
> 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.
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
- "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)
- "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)
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.
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".
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.openstreetmap.org/pipermail/talk-fr/attachments/20181026/fc692dcb/attachment.htm>
Plus d'informations sur la liste de diffusion Talk-fr