Comprendre les attributs de liste
Les listes permettent à un attribut d'avoir plus d'une valeur. L'exemple suivant illustre le concept des attributs de liste et la raison pour laquelle vous pouvez les utiliser.
Considérons un service SIG d'une commune ayant une Géodatabase Esri avec des points adresses et un fichier CSV contenant toutes les espèces d'arbres dans une ville et leur emplacement.
Le technicien SIG de la société utilise DatabaseJoiner pour connecter les enregistrements CSV aux données spatiales dans une relation simple de 1 à 1. Le processus fonctionne bien jusqu'à ce que l'on découvre qu'une adresse particulière possède plusieurs enregistrements pour plusieurs espèces d'arbres. Par exemple :
100 Dunsmuir St Redspire Pear
100 Dunsmuir St Chanticleer Pear
100 Dunsmuir St Flowering Cherry
Comment le Transformer DatabaseJoiner doit-il traiter une seule entité spatiale avec trois valeurs d'attribut ? Par défaut, il créé 3 types d'entités en sortie, mais ce n'est pas ce qui est attendu.
Une méthode consiste en concaténer toutes les espèces d'arbre dans un unique attribut, par exemple :
100 Dunsmuir St Redspire Poire, Chanticleer Poire, Flowering cerise
Mais il est difficile de travailler avec un tel attribut. Par exemple, un Transformer Tester appliquant le test
Espèces d'arbres=Poire Redspire ne retournera par l'adresse ci-dessous même si elle contient bien ce type d'arbre.
Une autre méthode consiste à créer un attribut pour chaque espèce. Par exemple :
Numéro de parcelle | Arbre espèce 1 | Arbre espèce 2 | Arbre espèce 3 |
---|---|---|---|
100 Dunsmuir St | Poire Redspire | Chanticleer Pear | Flowering Cherry |
Mais cette méthode n'est pas vraiment meilleure. De nombreux Transformers peuvent travailler avec plusieurs attributs, mais il n'y a pas toujours le même nombre d'attributs. Il serait extrêmement difficile de concevoir un traitement capable de gérer un nombre inconnu d'attributs !
FME règle ce problème en activant dans DatabaseJoiner le paramètre de génération de liste qui permet d'associer à un unique attribut plusieurs valeurs, qui seront par la suite traitables par des Transformers spécialisés dans la gestion de ce type de structure de données.
Dans FME Workbench, un attribut de liste est indiqué par une paire d'accolades.
Après les accolades se trouve un point (".") suivi du nom de l'attribut.
Ce Transformer montre une liste nommée "_trees" et plusieurs attributs de liste tels que "Species", "Diameter", "Height"....
Chaque attribut d'une liste contient un ensemble de valeurs (éléments). Pour obtenir ces valeurs et les utiliser dans un traitement, il faut les "exposer" comme des attributs ordinaires.
Pour exposer des éléments, cliquez avec le bouton droit de la souris sur l'attribut de la liste et sélectionnez Exposer les élements. Dans la boîte de dialogue Sélectionner les éléments de la liste, indiquez les éléments de la liste à exposer. Ici, les trois premiers éléments de la liste seront exposés. (Notez que l'élément 0 est utilisé pour signifier le premier élément de la liste).
Lorsque des éléments d'une liste sont exposés, ils sont ajoutés au Transformer en tant qu'attributs. Le nom de l'attribut exposé est le même que le nom de l'attribut de la liste, sauf que la position de cet élément dans la liste est ajoutée comme un nombre entre accolades.
Dans cet exemple, trois éléments pour les attributs Espèce, Hauteur et Diamètre ont été exposés ; par conséquent, neuf attributs supplémentaires sont maintenant disponibles dans le traitement. Les attributs (et leurs valeurs de l'exemple précédent) sont les suivants :
Valeur de l'attribut
_trees{0}.Species Redspire Pear
_trees{0}.Height 2
_trees{0}.Diameter 3
_trees{1}.Species Chanticleer Pear
_trees{1}.Height 3
_trees{1}.Diameter 2
_trees{2}.Species Flowering Cherry
_trees{2}.Height 9
_trees{2}.Diameter 3