FR:Séparateur de valeur point-virgule
On peut utiliser un séparateur de valeur point-virgule (le caractère ';') dans nos valeurs d'attributs dans certaines situations. Cela peut être nécessaire lorsqu'un seul élément doit prendre plusieurs valeurs pour un même attribut.
Il est important de savoir que seules quelques applications spécialisées gèrent les valeurs séparées par des points-virgules, et uniquement pour quelques attributs. La plupart des outils OSM, les rendus de carte, taginfo et XAPI ne gèrent pas ces valeurs. Quelques-uns ne tiennent compte que de la première partie de la concaténation, mais la plupart considèrent la chaîne entière comme une seule valeur. L'entrée est donc supprimée des résultats de la recherche et de la sortie des outils comme inconnue et elle n'est jamais restituée sur les cartes.
Exemples d'utilisation
- ref=B500;B550 pour un tronçon de route désigné à la fois par B500 et B550. Vous ne devriez faire cela que si la même section de route prend les deux valeurs de référence. Remarque : s'il y a un point sur cette section de route où vous passez d'une référence à l'autre, alors cette approche n'est pas correcte. Au lieu de cela, vous devriez placer un nœud et diviser le chemin à cet endroit.
- Certaines balises "propriétés" plus mineures se prêtent à la prise de plusieurs valeurs. Par exemple, lorsque vous cartographiez un magasin de voitures, vous pouvez ajouter un tag : service=dealer;tyres;repair comme décrit sur la page Tag:shop=car.
- Les valeurs complexes qui ne peuvent évidemment pas être représentées à l'aide de sous-clés (notamment lorsqu'il s'agit de listes d'éléments non ordonnées) peuvent utiliser des points-virgules : opening_hours=Tu-Fr 08:00-18:00;Mo 09:00-18:00;Sa 09:00-12:00;closed Aug
Quand NE PAS utiliser
En général, évitez les valeurs séparées par ';' chaque fois que c'est possible. Ne les utilisez pas dans votre cartographie, et ne les proposez pas sur le wiki s'il y a de meilleures façons de représenter les choses. En effet, l’utilisation de points-virgules comme séparateurs de valeurs est contraire à l’objectif de simplicité, à la fois pour les contributeurs de données (mappeurs) et pour les utilisateurs de données. Pour les nouveaux contributeurs et ceux qui essaient d'utiliser les données (ceux qui créent des logiciels de rendu, de recherche, des applications mobiles "trouver mon café le plus proche", etc.), nous devrions minimiser l'utilisation de valeurs comportant des caractères spéciaux.
Il est particulièrement important d'éviter (dans la mesure du possible) les valeurs séparées par ';' dans des balises plus importantes "de premier niveau". C'est-à-dire des balises qui définissent ce qu'est un élément. Dans les situations où vous avez plusieurs valeurs, il existe normalement deux approches alternatives :
- Choisir l'une des valeurs Prendre la valeur "primaire" primordiale, et continuer ainsi. Exemple : vous cartographiez quelque chose qui est à la fois un café et un bar. Il est beaucoup plus utile de simplement choisir amenity=cafe ou amenity=bar (observez le café/bar et faites votre choix. S'agit-il avant tout d'un café ou d'un bar ?) Ce n'est pas une bonne idée de cartographier amenity=cafe;bar.
- Diviser l'élément Séparez les objets en éléments distincts pour leur permettre d'être étiquetés séparément avec des attributs normaux. Exemple : vous cartographiez une bibliothèque dans laquelle se trouve un café. Placez un nœud pour le café, puis représentez la bibliothèque (un bâtiment plus grand) sous forme de zone ou simplement sous forme de nœud distinct. Ce n’est pas une bonne idée de le cartographier comme amenity=library;cafe
Dans les deux exemples, si vous utilisez ';' dans la valeur amenity, alors cela ne va pas apparaître dans une application mobile "trouver mon café le plus proche" de sitôt. Même s'il est tout à fait possible pour les systèmes d'analyser la valeur et de la scinder par le caractère ';', la plupart des systèmes existants ne le font pas.
Détails de la syntaxe
Séparation avec des caractères espace
Nous utilisons souvent des valeurs séparées par des points-virgules sans espacement supplémentaire (exemple : ref=B500;B550), il est toutefois possible d’ajouter un espace après chaque ';' caractères (exemple : ref=B500; B550). Cela est particulièrement vrai lors du marquage des heures d'ouverture. C'est actuellement une incohérence entre JOSM et Potlatch (les deux versions) dans leur approche de la séparation automatique des valeurs.
S'échapper avec ';;'
S'il existe un point-virgule dans la valeur réelle des mappeurs de données, saisissez-le sous la forme de deux points-virgules consécutifs ';;'. C'est une approche de "caractère d'échappement" utilisée dans la programmation informatique et les formats de données. Comme cette situation ne se produit quasiment jamais, elle n’est en réalité mentionnée ici qu’à titre de curiosité. Très peu d'outils utilisant les données OpenStreetMap comprendront cela.
Anciens séparateurs
Avant un consensus communautaire sur l'utilisation du point-virgule ';' plusieurs autres caractères ont été suggérés pour séparer les valeurs. Ceux-ci incluent: "/" (slash), " " (espace), "-" (trait d'union) et "#" (dièse). Le point-virgule est maintenant largement accepté en tant que caractère à utiliser et est pris en charge par Potlatch et JOSM. Les anciennes valeurs peuvent maintenant être remplacées.
Support logiciel
Éditeurs
- Potlatch 1, et Potlatch 2 associent toutes les valeurs de balises avec des points-virgules lors de la fusion de chemins ayant des balises avec les mêmes clés. Dans la plupart des cas, cela crée un marquage non valide qui doit être remplacé par une seule valeur valide.
- iD dans certains cas, vous empêche de fusionner deux éléments avec des valeurs différentes pour une clé (par exemple, pour highways) et pour d'autres une fusion utilisant un point-virgule (par exemple : leisure=park et leisure=water_park). Toutefois, lors de l'ajout d'un attribut avec une clé existante dans un autre attribut préexistant du même élément, iD ajoute un autre attribut avec une clé différente, créée en ajoutant
_1
,_2
, etc. à la clé d'origine. - JOSM ne le fait que si l'utilisateur choisit explicitement de conserver "toutes" les valeurs des balises dans l'invite.
Moteurs de rendu
- Mapbox Streets remplace
;
avec un tiret espacé (—
) dans tout attribut name=* ou name:*=*. Pour les clés primaires telles que amenity=* ou shop=*, il retient uniquement la partie jusqu'au premier point-virgule et supprime le reste. - MapQuest Open interprète ref=* en plaçant chaque valeur délimitée par des points-virgules dans un champ séparé.
- OSM Carto interprète le point-virgule en ref=* pour les routes en plaçant chaque valeur sur une ligne distincte.
Alternatives
Si vous proposez un nouveau schéma qui semble nécessiter des valeurs divisées par des points-virgules, envisagez de le convertir en plusieurs attributs avec des valeurs yes/no.
Attributs simples "yes/no"
La plupart des "propriétés" ou "attributs" des éléments sont décrits avec une clé simple, sans espace de nom :
- lit=yes/no - pour préciser si une rue ou un parking est éclairé la nuit, lit=yes/no est ajouté
- oneway=yes/no - pour spécifier si une voie est à sens unique, un oneway=yes/no est ajouté à highway=*
- drive_through=yes/no - spécifie si par exemple une banque ou un restaurant offre un service au volant
Attribut espace de nom
Il peut être utile d’utiliser un espace de nom si la propriété ou l’attribut doit être spécifiquement associé à un seul élément. Toutefois, cela n’est pas toujours nécessaire.
Par exemple, un schéma hypothétique permettant de décrire les livres et les articles proposés par une bibliothèque pourrait être exprimé comme suit :
- amenity=library
- library:stock=books;newspapers;recorded_music
Mais il est probablement préférable de réécrire le schéma pour exprimer les concepts de la manière suivante :
- amenity=library
- library:stock:books=yes
- library:stock:newspapers=yes
- library:stock:recorded_music=yes
payment=* et fuel=* sont de bons exemples de cette seconde approche. Les attributs à valeur booléenne telles que celles-ci peuvent être complétées ultérieurement par des valeurs supplémentaires si nécessaire, voire par des sous espaces-de-noms significatifs.