Colonnes dynamiques

www.altova.com Imprimer cette rubrique Page précédente Un niveau supérieur Page suivante

Accueil >  Objets/fonctions du design > Tables >

Colonnes dynamiques

Dans le cadre d'une ligne de table, si une colonne se répète, ces répétitions peuvent être affichées par le biais de la fonction de colonnes dynamiques. La colonne est associée avec un élément répétitif d'une source de page. Lorsque la table est rendue, le nombre de colonnes correspondra dynamiquement au nombre d'occurrences de l'élément associé.

 

Les colonnes dynamiques peuvent se produire dans deux types de contextes de colonnes :

 

Lignes statiques, colonnes dynamiques : dans cette situation, la table croît horizontalement et non verticalement (comparer la table ci-dessous avec la table contenant des lignes dynamiques). Dans ce cas, la première colonne sert d'« en-tête » ; elle contient les noms des lignes. (Une colonne de début peut être ajoutée lorsque la table est créée mais puisque la colonne est statique, elle peut aussi être créée ultérieurement).

 

<Person>

<Person>

<Person>

<First>

 

 

 

<Last>

 

 

 

<Phone>

 

 

 

Lignes dynamiques, colonnes dynamiques: la table peut croître aussi bien verticalement (lignes supplémentaires) qu'horizontalement (colonnes supplémentaires). Pour créer ce type de table, le nombre d'occurrences d'élément de colonne dans la source de page doit être le même pour toutes les lignes. Par exemple, dans la table ci-dessous, chacun des quatre éléments week (chacun correspondant à une ligne dans la table) contient exactement trois éléments day (les colonnes de la table). Si un des éléments week contient un autre nombre d'éléments day que trois, la table ne pourra pas être tracée correctement. Veuillez noter que, généralement : (i) les éléments de colonne se produisent dans les éléments de ligne, aussi bien dans la source de page que dans le design de table ; (ii) les noms des éléments de ligne sont les mêmes et les noms des éléments de colonne sont les mêmes. Néanmoins, aucun de ces deux points n'est une condition nécessaire pour créer ce type de table dynamique : (i) les éléments de colonne peuvent se produire en dehors des éléments de ligne, et (ii) les noms des lignes/colonnes peuvent être différents.

 

<day>

<day>

<day>

<week>

 

 

 

<week>

 

 

 

<week>

 

 

 

<week>

 

 

 

 

Note :Un flux de données peut être généré depuis une expression XPath/XQuery et peut être utilisé en tant que source de données. Néanmoins, ce type de données est créé pour l'utilisation actuelle uniquement et n'est pas accessible en tant que source de page pour être utilisé à un autre endroit du document.

 

Exemple : colonnes dynamiques pour les jours dans les lignes dynamiques concernant les semaines

La capture d'écran ci-dessous affiche un élément calendar qui contient quatre éléments week, avec chacun un élément week contenant sept éléments day. Nous pouvons faire une table contenant des lignes dynamiques pour les éléments week et les colonnes dynamiques (à l'intérieur de chaque élément week) pour les éléments de day. Veuillez noter que dans la structure des données (i) les éléments day se trouvent à l'intérieur des week éléments, et (ii) le nombre des éléments day à l'intérieur de chaque élément week est le même : sept.

MTDTablesDynamicColsEx01

 

Créer des colonnes dynamiques dans des lignes dynamiques

Glisser une commande de table dans le design et la déposer à l'endroit que vous souhaitez pour la créer. Dans le dialogue Nouvelle table (capture d'écran ci-dessous), sélectionner les options pour les lignes dynamiques et les colonnes dynamiques. Sélectionner le nombre de lignes et de colonnes qui doivent être répétées pour chaque occurrence de l'élément, qui, respectivement, correspond à la ligne et à la colonne. Les colonnes de début et de fin correspondent aux lignes En-tête/Pied de page. Veuillez noter que vous pouvez ajouter des commandes Ajouter/Supprimer pour les lignes dynamiques mais pas pour les colonnes dynamiques.

