Dilib, module Explor, création d'un nouveau flux
Module Explor |
Cette page décrit les étapes à suivre pour insérer un nouveau flux de données dans un espace de curation et d'exploration.
Sommaire
Application test
La création préalable d'un jeu test permet de mettre en place une série de liens et de procéder à un premier ensemble de nomenclatures :
- déterminer un wiki de référence (exemple Wicri/Lorraine)
- donner un nom à l'application et créer une page d'introduction (exemple : wicri-lor.fr:Serveur d'exploration sur Ligier Richier
- donner un identificateur intégrant un nom de version, exemple LigierRichierV1
- sur la machine de développement : ranger le jeu de données initial sous un répertoire du type
LigierRichierV1/Import
Création des pages Dilib
Création éventuelle d'un nouveau module
Paramétrage
La création des données et procédures liées à un flux est pilotée par des tables de paramétrage. En général, trois tables sont concernées. Si NewStream est le nom du module il faut alors créer les pages :
- Dilib, module NewStream, Explor data
- Dilib, module NewStream, Explor en
- Dilib, module NewStream, Explor fr
Programmes de génération
Cette section donne quelques squelettes pour initialiser la génération d'un flux.
ExplorDataShells
Ce premier squelette permet de mettre en place les programmes de génération pour une serveur d'exploration ou pour une plateforme.
Le nom du module est codifié par Mzzzz
/* -*- coding: utf-8 -*- */
/***********************************************************************
Module : Mzzzz
Commande : MzzzzExplorDataShells
Fichier : MzzzzExplorDataShells.c
Auteur : ????
Date : ????
************************************************************************/
#include <stdio.h> /* for printf */
#include <stdlib.h> /* for exit */
#include "Explor.h"
extern char *optarg;
extern int optind;
int getopt();
SxmlNode *ExplorStepNode;
SxmlNode *ExplorStreamListSteps;
void generMzzzzShellCorpusBiblio()
{
SxmlNode *listSxmlImportFile;
char *strListSxmlImportFile;
SxmlNode *fileNode;
printf("<?dilib file=\"%s/bin/%sCorpusBiblio.sh\" ?>\n", ExplorAreaDir, ExplorStreamCode );
printf ("#!/bin/sh\n");
printf ("# This file is generated by Dilib / Mzzzz / MzzzzExplorDataShells \n");
printf ("echo \"---- Executing sh %s/bin/%sCorpusBiblio.sh\" \n", ExplorAreaDir, ExplorStreamCode );
ExplorGenerDeleteHfd (ExplorStreamCode, "Corpus", "biblio"); /* if update */
strListSxmlImportFile=ExplorGetFromDictK3("Area", ExplorStreamCode, "Corpus/importFile");
if (!strListSxmlImportFile)
{
fprintf(stderr, "parameter * Area/%s/Corpus/importFile * is missing\n", ExplorStreamCode);
exit(EXIT_FAILURE);
}
listSxmlImportFile=SxmlFromString(strListSxmlImportFile);
printf (" (\n");
SxmlReset (listSxmlImportFile);
while ((fileNode=SxmlNextNode(listSxmlImportFile)))
{
printf ("cat %s/Import/%s \n", ExplorAreaDir, SxmlLeafText(fileNode));
}
printf (" ) | MzzzzToTei \\\n");
printf (" | TeiPutRefToIdno -t wicri:Area/%s/Corpus \\\n", ExplorStreamCode );
printf (" | HfdBuild -h %s/Data/%s/Corpus/biblio\n\n",ExplorAreaDir, ExplorStreamCode);
printf (" echo \"==== \" %s, step Corpus, biblio done\n", ExplorStreamCode);
printf (" HfdCat %s/Data/%s/Corpus/biblio.hfd | wc \n", ExplorAreaDir, ExplorStreamCode);
printf("<?dilib appendFile=\"%s/bin/area.mk\" ?>\n", ExplorAreaDir );
printf("# This part is generated by Dilib / Mzzzz / MzzzzExplorDataShells \n");
printf("%s/Make/%s/Corpus/biblio: ", ExplorAreaDir, ExplorStreamCode);
SxmlReset (listSxmlImportFile);
while ((fileNode=SxmlNextNode(listSxmlImportFile)))
{
printf (" \\\n");
printf (" %s/Import/%s \n", ExplorAreaDir, SxmlLeafText(fileNode));
}
printf("\n\tsh %s/bin/%sCorpusBiblio.sh \n", ExplorAreaDir, ExplorStreamCode );
printf("\ttouch %s/Make/%s/Corpus/biblio\n\n", ExplorAreaDir, ExplorStreamCode);
}
void generMzzzzShellCurationBiblio()
{
SxmlNode *previousStep;
char *codePrevious;
printf("<?dilib file=\"%s/bin/%sCurationBiblio.sh\" ?>\n", ExplorAreaDir, ExplorStreamCode );
printf ("#!/bin/sh\n");
printf ("# This shell has been generated by MzzzzExplorDataShells \n");
printf ("echo \"---- Executing sh %s/bin/%sCurationBiblio.sh\" \n", ExplorAreaDir, ExplorStreamCode );
ExplorGenerDeleteHfd(ExplorStreamCode, "Curation", "biblio");
previousStep=SxmlPreviousSibling(ExplorStepNode);
codePrevious=SxmlLeafText(previousStep);
printf (" HfdCat %s/Data/%s/%s/biblio.hfd \\\n", ExplorAreaDir, ExplorStreamCode, codePrevious);
printf (" | SgmlFast -c 1 \\\n");
printf (" | TeiPutRefToIdno -t wicri:Area/%s/Curation \\\n", ExplorStreamCode );
ExplorGenerBuildBiblio(ExplorStreamCode, "Curation");
printf("<?dilib appendFile=\"%s/bin/area.mk\" ?>\n", ExplorAreaDir );
printf("# This part is generated by MzzzzExplorDataShells / generNlmMedlineShellCurationBiblio() \n");
printf("%s/Make/%s/Curation/biblio: \\\n", ExplorAreaDir, ExplorStreamCode);
printf(" %s/Make/%s/%s.step \n", ExplorAreaDir, ExplorStreamCode, codePrevious);
printf("\tsh %s/bin/%sCurationBiblio.sh \n", ExplorAreaDir, ExplorStreamCode );
printf("\ttouch %s/Make/%s/Curation/biblio\n\n", ExplorAreaDir, ExplorStreamCode);
}
void generMzzzzShellCheckExplBiblio(char *step)
{
printf("<?dilib file=\"%s/bin/%s%sBiblio.sh\" ?>\n", ExplorAreaDir, ExplorStreamCode, step );
printf ("#!/bin/sh\n");
printf ("# This file is generated by Dilib / Mzzzz / MzzzzExplorDataShells / generMzzzzShellCheckExplBiblio \n");
printf ("echo \"---- Executing sh %s/bin/%s%sBiblio.sh\" \n", ExplorAreaDir, ExplorStreamCode, step );
ExplorGenerDeleteHfd(ExplorStreamCode, step, "biblio");
printf (" HfdCat %s/Data/%s/Curation/biblio.hfd \\\n", ExplorAreaDir, ExplorStreamCode);
/* printf (" | SgmlFast -c 1 \\\n"); */
ExplorExplorationCommonOperations(ExplorStreamCode, step, 0);
ExplorGenerBuildBiblio(ExplorStreamCode, step);
printf("<?dilib appendFile=\"%s/bin/area.mk\" ?>\n", ExplorAreaDir );
printf("# This part is generated by MzzzzExplorDataShells / generMzzzzShellCheckExplBiblio \n");
printf("%s/Make/%s/%s/biblio: \\\n ", ExplorAreaDir, ExplorStreamCode, step);
printf(" %s/Make/%s/Curation.step \n", ExplorAreaDir, ExplorStreamCode);
printf("\tsh %s/bin/%s%sBiblio.sh\n", ExplorAreaDir, ExplorStreamCode, step );
printf("\ttouch %s/Make/%s/%s/biblio\n\n", ExplorAreaDir, ExplorStreamCode, step);
}
int main (int argc, char **argv)
{
int cOption;
char *pathParamFile;
pathParamFile=NULL;
ExplorStreamCode=NULL;
while((cOption=getopt(argc,argv,"s:t:"))!=EOF)
{switch (cOption)
{
case 's':
ExplorStreamCode=optarg;
break;
case 't':
pathParamFile=optarg;
break;
}
}
if ((!pathParamFile)|| (!ExplorStreamCode))
{
perror("**** Options -s stream and -t paramFile are mandatory\n");
exit (EXIT_FAILURE);
}
ExplorParamInit(pathParamFile);
ExplorStreamListSteps=SxmlFromString(ExplorGetFromDictK3("Area", ExplorStreamCode, "listSteps"));
ExplorGenerShellCreateData( ExplorStreamCode, ExplorStreamListSteps);
SxmlReset(ExplorStreamListSteps);
while ((ExplorStepNode=SxmlNextNode(ExplorStreamListSteps)))
{
char *stepCode;
stepCode=SxmlLeafText(ExplorStepNode);
if(strcmp(stepCode, "Corpus")==0)
{
ExplorGenerShellCreateStep(ExplorStreamCode , stepCode);
generMzzzzShellCorpusBiblio();
continue;
}
else if(strcmp(stepCode, "Curation")==0)
{
ExplorGenerShellCreateStep(ExplorStreamCode , stepCode);
generMzzzzShellCurationBiblio();
continue;
}
else if(strcmp(stepCode, "Checkpoint")==0)
{
ExplorGenerShellCreateStep(ExplorStreamCode , stepCode);
generMzzzzShellCheckExplBiblio(stepCode);
continue;
}
else if(strcmp(stepCode, "Exploration")==0)
{
ExplorGenerShellCreateStep(ExplorStreamCode , stepCode);
generMzzzzShellCheckExplBiblio(stepCode);
continue;
}
}
ExplorGenerAllShellsIndex(ExplorStreamCode);
exit (EXIT_SUCCESS);
}
A insérer dans le makefile (Mzzzz.mk)
$(DILIB)/bin/MzzzzExplorDataShells
$(DILIB)/bin/MzzzzExplorDataShells: $(DILIB_IMPORT)/Mzzzz/MzzzzExplorDataShells.c \
$(DILIB)/Date/StrSearch.lib \
$(DILIB)/Date/Explor.lib
$(CC) $(DILIB_IMPORT)/Mzzzz/MzzzzExplorDataShells.c -Wall -I$(DILIB)/include \
$(DILIB)/lib/libDilib.a -o $@
Conversion Tei
Exemple de squelette (avant tout reformatage effectif)
/* -*- coding: utf-8 -*- */
/*
InistExodic2Tei.c
*/
#include <stdio.h> /* for printf */
#include <stdlib.h> /* for exit */
#include <getopt.h>
#include "TeiHandler.h"
#include "Buffer.h"
#include "Utf8Converter.h"
#include "Explor.h"
SxmlNode *inputDocument;
SxmlNode *inputClone;
SxmlNode *corpusRecord;
SxmlNode *teiRoot;
main (int argc, char **argv) {
int cOption;
char *pathParamFile;
while((cOption=getopt(argc,argv,"s:t:"))!=EOF)
{switch (cOption)
{
case 's':
ExplorStreamCode=optarg;
break;
case 't':
pathParamFile=optarg;
break;
}
}
ExplorParamInit(pathParamFile);
while ((inputDocument=SxmlInputGetDocumentElement()))
{
corpusRecord=SxmlElementCreate("record");
SxmlAppendChild(corpusRecord, teiRoot=TeiHandlerNew());
inputClone=SxmlClone(inputDocument);
SxmlSetNodeName(inputClone ,strdup("exodic")); /* strdup pour SxmlFree() */
SxmlAppendChild(corpusRecord, inputClone);
SxmlPrint(corpusRecord);
putchar('\n');
SxmlFree(corpusRecord);
}
exit(0);
}