03 - Prise en compte du caractère obligatoire dans ori-oai-workflow

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Ajouter une condition sur la possibilité de passer à l'étape suivante dans le workflow se fait en modifiant le workflow en lui-même du module ori-oai-workflow.

Le workflow est la pièce maîtresse du module. Modifier un workflow, c'est modifier le fichier de configuration qui implémente en quelque sorte le diagramme d'état/transitions associé à un workflow donné.

A partir de la version 1.6

Prenons dans notre exemple la modification du workflow default_lom_easy qui se trouve dans [ORI_HOME]/src/ori-oai-workflow-svn/conf/properties/workflows/default_lom_easy. Le format utilisé ici est SupLOMFR (ce paramétrage se fait dans le fichier commons-parameters.properties comme ceci :

LOM_FORMAT=lomfr-sup

Notons que dans notre cas de figure, et pour faire plus simple, nous allons modifier directement la configuration du workflow.
Nous recommandons toutefois fortement aux exploitants de copier/coller le workflow d'origine et de créer un nouveau workflow en utilisant la documentation suivante. Ainsi, il sera plus aisé de migrer son workflow personnalisé d'une version à l'autre de ORI-OAI.

La définition du workflow est faite dans le fichier de config osworkflow [ORI_HOME]/src/ori-oai-workflow-svn/conf/properties/workflows/default_lom_easy/workflow_easy.xml.

=> C'est donc ce fichier workflow_easy.xml que l'on regarde ici.

A partir de la 1.6.0, par défaut on utilise une nouvelle condition verifySchematron.
Cette condition permet d'utiliser un Schematron pour vérifier qu'un XML contient bien les informations attendues.

<condition type="spring">
  <arg name="bean.name">verifySchematron</arg>
  <arg name="schematronFile">/properties/workflows/default_lom_easy/sch/\[LOM_FORMAT\]-ori-i18n.sch</arg>
</condition>

Les Schematron utilisent des XPATHs pour ce faire. Ici on externalise ces configurations dans [LOM_FORMAT]-ori-i18n.sch, le schematron nous permet d'être plus précis et d'expliciter d'avantage les conditions attendues. [LOM_FORMAT] prend ici la valeur que vous avez utilisée dans le fichier commons-parameters.properties.

Depuis properties/workflows/default_lom_easy/sch on modifie lomfr-sup-ori-i18n.sch de cette manière (ou lomfr-ori-i18n.sch ou lom-ori-i18n.sch suivant votre configuration) :

<?xml version="1.0" encoding="UTF-8"?>
<sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron">
  <sch:ns prefix="lom" uri="http://ltsc.ieee.org/xsd/LOM"/>
  <sch:ns prefix="lomfr" uri="http://www.lom-fr.fr/xsd/LOMFR"/>
  <sch:ns prefix="xsi" uri="http://www.w3.org/2001/XMLSchema-instance"/>

  <sch:pattern id="eltsObligatoire">
    <sch:title>lom_easy.schematron.lom-ori.test.title</sch:title>
    <sch:rule context="/lom:lom"><sch:assert test="lom:general/lom:title/lom:string[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_title</sch:assert>
      <sch:assert test="lom:general/lom:language[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_language</sch:assert>
      <sch:assert test="lom:general/lom:description/lom:string[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_description</sch:assert>
      <sch:assert test="lom:general/lom:keyword/lom:string[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_keyword</sch:assert>
      <sch:assert test="lom:general/lomfr:documentType/lomfr:value[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_documentType</sch:assert>
      <sch:assert test="lom:lifeCycle/lom:contribute[lom:role/lom:value='author']/lom:entity[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_author</sch:assert>
      <sch:assert test="lom:lifeCycle/lom:contribute[lom:role/lom:value='author']/lom:date/lom:dateTime[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_contrib</sch:assert>
      <sch:assert test="lom:lifeCycle/lom:contribute[lom:role/lom:value='publisher']/lom:entity[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_publisher</sch:assert>
      <sch:assert test="lom:lifeCycle/lom:contribute[lom:role/lom:value='publisher']/lom:date/lom:dateTime[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_contrib</sch:assert>
      <!--sch:assert test="lom:metaMetadata/lom:metadataSchema[normalize-space(.) = 'SupLOMFRv1.0']">lom_easy.schematron.lom-ori.fill_metadataSchema</sch:assert-->
      <sch:assert test="lom:technical/lom:location[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_localisation</sch:assert>
      <sch:assert test="lom:technical/lom:size[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_size</sch:assert>
      <sch:assert test="lom:educational/lom:learningResourceType/lom:value[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_learningRessourceType</sch:assert>
      <sch:assert test="lom:educational/lom:context/lom:value[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_context</sch:assert>
      <sch:assert test="lom:rights/lom:cost/lom:value[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_cost</sch:assert>
      <sch:assert test="lom:rights/lom:copyrightAndOtherRestrictions/lom:value[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_copyright</sch:assert>
      <sch:assert test="lom:rights/lom:description/lom:string[normalize-space(.) != '']">lom_easy.schematron.lom-ori.fill_rightsDescription</sch:assert>
      <sch:assert test="lom:classification[lom:purpose/lom:value='discipline']/lom:taxonPath[lom:source/lom:string='CDD 22e éd.']/lom:taxon/lom:entry/lom:string[normalize-space(.) != '']">lom_complex.schematron.lom-ori.fill_dewey</sch:assert>

      <sch:assert test="lom:educational/lom:semanticDensity/lom:value[normalize-space(.)!= '']">lom_easy.schematron.lom-ori.fill_semanticDensity</sch:assert>
    </sch:rule>
  </sch:pattern>
</sch:schema>

Il reste maintenant à traduire le message lom_easy.schematron.lom-ori.fill_semanticDensity dans les fichiers de messages i18n/messages_fr.properties et i18n/messages_en.properties comme ceci :

lom_easy.schematron.lom-ori.fill_semanticDensity = Merci de compl\u00E9ter le champ 'Densit\u00E9 s\u00E9mantique'.

et

lom_easy.schematron.lom-ori.fill_semanticDensity = Please enter 'Semantic density'.

Avant la version 1.6

Le fichier [ORI_HOME]/src/ori-oai-workflow-svn/conf/properties/spring/spring-metadata-types.xml qui permet de définir les types de métadonnées pris en compte dans ORI-OAI associe par défaut le type ressource_pedago au workflow easy.

Le workflow nommé easy est quand à lui défini dans le fichier de config osworkflow [ORI_HOME]/src/ori-oai-workflow-svn/conf/properties/spring/osworkflow/workflows/workflow_easy.xml (cf. le fichier [ORI_HOME]/src/ori-oai-workflow-svn/conf/properties/spring/osworkflow/workflows.xml qui permet de déclarer les workflow).

=> C'est donc ce fichier workflow_easy.xml que l'on modifie ici.

Avant la 1.4.0

Avant la 1.4.0 les conditions type XPATH étaient données directement dans le fichier de configuration du workflow workflow_easy.xml
Ici la modification est simple : une condition verifyXPathes sur la transition « Ask to Publish » existe déjà. Il suffit donc d'ajouter le xpath qui va bien en argument de cette condition :

<arg name="xpath7">/lom:lom/lom:educational/lom:semanticDensity/lom:value[normalize-space(.)!= '']</arg>

Comme après chaque modification des configurations, il faut redéployer l'application (ant all) et la redémarrer (on peut redémarrer le tomcat pour ce faire).

Version 1.4 et 1.5

A partir de la 1.4.0, par défaut on utilise plutôt une nouvelle condition verifySchematronXsl.
Cette condition permet d'utiliser un Schematron pour vérifier qu'un XML contient bien les informations attendues.

<condition type="spring">
  <arg name="bean.name">verifySchematronXsl</arg>
  <arg name="schematronXslFile">/properties/xml/sch/lom-ori-sch.xsl</arg>
</condition>

Les Schematron utilisent des XPATHs pour ce faire. Ici on externalise ces configurations dans lom-ori-sch.xsl, le schematron nous permet d'être plus précis et d'expliciter d'avantage les conditions attendues.

Attention, l'idée n'est pas de modifier directement le fichier /properties/xml/sch/lom-ori-sch.xsl mais de modifier uniquement le schematron correspondant /properties/xml/sch/lom-ori.sch, lom-ori-sch.xsl résulte de la compilcation de lom-ori.sch (cf /properties/xml/sch/README)

Depuis /properties/xml/sch on modifie lom-ori.sch de cette manière :

<?xml version="1.0" encoding="UTF-8"?>
<sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron">
  <sch:ns prefix="lom" uri="http://ltsc.ieee.org/xsd/LOM"/>
  <sch:ns prefix="lomfr" uri="http://www.lom-fr.fr/xsd/LOMFR"/>
  <sch:ns prefix="xsi" uri="http://www.w3.org/2001/XMLSchema-instance"/>

  <sch:pattern id="eltsObligatoire">
    <sch:title>Test de présence des éléments obligatoires</sch:title>
    <sch:rule context="/lom:lom">
      <sch:assert test="lom:general/lom:title/lom:string[normalize-space(.) != '']">Merci de compléter le champ titre.</sch:assert>
      <sch:assert test="/lom:lom/lom:general/lom:keyword/lom:string[normalize-space(.) != '']">Merci de compléter le champ mot-clé.</sch:assert>
      <sch:assert test="/lom:lom/lom:lifeCycle/lom:contribute[lom:role/lom:value='author']/lom:entity[normalize-space(.) != '']">Merci de compléter le champ auteur.</sch:assert>
      <sch:assert test="/lom:lom/lom:lifeCycle/lom:contribute[lom:role/lom:value='author']/lom:date/lom:dateTime[normalize-space(.) != '']">Merci de compléter le champ date de contribution.</sch:assert>
      <sch:assert test="/lom:lom/lom:technical/lom:location[normalize-space(.) != '']">Merci de compléter le champ localisation.</sch:assert>
      <sch:assert test="/lom:lom/lom:classification[lom:purpose/lom:value='discipline']/lom:taxonPath[lom:source/lom:string='Classification 100 Dewey']/lom:taxon/lom:entry/lom:string[normalize-space(.) != '']">Merci de compléter le champ
 'Classification 100 Dewey'.</sch:assert>
      <sch:assert test="/lom:lom/lom:educational/lom:semanticDensity/lom:value[normalize-space(.)!= '']">Merci de compléter le champ 'Densité sémantique'.</sch:assert>
    </sch:rule>
  </sch:pattern>
</sch:schema>

Compilation

Modifications 1.6

Dans les versions précédant la 1.6, il était nécessaire de compiler les schematrons avant de pouvoir les utiliser. Depuis la version 1.6, cette compilation est automatique et transparente pour l'exploitant.

Sur une version 1.4 ou 1.5, il nous faut alors appeler un processur XSLT pour compiler lom-ori.sch en lom-ori-sch.xsl via la feuille de style iso_svrl.xsl.
On utilise ici xsltproc fourni usuellement par les gestionnaires de paquets linux (on peut aussi utiliser un processur XSLT java comme Xalan)

xsltproc iso_svrl.xsl lom-ori.sch > lom-ori-sch.xsl

lom-ori-sch.xsl est alors modifié comme il se doit.

  • No labels