<div dir="ltr">D'ailleurs à mon avis je supprimerais complètement le "off" de l'attribut "opening_hours=*" (il complique tout inutilement)<div><br><div>A la place je mettrais un autre attribut "closing_hours=*" (avec la même syntaxe, mais là aussi sans "off" ni "on") et qui n'a de sens que s'il est associé à un attribut "opening_hours=*" (à interpréter en premier, le "closing_hours=*" n'apportant que des exceptions).</div><div><br></div><div>Dans ce cas plus d’ambiguïté du tout, plus besoin de virgule (encore moins le "|" inutile), le point-virgule suffit à tout, chacune des deux listes étant écrite dans un ordre quelconque.<br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr">Le ven. 26 oct. 2018 à 14:31, Philippe Verdy <<a href="mailto:verdy_p@wanadoo.fr">verdy_p@wanadoo.fr</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Note: si tous les éléments sont "on" (il n'y a aucun "off") utiliser la virgule ou le point-virgule ne donnera aucune différence puisque l'ordre n'est alors pas significatif. C'est pour ça que le point-virgule est aussi autorisé, mais il est à éviter totalement s'il y a même un seul élément "off" (qu'on doit placer à la fin, donc toujours après une virgule).<div><br></div></div><br><div class="gmail_quote"><div dir="ltr">Le ven. 26 oct. 2018 à 14:28, Philippe Verdy <<a href="mailto:verdy_p@wanadoo.fr" target="_blank">verdy_p@wanadoo.fr</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">Le jeu. 25 oct. 2018 à 16:45, Francois Gouget <<a href="mailto:fgouget@free.fr" target="_blank">fgouget@free.fr</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Thu, 25 Oct 2018, Megan Parat wrote:<br>
[...]<br>
> En utilisant les particularités des séparateurs de règles, et un ordre<br>
> particulier, j'ai cette expression d'opening_hours qui comporte 161<br>
> caractères :<br>
> <br>
> 08:00-17:45; PH,Sa,Su 08:00-09:00 off, Mar 01-Mar Su[-1] 17:45-19:00,<br>
> Oct 01-Oct Su[-1] 17:45-19:30, Mar Su[-1]-Apr 30,Sep 17:45-20:30, May<br>
> 01-Aug 31 17:45-21:30<br>
> <br>
> Je crois qu'elle est valide.<br>
<br>
Joli !<br>
Après consultation de la "spécification complète" (dont je ne trouve le <br>
lien que dans la version anglaise du wiki), je crois aussi qu'elle est <br>
valide.<br>
<br>
Là où la page opening_hours laisse penser que la virgule ne peut être <br>
utilisée que dans les listes (d'années, de mois ou d'heures), la <br>
spécification complète indique qu'on peut l'utiliser partout où on peut <br>
utiliser le point-virgule :<br>
<br>
| opening_hours = <time_domain><br>
| <time_domain>: <rule_sequence> { <any_rule_separator> <rule_sequence> }<br>
| any_rule_separator: ';' | ',' | '||'<br></blockquote><div><br></div><div>Pas tout à fait :</div><div>* 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.</div><div>* alors que la virgule impose un ordre de priorité.</div><div><br></div><div>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)</div><div><br></div><div>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).</div><div><br></div><div>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.</div><div><br></div><div>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:</div><div>- au départ (liste vide), par défaut tout est fermé, tous les jours quelque soit l'heure</div><div>- "08:00-17:45" : ajoute l'ouverture tous les jours à cette plage horaire (cela remplace la fermeture </div><div>- "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</div><div>- "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)</div><div>- "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)</div><div>- "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)</div><div>- etc. (autres plages horaires ajoutées pour d'autres dates)</div><div><br></div><div>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.</div><div><br></div><div>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".</div><div><br></div><div>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.</div><div><br></div><div>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).</div><div><br></div><div>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é.</div><div><br></div><div>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ë</div><div><br></div><div>Mais dans l'état actuel il faut éviter d'avoir une alternance de "on" à "off", puis à nouveau à "on".</div><div><br></div></div></div>
</blockquote></div>
</blockquote></div>