Click to expand/collapse

La table sera créée dans le design. La capture d'écran ci-dessous montre le design terminé d'une table avec des lignes et des colonnes dynamiques. Veuillez noter les points suivants :

 

Les champs représentant les lignes et les colonnes dynamiques de la table sont indiqués par des icônes qui montrent, respectivement, une ligne et une colonne.
Ces champs doivent être associés avec les nœuds de source de page qui apporteront les données pour les lignes et les colonnes de la table. L'élément associé avec la colonne doit être contenu, dans la source de page, dans le cadre de l'élément associé avec la ligne. Dans le design, néanmoins, veuillez noter que le champ de ligne est placé dans le cadre du champ de la colonne.

MTDTablesDynamicColsExDes01

Veuillez aussi noter que les expressions XPath qui sont utilisées pour associer les champs de ligne et de colonne avec des nœuds de source de page. L'expression qui sélectionne l'élément pour le champ de ligne doit sélectionner toutes les instances de l'élément correspondant. L'expression XPath dans la capture d'écran ci-dessus sélectionne tous les éléments enfant week de l'élément calendar : $XML1/calendar/week. L'expression XPath pour le champ de colonne, néanmoins, doit uniquement sélectionner un élément de colonne dans la ligne actuelle. Donc, une expression XPath comme $XML1/calendar/week/day ne fonctionnera pas parce qu'elle sélectionnerait tous les éléments enfants day de tous les éléments week. Veuillez aussi noter que le nœud contextuel XPath pour le champ de colonne est l'élément qui est associé avec la ligne. Dans notre exemple, le nœud contextuel du champ de colonne est week. En résultat, une expression XPath de day sélectionnerait les éléments enfants day de l'élément week actuel.
Dans le design, il y a une seule cellule située à l'intersection des champs de la ligne et de la colonne. Le nœud contextuel de cette cellule est l'élément correspondant au champ ligne (dans notre exemple, l'élément week). Les expressions XPath dans cette cellule doivent être construites dans le cadre de ce contexte. Lorsque la table est créée, dans chaque "élément de ligne" (l'élément week dans notre exemple), une cellule est créée pour chaque colonne. L'expression XPath est évaluée pour chaque cellule de colonne dans le contexte de la ligne actuelle. Pour atteindre les contenus de l'élément qui correspondent au champ de la colonne, une variable spéciale est disponible : $MT_TableColumnContext, qui, lors de l'exécution, contient l'élément qui correspond à la colonne actuelle (dans notre exemple, l'élément day actuel dans le cadre de l'élément actuel week). Prenons un exemple : dans la capture d'écran ci-dessus, la cellule dans le design qui se trouve à l'intersection des champs de ligne et de colonne contient une commande de libellé. Cette commande contient un texte qui a été fourni par une expression XPath : concat(@id$MT_TableColumnContext/@id). La fonction concat() concatène deux strings : l'ID de la semaine actuelle, obtenue par @id ; et l'ID du jour actuel dans le cadre de la semaine actuelle ;obtenue par $MT_TableColumnContext/@id. Étant donné que le nœud contextuel de l'ensemble de l'expression XPath est l'élément week (associé avec les lignes) @id fournit la valeur de l'attribut actuel week/@id, alors que l'expression $MT_TableColumnContext/@id va chercher le contenu de l'attribut actuel day/@id dans le cadre de l'élément actuel week.

 

La sortie du design de la table affichée dans la capture d'écran ci-dessus ressemblera à :

MTDTablesDynamicColsExSim01

Chaque élément week dans la source de page sera affiché dans une ligne (W1 à W4).
Chaque élément day contenu dans une semaine est affiché dans la colonne pertinente (D1 à D7).
La concaténation des deux IDs est exécutée séparément pour les 28 cellules de W1D1 à W4D7.

 

Pour plus d'informations concernant l'étendue des colonnes dynamiques, voir la section Fusion et couverture des lignes/colonnes.

 


© 2019 Altova GmbH