FDU récursives
Cette rubrique explique comment rechercher des données dans le fichier XML source avec l’aide d’une FDU récursive. Pour tester la FDU récursive, vous aurez besoin du mappage suivant : MapForceExamples\RecursiveDirectoryFilter.mfd. Dans le mappage ci-dessous, la FDU FilterDirectory reçoit des données depuis le fichier source Directory.xml et le composant d’entrée simple SearchFor qui fournit l’extension .xml. Une fois que les données ont été traitées par la FDU, elles sont mappées vers le fichier cible.
Le mappage principal (voir la capture d'écran ci-dessous) décrit la mise en page du mappage général. La manière dont la FDU traite les données est définie séparément dans le mappage de fonction (voir l’implémentation FDU ci-dessous).
Objectifs
Notre objectif est de recenser des fichiers avec une extension .xml dans la sortie tout en préservant toute la structure du répertoire. Les sous-sections ci-dessous expliquent le processus de mappage en détail.
Fichier source
Ci-dessous, vous trouverez un extrait du fichier XML source (Directory.xml) qui contient des informations de fichiers et répertoires. Notez que les fichiers dans la liste ont différentes extensions (par ex., .xml, .dtd, .sps). Conformément au schéma (Directory.xsd), l’élément directory peut avoir des enfants fichier et des enfants répertoire. Tous les éléments directory sont récursifs.
<directory name="ExampleSite">
<file name="blocks.sps" size="7473"/>
<file name="blocks.xml" size="670"/>
<file name="block_file.xml" size="992"/>
<file name="block_schema.xml" size="1170"/>
<file name="contact.xml" size="453"/>
<file name="dictionaries.xml" size="206"/>
<file name="examplesite.dtd" size="230"/>
<file name="examplesite.spp" size="1270"/>
<file name="examplesite.sps" size="20968"/>
...
<directory name="output">
<file name="examplesite1.css" size="3174"/>
<directory name="images">
<file name="blank.gif" size="88"/>
<file name="block_file.gif" size="13179"/>
<file name="block_schema.gif" size="9211"/>
<file name="nav_file.gif" size="60868"/>
<file name="nav_schema.gif" size="6002"/>
</directory>
</directory>
</directory>
Implémentation FDU
Pour voir l’implémentation interne de la FDU, double-cliquez sur son en-tête dans le mappage principal. La FDU est récursive, c'est-à-dire qu'elle contient un appel vers elle-même. Étant donné qu'elle est connectée à l'élément récursif directory, cette fonction sera appelée autant de fois qu'il existe des éléments directory imbriqués dans l'instance XML de source. Pour prendre en charge des appels récursifs, la fonction doit être regular.
L’implémentation de la FDU est constituée de deux parties : (i) définir les fichiers et (ii) définir le répertoire à rechercher.
Définir des fichiers
La FDU traite les fichiers comme suit : La fonction contains vérifie si le premier string (le nom de fichier) contient le sous-string .xml (fourni par le composant d’entrée simple SearchFor). Si la fonction retourne true, le nom de fichier avec une extension .xml est écrite dans la sortie.
Traiter des répertoires enfant
Les répertoires enfant du répertoire actuel sont envoyés comme entrée dans la FDU actuelle. La FDU itère donc à travers tous les éléments du directory et vérifie si les fichiers avec l’extension .xml existent.
Sortie
Lorsque vous cliquez sur le volet Sortie, MapForce affichera uniquement des fichiers avec l’extension .xml (voir l’extrait ci-dessous).
<directory name="ExampleSite">
<file name="blocks.xml" size="670"/>
<file name="block_file.xml" size="992"/>
<file name="block_schema.xml" size="1170"/>
<file name="contact.xml" size="453"/>
...
<directory name="output">
<directory name="images"/>
</directory>
</directory>