URL: https://linuxfr.org/users/epeios/journaux/dpkq-un-piocheur-de-donnees
Title: dpkq, un piocheur de données.
Authors: Claude SIMON
Date: 2015年07月01日T10:21:13+02:00
License: CC By-SA
Tags: xml, xsl, epeios, c++ et base_de_données
Score: 14
Dans le cadre de la mise à jour des utilitaires que j'ai développés, après vous avoir présenté [xppq](http://linuxfr.org/users/epeios/journaux/xppq-ou-une-autre-approche-de-la-gestion-des-arguments-de-la-ligne-de-commande) et [tmcq](http://linuxfr.org/users/epeios/journaux/tmcq-un-convertisseur-de-timecodes), voici maintenant [dpkq](http://q37.info/computing/epeios/tools/dpkq/).
`dpkq` est un piocheur de données basé sur le *framework* *Epeios*. Il pioche au hasard une fiche dans une table stockée dans un fichier XML, et l'écrit dans un autre fichier XML, en l'associant à un fichier XSL de manière à pouvoir l'afficher dans un navigateur Web avec une mise en forme HTML.
Cette description étant loin d'être d'une limpidité exemplaire (désolé, mais je n'en ai pas trouvé de meilleure...), je vais tenter de l'éclaircir en vous détaillant, à titre d’exemple, l'usage pour lequel j'ai développé cet utilitaire.
Étant musicien, je suis naturellement amené à travailler des partitions (musicales, hein, pas celles de mes disques durs). Pour faciliter l'organisation de mes sessions de travail, j'ai écrit un ensemble de fichiers XML contenant les tables suivantes :
- *Composers* : contient les fiches relatives aux compositeurs,
- *Instrumentations* : il se trouve que je joue, et du piano, et de l'orgue ; contient donc des fiches permettant d'affecter une instrumentation à une œuvre musicale donnée,
- *Collections* : certaines œuvres sont regroupées sous forme de recueils ; les fiches de cette table font référence à une fiche *instrumentation* et généralement à une fiche *composer*,
- *Pieces* : les œuvres proprement dites ; les fiches font référence, soit à une fiche *collection*, soit à une fiche *composer* et une fiche *instrumentation*,
- *Movements* : certaines pièces sont décomposées en mouvements ; les fiches font référence à une fiche *piece*,
- *Voices* : pour le œuvres pour piano à 4 mains (pour distinguer la voix *primo* et la voix *secundo*) ; les fiches font référence, soit à une fiche *piece*, soit à une fiche *movement*,
- *Elements* : contient les fiches sur les partition proprement dites ; les fiches font référence, soit à une fiche *piece*, soit à une fiche *movement*, soit à une fiche *voice*,
- *Segments* : chaque fiche fait référence à un fiche *element*, en lui adjoignant une mesure de début, ainsi qu'une mesure de fin.
La notion de *faire référence à une fiche* est apparentée à la notion de relationnel d'une base de données relationnelle.
Les segments sont en fait répartis dans trois tables différentes. Une table contient les segments des partitions que je suis en train de déchiffrer, une autre ceux sur lesquels, après avoir été déchiffrés, je travaille la musicalité, et une troisième les segments des partitions travaillées que je rejoue régulièrement pour éviter de les oublier. J'ai installé `dpkq` sur une tablette, et, lors d'une session de travail, je le lance sur l'un des groupes de segments, et `dpkq` me génère alors un fichier XML qui est affiché dans un navigateur Web sous forme de page HTML. Celle-ci contient toutes les informations sur un segment tiré au hasard parmi tous les segments de la table concernée, notamment les mesures du segment, ainsi que les images des pages de la partition contenant ces mesures.
Bien sûr, `dpkq` peut être utilisé dans un tout autre contexte et avec des données de toute autre nature...
Un jeu complet et fonctionnel de fichiers de test, ainsi que des détails sur le fonctionnement de `dpkq`, sont présents sur la page dédiée : [http://q37.info/computing/epeios/tools/dpkq/](http://q37.info/computing/epeios/tools/dpkq/) (en).
Voici le contenu de quelques-uns de ces fichiers (les directives préfixées par `dpk:` sont les directives traitées par `dpkq`, les directives préfixées par `xpp:` sont des directives destinées au [préprocesseur XML](http://q37.info/computing/epeios/tools/xppq/) (en) :
La table *Composers* (`composers_.xml`) :
```xml