3.5.3 • Published 1 year ago

@istex/li-2mods v3.5.3

Weekly downloads
-
License
CECILL-2.1
Repository
-
Last release
1 year ago

li-2mods

Présentation

Le module li-2mods a pour but de transformer les notices XML des métadonnées éditeur en notices MODS (format pivot).

Fonctionnement

Les traitements sont réalisés via une fonction doTheJob :

  • qui récupère en entrée un docObject sous forme JSON, ainsi qu'une callback.
  • qui produit des notices MODS dans le répertoire fourni dans le JSON d'entrée corpusOutput.
  • Les éventuelles erreurs sont renvoyées en paramètre de la callback.

Utilisation

Installation

Dépendances système :

  • xsltproc
  • NodeJS 4.0.0+

Installer les modules nécessaires :

npm install

Vérification du fonctionnement

Commande d'exécution des tests unitaires :

npm test

Exécution

Comme pour tous les modules, la présente partie métier n'est pas destinée à être exécutée directement, puisqu'elle consiste uniquement à mettre à disposition une fonction doTheJob. L'exécution se fera donc en appelant cette fonction depuis une instanciation de li-canvas ou indirectement depuis les tests unitaires.

Clés du docObject nécessaires à la bonne exécution

Ces clés sont obtenues durant li-carto et li-carto :

  • corpusResources
  • corpusOutput
  • metadata (tableau d'objets JSON)
    • path (un par fichier de métadonnées)

Exemple de docObject accepté en entrée

Ce docObject peut être obtenu en sortie de li-xml-val : Normalement tous les objets qui ont passés li-xml-val possèdent des XML bien-formés et valides.

{
  "idIstex": "0123456789012345678901234567890123456789",
  "corpusName": "nature",
  "cartoType": "nature",
  "corpusRoot": "/path/to/corpus/root",
  "corpusOutput": "/path/to/corpus/output",
  "corpusResources": "/path/to/corpus-resources",
  "metadata": [
    {
      "valFile": "path/to/dtd",
      "path": "/path/to/original/xml",
      "xmlWellFormed": true,
      "mime": "application/xml",
      "xmlValid": true,
      "original": true
    }
  ],
  ...
}

Exemple de docObject en sortie

Il s'agît du docObject ci-dessus complété. Remarquez en fin de JSON l'ajout d'une entrée metadata étiquetée original = false

{
  "idIstex": "0123456789012345678901234567890123456789",
  "corpusName": "nature",
  "cartoType": "nature",
  "corpusRoot": "/path/to/corpus/root",
  "corpusOutput": "/path/to/corpus/output",
  "corpusResources": "/path/to/corpus-resources",
  "metadata": [
    {
      "valFile": "path/to/dtd",
      "path": "/path/to/original/xml",
      "xmlWellFormed": true,
      "mime": "application/xml",
      "xmlValid": true,
      "original": true
    },
    {
      "path": "/path/to/mods",
      "mime": "application/mods+xml",
      "original": true
    }
  ],
  ...
}

Exemple de docObject rejeté

Remarquez en fin de JSON l'ajout de errCode et errMessage

{
  "idIstex": "0123456789012345678901234567890123456789",
  "corpusName": "nature",
  "cartoType": "nature",
  "corpusRoot": "/path/to/corpus/root",
  "corpusOutput": "/path/to/corpus/output",
  "corpusResources": "/path/to/corpus-resources",
  "metadata": [
    {
      "valFile": "path/to/inexistant/dtd",
      "path": "/path/to/original/xml",
      "xmlWellFormed": true,
      "mime": "application/xml",
      "xmlValid": true,
      "original": true
    }
  ],
  "errCode": "XslTransformationError",
  "errMessage": "Could not generate MODS from /path/to/original/xml",
  ...
}

Annexes

Arborescence

.
├── node_modules/                   // Modules NPM
│   └── ...
├── src/
│   └── clean-nature.sh             // Script pour préparer les données de l'éditeur Nature avant la transformation
├── test/                           // Fichiers nécessaires aux tests unitaires
│   ├── dataset/                    // Répertoire contenant des données de test
│   │   └── corpus/
│   ├── dependencies.js             // Tests de dépendances système
│   ├── run.js                      // Point d'entrée des tests unitaires
│   └── testSet.js                  // Liste de docObjects pris en entrée des test unitaires
├── .editorconfig                   // Configuration de l'éditeur pour l'indentation (entre autres)
├── .eslintrc.json                  // Configuration pour eslint
├── .gitignore
├── index.js                        // Point d'entrée, contenant la fonction doTheJob
├── Licence.fr.txt                  // Licence CeCILL en Français
├── License.en.txt                  // Licence CeCILL en Anglais
├── package-lock.json
├── package.json                    // Description du module pour NPM
└── README.md
3.5.3

1 year ago