Work In Progress
Le module freedom-1NF fournit un service 1) d'administration.
Le paramétrage du module permet de spécifier une base de travail postgreSQL (adresse, user, etc ou service) accessible en lecture / écriture. Par défaut, elle est positionnée sur le serveur Dynacase-platform.
L'interface d'administration du service spécifie une production par :
Il est possible de spécifier plusieurs productions.
L'intégration de Dynacase-platform avec des outils de reporting (BI) passe par l'exportation de la base Dynacase-platform dans un modèle relationnel dit de 'première forme normale ou 1NF' ou en étoile.
Ce document spécifie le mécanisme d'export et le format d'export de la base Dynacase-platform exportée.
Famille Enclos exemple :
| Attribut | Type | Parent |
|---|---|---|
| Identification | frame | |
| Surface | int | Identification |
| Capacité | int | Identification |
| Espèces compatibles | array | Identification |
| Espèce | docid(“ESPECE”) | Espèces compatibles |
| Qualite | enum | Identification |
| Responsable | docid(“USER”) | Identification |
| Contenu | frame | |
| Animaux | array | Contenu |
| Animal | docid(“ANIMAL”) | Animaux |
| Gardien | docid(“USER”) | Animaux |
Le script WSH fdl_export1nf contient des paramètres permettant de piloter son comportement :
| Paramètre | Optionnel | Défaut | Description |
|---|---|---|---|
| –config | N | fichier XML de configuration des familles à exporter | |
| –outputtype | Y | sql | type du format d'export : sql ou pgservice |
| –outputname | Y | <STDOUT> | nom du fichier de sortie ou du pgservice |
| –tmppgservice | Y | tmp_1nf | nom du pg service temporaire qui sert pour le travail d'export |
| –tmpschemaname | Y | 1nf | nom du schema postgres temporaire de travail |
| –tmpemptydb | Y | yes | vide ou pas la base temporaire avant de travailler |
| –sqllog | Y | loggue les requêtes sql de travail dans le fichier indiqué |
Bien sûr le script doit être exécuté dans le contexte de dynacase-control.
Premièrement, le fichier de config XML : il doit être correctement formatté, cela va de soi.
Deuxièmement, le PG Service temporaire de travail doit être créé avec sa base associée :
$ sudo vi /etc/postgresql-common/pg_service.conf
Ajouter le service suivant (personnalisez vos dbname, password et nom de service si besoin)
[tmp_1nf] host=localhost port=5432 user=freedomowner password=password dbname=tmp_1nf
Connectez vous à postgres :
$ sudo -u postgres psql
Créez la base :
=# CREATE DATABASE tmp_1nf OWNER freedomowner;
Redémarrez Postgresql :
$ sudo /etc/init.d/postgresql-8.4 restart
L'exécution du WSH doit se faire dans le contexte de dynacase-control :
$ sudo /var/www/dynacase-control/wiff context "MON_CONTEXTE" exec /bin/bash --login
Enfin, le lancement du script :
$ ./wsh.php --api=fdl_export1nf
Lancement de la commande :
$ ./wsh.php --api=fdl_export1nf --config=MY_CONFIG.xml --outputname=OUTPUT_FILE.sql
Exemple de fichier d'export simple:
<?xml version="1.0"?> <database> <table family="ZOO_ANIMAL" > <column attribute="an_nom" /> <column attribute="an_enfant" /> <column attribute="an_mere" /> <column attribute="an_pere" /> <column attribute="an_espece" /> <column attribute="an_classe" /> <column attribute="an_sexe" /> </table> <table family="ZOO_ESPECE" > <column attribute="es_identification" /> <column attribute="es_caracteristique" /> </table> </database>
L'export va créer le schéma suivant :
Vous remarquerez que les “frames” sont étendues automatiquement en leur attributs correspondants.
L'array an_enfant_t est détecté à travers l'attribut an_enfant et la table correspondante est créée.
Cette notion est réalisée à l'aide du paramètre d'export tmpemptydb.
La technique consiste à faire un premier export “normal” avec tmpemptydb=yes (valeur par défaut) et un nom de schéma pour l'export qui correspond à un fichier de config donné, par exemple '1nf_export1'.
Vous procédez dans la foulée avec un deuxième fichier de config et un deuxième schéma par exemple '1nf_export2' mais cette fois en précisant tmpemptydb=no.
En procédant ainsi vous faites plusieurs exports successifs de la même base Dynacase-platform avec des lots de familles différents à exporter en optimisant votre temps d'export car vous ne refaites pas le dump complet à chaque export.
<database> <table family="ENCLOS"> <column attribute="EN_SURFACE"/> <column attribute="EN_T_ANIMAUX"/> <column attribute="EN_GARDIEN"/> </table> <table family="ANIMAL"> <column attribute="AN_ESPECE" name="species"/> <column attribute="AN_CLASSE"/> <column attribute="AN_CLASSE:CLA_LATIN"/> </table> </database>
Un attribut de type “docid” implique la création d'une table contenant l'id et le “title”.
Si cet attribut précise la famille docid(“ANIMAL”) alors il sera relié à la table “animal”. Cette table animal peut être précisé dans une autre balise table.
Pour les attributs de type tableau une table spécifique est créée pour cet attribut. Les clefs étrangères seront indiquées dans la base générée.
Pour les attributs “énuméré” simple, une table spécifique est créée.
Pour les attributs “multivalué”, une table spécifique est créée avec une colonne (clef étrangère) pointant vers le document.
Si l'attribut est un cadre ou un tab l'ensemble de attributs le composant seront ajoutés. Le cadre ou le tab n'a pas d'existence dans la schéma résultat. Les noms des colonnes sont les id des attributs, elles peuvent être renommées si l'attribut name est précisé.
Le résultat de l'exportation de données se fait dans un base de donnée PostgreSQL. A partir de cette base il sera possible d'exporter les données pour les importer dans une autre base de données telle que mysql. Le but de cette exportation est de retourner un ensemble de données relatives à une famille de document. Cette famille sera la base de la table pivot d'un schéma en étoile qui sera exploitable par un outils de reporting.
L'exportation sera effectué par un programme wsh qui aura en paramètre un fichier de configuration xml qui indiquera la famille pivot ainsi que l'ensemble des propriétés et attributs à importer. Les attributs “single value” sont récupérés tels que et mis dans une colonne dédiée de la table pivot. Les attributs énumérés sont des clefs externes d'une table qui contient l'ensemble des attributs énumérés. Le nom de cette table est le nom de l'attribut énuméré. Cette table à comme colonnes (id:text, label:text, free:text). Si l'énuméré est de type “free” (possibilité d'ajouter une clef arbitraire), les clefs arbitraires seront ajoutée à cette table avec la colonne free à vrai Les attributs relations sont des clefs externes d'une table qui contient l'ensemble des documents liés par cette famille. Le nom de cette table est le nom de l'attribut relation. Cette table à comme colonnes par défaut (id:int,title:text,fromid:int). fromid est une clef externe vers la table families qui contient l'ensemble des familles (id:int, title:text).