Dilib, module Explor, création d'un nouveau flux

De Wicri Outils
LogoDilib.gif
Panneau travaux.png
Bibliothèque Dilib (ressources numériques)
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.

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);
}