Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

« SDX Création de Base SDX » : différence entre les versions

De AJLSM
Aller à la navigation Aller à la recherche
→Déclaration de la base dans l'application : ajout déclaration externe des champs
Ctate (discussion | contributions)
 
(30 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
Une [[Doc/Création de Base SDX|base SDX]] est un Lieu virtuel où des documents XML sont indexés et peuvent être recherchés.<ref>[http://www.nongnu.org/sdx/docs/html/doc-sdx2/fr/presentation/bases.html Concept de « base de documents » dans SDX]</ref>
== Introduction ==
== Introduction ==
Ce document à pour but d'expliquer de façons pratique (à travers des exemples) la création et l'exploitation de bases {{SDX}} documentaires dans {{Pleade}}.
Ce document à pour but d'expliquer de façons pratique (à travers des exemples) la création et l'exploitation de bases {{SDX}} documentaires dans {{Pleade}}.
Ligne 9 : Ligne 10 :


=== Pré-requis ===
=== Pré-requis ===
Dans la suite de ce document nous allons supposé vouloir indexer une base {{var|KML}} dont un exemple de document à la structure suivante&nbsp;:
Dans la suite de ce document nous allons supposé vouloir indexer une base {{var|KML}} nommée {{var|maBase}} dont un exemple de document à la structure suivante&nbsp;:
<syntaxhighlight lang="xml"><?xml version="1.0" encoding="UTF-8"?>
<syntaxhighlight lang="xml"><?xml version="1.0" encoding="UTF-8"?>
<NOTICE>
<NOTICE>
<GFIELD>Registre matricule</GFIELD>
  <GFIELD>Registre matricule</GFIELD>
<COLLECTION>Registre matricule</COLLECTION>
  <COLLECTION>Registre matricule</COLLECTION>
<SUBDIVISION>bureau de Langres</SUBDIVISION>
  <SUBDIVISION>bureau de Langres</SUBDIVISION>
<REF>00001</REF>
  <REF>00001</REF>
<PATRONYME>Terrasse</PATRONYME>
  <PATRONYME>Terrasse</PATRONYME>
<PRENOMS>François Hippolyte</PRENOMS>
  <PRENOMS>François Hippolyte</PRENOMS>
<SURNOM>non renseigné</SURNOM>
  <SURNOM>non renseigné</SURNOM>
<SUPPLEANT>non renseigné</SUPPLEANT>
  <SUPPLEANT>non renseigné</SUPPLEANT>
<ANNEE_NAISSANCE>1849</ANNEE_NAISSANCE>
  <ANNEE_NAISSANCE>1849</ANNEE_NAISSANCE>
<COMMUNE_NAISSANCE>Bugnières</COMMUNE_NAISSANCE>
  <COMMUNE_NAISSANCE>Bugnières</COMMUNE_NAISSANCE>
<COMMUNE_DOMICILE>Bugnières</COMMUNE_DOMICILE>
  <COMMUNE_DOMICILE>Bugnières</COMMUNE_DOMICILE>
<INTITULE_DOCUMENT>Registre matricule, bureau de Langres</INTITULE_DOCUMENT>
  <INTITULE_DOCUMENT>Registre matricule, bureau de Langres</INTITULE_DOCUMENT>
<COTE>R 741/01</COTE>
  <COTE>R 741/01</COTE>
<IDENTIFIANT_PREMIERE_IMAGE>FRAD052_R0757_01_001.jpg</IDENTIFIANT_PREMIERE_IMAGE>
  <IDENTIFIANT_PREMIERE_IMAGE>FRAD052_R0757_01_001.jpg</IDENTIFIANT_PREMIERE_IMAGE>
</NOTICE>
</NOTICE>
</syntaxhighlight>
</syntaxhighlight>


== Déclaration de la nouvelle base dans {{Pleade}} ==
== Déclaration de la base dans l'application ==
Cette première phase consiste à indiquer à {{Pleade}} le nom de la nouvelle base ainsi que les configurations nécessaires pour l'indexation (identifiant de la base, champs à index, structure des index, etc.). C'est dans cette étapes aussi qu'on défini les [[entrepôts OAI]] pour cette base.
Cette première phase consiste à indiquer à {{Pleade}} le nom de la nouvelle base ainsi que les configurations nécessaires pour l'indexation (identifiant de la base, champs à index, structure des index, etc.). C'est dans cette étape aussi qu'on défini les [[entrepôts OAI]] pour cette base. Pour cela, on modifiera le fichier {{path|{{app}}/module-eadeac/conf/application.xconf}}<ref>[http://www.nongnu.org/sdx/docs/html/doc-sdx2/schemas/application-xconf.xsd Schema XML du fichier {{path|application.xconf}}]</ref><ref>[http://www.nongnu.org/sdx/docs/html/doc-sdx2/samples/application.xconf Exemple détaillé de fichier {{path|applications.xconf}}]</ref>. Ci-dessous, un exemple de déclaration dans un {{Pleade}} fraichement installé&nbsp;:
 
<syntaxhighlight lang="xml" highlight="13,21" line="GESHI_NORMAL_LINE_NUMBERS">
=== Déclaration de la base dans l'application ===
La première chose à faire est de déclarer la base dans le fichier {{path|{{appliPleade}}/module-eadeac/conf/application.xconf}}. Ci-dessous, un exemple de déclaration dans un {{Pleade}} fraichement installé&nbsp;:
<syntaxhighlight lang="xml" highlight="13,21">
<!--+ | Configuration de l'application SDX Pleade
<!--+ | Configuration de l'application SDX Pleade
  +--><application    xmlns="http://www.culture.gouv.fr/ns/sdx/sdx"  indexation-logging-level="1"  id=""  xml:lang="fr"  sessionObjectLimit="20">
  +--><application    xmlns="http://www.culture.gouv.fr/ns/sdx/sdx"  indexation-logging-level="1"  id=""  xml:lang="fr"  sessionObjectLimit="20">
Ligne 43 : Ligne 41 :
     <admin  groupId="admins"  userId="admin"  userPassword="Pleade3"  />
     <admin  groupId="admins"  userId="admin"  userPassword="Pleade3"  />


     <!-- Inclure  la liste des champs Lucene -->
     <!-- Déclaration de la liste des champs Lucene (d'indéxation) -->
    <!-- On externalise la liste des champs dans des fichiers <base>-fieldList-<type>.xconf -->
     <fieldLists>
     <fieldLists>
         <xi:include  href="cocoon:/conf/ead-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude"  />
         <xi:include  href="cocoon:/conf/ead-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude"  />
         <xi:include  href="cocoon:/conf/eac-fieldlist.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
         <xi:include  href="cocoon:/conf/eac-fieldlist.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
       <xi:include  href="cocoon:/conf/kml-orleans-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
        <!-- Déclaration de la liste des champs Lucene (d'indéxation) -->
        <!-- URL résolu dans les sitemap, aggrège : champs de base, index, champs aggrégés, champs dupliqués -->
       <xi:include  href="cocoon:/conf/maBase-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
     </fieldLists>
     </fieldLists>


Ligne 54 : Ligne 55 :
         <xi:include  href="cocoon:/conf/ead-documentbase.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
         <xi:include  href="cocoon:/conf/ead-documentbase.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
         <xi:include  href="cocoon:/conf/eac-documentbase.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
         <xi:include  href="cocoon:/conf/eac-documentbase.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
         <!-- déclaration  base  kml-->
         <!-- déclaration  base  maBase-->
         <xi:include  href="cocoon:/conf/kml-documentbase.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
         <xi:include  href="cocoon:/conf/maBase-documentbase.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
     </documentBases>
     </documentBases>
</application>
</application>
</syntaxhighlight>
</syntaxhighlight>


L'attribut {{attr|href}} indique le chemin vers le fichier qui décrit réellement la base (identifiant et compagnie), les index de recherche ainsi que les base [[OAI]].
La ligne {{var|13}} indique l'emplacement du fichier décrivant la liste des champs de la base, ici {{path|{{app}}/module-eadeac/conf/maBase-fieldlist-base.xconf}}. Son contenu est détaillée dans la section [[#Déclaration des champs de la base : maBase-fieldlist-base.xconf|déclaration des champs de la base]].


La prochaine étape consiste donc à décrire le fichier {{path|{{appliPleade}}/module-eadeac/conf/{{var|kml}}-documentbase.xconf}}.
La ligne {{var|21}} quand à elle revnoi vers le fichier {{path|{{app}}/module-eadeac/conf/{{var|maBase}}-documentbase.xconf}} qui déclare la base, telle que détaillé dans la section [[#Définition du schéma de la base : maBase-documentbase.xconf|déclaration de la base]].


== Définition du schéma de la base ==
== Déclaration de la base et de ses ressources : {{path|maBase-documentbase.xconf}} ==
Voici ci dessous un exemple de configuration&nbsp;:  
La déclaration de la base se structure de la façon suivante :
* la base ({{tag|documentBase}})
** son identifiant ({{attr|id}}),
** son entrepôt de donnée ({{tag|repository}})
** le type de dépôt ({{attr|type}}).
* et ses ressources associées :
** la liste des champs décrit dans {{tag|fieldList}} (souvent externalisés via un {{tag|xi:include}}),
** la feuille d'indexatione de la base {{tag|transformation}}
** les entrepôts [[OAI]] ({{tag|oai-repository}}).
Voici un exemple avec une déclaration interne des champs de la base (cf. éléments {{tag|field}}) :
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<documentBase id="kml" type="lucene" keepOriginalDocuments="false">
<documentBase id="maBase" type="lucene" keepOriginalDocuments="false">
<!--L'entrepôt pour les documents-->
<!--L'entrepôt pour les documents-->
<repositories>
<repositories>
   <repository type="FS" id="kml-docs" baseDirectory="docs/kml" depth="2" extent="50" default="true" />
   <repository type="FS" id="maBase-docs" baseDirectory="docs/maBase" depth="2" extent="50" default="true" />
</repositories>
</repositories>


<!-- Déclaration de la liste des champs Lucene (d'indéxation) -->
<!-- Déclaration de la liste des champs Lucene (d'indéxation) -->
<fieldList id="kml-fieldlist" analyzerConf="analysis/fr.xml" xml:lang="fr">
<fieldList id="maBase-fieldlist" analyzerConf="analysis/fr.xml" xml:lang="fr">
  <field name="REF" type="field" />
    <!-- Déclaration de la liste des champs Lucene (d'indéxation) -->
  <field name="PATRONYME" type="field" brief="true"/>
    <!-- URL résolu dans les sitemap, aggrège : champs de base, index, champs aggrégés, champs dupliqués -->
  <field name="PRENOMS" type="field" brief="true"/>
    <xi:include href="cocoon:/conf/maBase-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
  <field name="SURNOM" type="field" />
  <field name="ANNEE_NAISSANCE" type="field" brief="true"/>
  <field name="COMMUNE_NAISSANCE" type="unindexed" brief="true"/>
  <field name="COMMUNE_DOMICILE" type="unindexed" brief="true"/>
  <field name="COLLECTION" type="field" />
  <field name="SUBDIVISION" type="field" />
  <field name="COTE" type="field" />
 
<!-- Champs Pleade -->
  <field name="searchable" type="field"/>
  <field name="fulltext" type="word"/>
  <field name="base" type="unindexed" brief="true" />
</fieldList>
</fieldList>


<!-- Les étapes de transformation des documents au moment de la publication. -->
<!-- Les étapes de transformation des documents au moment de la publication. -->
<index>
<index>
   <pipeline id="index-bdkml">
   <pipeline id="index-bdmaBase">
     <!-- Remplissage des champs -->
     <!-- Remplissage des champs -->
     <transformation id="fields" type="SAXONXSLT" src="../xsl/publication/kml/kml-fields.xsl"/>
     <transformation id="fields" type="SAXONXSLT" src="../xsl/publication/maBase/maBase-fields.xsl"/>
   </pipeline>
   </pipeline>
</index>
</index>


<!-- Entrepôt OAI&nbsp;: NB : les champs vides seront remplies par le parametres.xconf -->
<!-- Entrepôt OAI&nbsp;: NB : les champs vides seront remplies par le parametres.xconf -->
<oai-repository name="" baseURL="" adminEmail="" noPerResponse="" id="kml-oai" default="true">
<oai-repository name="" baseURL="" adminEmail="" noPerResponse="" id="maBase-oai" default="true">
   <!-- Le subset sera rempli en fonction du paramètre records -->
   <!-- Le subset sera rempli en fonction du paramètre records -->
   <oai-subset>
   <oai-subset>
   </oai-subset>
   </oai-subset>


   <!-- Format OAI-DC -->  
   <!-- Format OAI-DC -->
   <oai-format name="OAI Dublin core" metadataPrefix="oai_dc"  
   <oai-format name="OAI Dublin core" metadataPrefix="oai_dc"
     namespace="http://www.openarchives.org/OAI/2.0/oai_dc/"
     namespace="http://www.openarchives.org/OAI/2.0/oai_dc/"
     schemaUrl="http://www.openarchives.org/OAI/2.0/oai_dc.xsd"
     schemaUrl="http://www.openarchives.org/OAI/2.0/oai_dc.xsd"
Ligne 118 : Ligne 116 :
</documentBase>
</documentBase>
</syntaxhighlight>
</syntaxhighlight>
{{remarque|L'élément {{tag|pipeline}} indique les fichiers qui permette de modifier successivement (mécanisme {{tag|map:transform}} de [[Cocoon]]) le document final à indexer par le {{SDX}}. Dans la plupart des cas, nous n'aurons besoin que d'un seul transformateur, appelé ({{path|{{var|maBase}}-fields.xsl}}), qui s'occupera simplement de remplir les différents champs {{SDX}} déclarés à partir du fichier XML d'entrée}}
{{remarque|L'utilisation de {{var|FS}} comme valeur de {{attr|type}} implique que les données d'indexation sont stockées sous forme de système de fichier (dossier {{path|sdx-data}} ou {{path|datadir}})}}
== Déclaration des champs de la base : {{path|maBase-fieldlist-base.xconf}} ==
On préférera déclarer les champs de façon externes dans le but d'améliorer la lisibilité des documents XML et en facilité la correction. Le fichier décrivant les champs de la base doit se situer dans {{path|{{app}}/module-eadeac/conf/maBase-fieldlist-base.xconf}}. Ce fichier se contient les informations suivantes :
* un analyseur définit par l'attribut {{attr|analyzerConf}} de l'élément racine {{tag|fieldList}},
* la liste champs de recherche, défini par des éléments {{tag|field}}, chacun ayant au moins :
** un nom {{attr|name}},
** et un {{attr|type}} ({{var|field}} vs. {{var|word}} vs. {{var|unindexed}}),
<syntaxhighlight lang="xml" highlight="9-18">
<fieldList id="bm-orleans-fieldslist"
    xmlns="http://www.culture.gouv.fr/ns/sdx/sdx"
    analyzerConf="/sdx/resources/conf/analysis/fr.xml"
    xml:lang="fr"
>
  <!-- Le champ par défaut -->
    <field name="base" type="unindexed" brief="true" />
    <field name="REF" type="field" />
    <field name="PATRONYME" type="field" brief="true"/>
    <field name="PRENOMS" type="field" brief="true"/>
    <field name="SURNOM" type="field" />
    <field name="ANNEE_NAISSANCE" type="field" brief="true"/>
    <field name="COMMUNE_NAISSANCE" type="unindexed" brief="true"/>
    <field name="COMMUNE_DOMICILE" type="unindexed" brief="true"/>
    <field name="COLLECTION" type="field" />
    <field name="SUBDIVISION" type="field" />
    <field name="COTE" type="field" />
    <!-- Les champs de type word :  destinés à des recherches de type « libre » -->
    <!-- Les champs de type field (ou « valeur ») : sont destinés à une recherche exacte -->
<!-- Champs Pleade -->
    <field name="searchable" type="field"/>
    <field name="fulltext" type="word"/>
    <field name="base" type="unindexed" brief="true" />
</fieldList>
</syntaxhighlight>
Pour la [[Création et configuration des champs d'une base SDX|création et la configuration des champs]] se référer à la documentation de Pleade correspondante.
{{important|Chaque '''document à indexer doit posséder une référence unique qui va lui servir d'identifiant dans la base'''. Cette référence peut être soit :
* fournie par le document (dans notre cas le champs {{tag|REF}} ou le champs {{tag|eadid}} dans le cas d'un document EAD) ;
* générer automatiquement durant l'indexation (voire suite du document).}}
{{notice|Les mécanismes de gestion avancés des champs et index pour l'EAD (champs agrégées, champs multivalués, etc.) ne sont pas disponibles par défaut. Il faut les implémenter indépendamment comme décrit dans la section suivante, nous détaillerons un exemple d'implémentations de [[champs agrégées]] pour la base {{var|maBase}}}}


=== Externalisation de la liste des champs ===
=== Externalisation de la liste des champs : {{path|maBase-fieldlist-base.xconf}} ===
Pour plus de clarté, les champs d'indexations peuvent être déclarer dans un fichier {{path|{{var|kml}}-fieldlist-base.xconf}}. Dans ce cas, il faudra adapter le contenu du fichier {{path|application.xconf}}&nbsp;:
Pour plus de clarté, les champs d'indexations peuvent être déclarer dans un fichier {{path|{{var|maBase}}-fieldlist-base.xconf}}. Dans ce cas, il faudra également adapter le contenu du fichier {{path|application.xconf}} comme suit :


Exemple&nbsp;:
<syntaxhighlight lang="xml">
<syntaxhighlight lang="bash">
<!-- Inclure la liste des champs Lucene -->
<!-- Inclure la liste des champs Lucene -->
<fieldLists>
<fieldLists>
   <xi:include href="cocoon:/conf/ead-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
   <xi:include href="cocoon:/conf/ead-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
   <xi:include href="cocoon:/conf/eac-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
   <xi:include href="cocoon:/conf/eac-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
   <xi:include href="cocoon:/conf/kml-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
   <xi:include href="cocoon:/conf/maBase-fieldlist-base.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
</fieldLists>
</fieldLists>
</syntaxhighlight>
</syntaxhighlight>
La fichier {{path|{{var|kml}}-fieldlist-base.xconf}} est ensuite renseigné à l'image du fichier {{path|ead-fieldlistlist-base.xconf}}.
La fichier {{path|{{var|maBase}}-fieldlist-base.xconf}} est ensuite renseigné à l'image du fichier {{path|ead-fieldlistlist-base.xconf}}.


Plusieurs points sont à noter concernant le document {{path|{{var|kml}}-documentbase.xconf}}&nbsp;:
=== D'autres fichiers à mettre à jour ===
Il apparaît clairement ici qu'un travail de fond est nécessaire pour pouvoir définir les différent champs relatifs à ce document. Pour la [[Création et configuration des champs d'une base SDDX|création et la configuration des champs]] se référer à la documentation de Pleade correspondante.
* pleade-libre/src/webapp/module-eadeac/conf/utils/sdx-xconf.xsl - Ce fichier genère le repository vers la base de données automatiquement pour ead, eac, mets, oai_dc, et qdc mais pas les nouveaux document bases. Faire une recherche pour "oai_dc" par exemple.


Chaque '''document à indexer doit posséder une référence unique qui va lui servir d'identifiant dans la base'''. Cette référence peut être soit fournie par le document (dans notre cas le champs {{tag|REF}} ou le champs {{tag|eadid}} dans le cas d'un document EAD)&nbsp;; soit générer automatiquement durant l'indexation (voire suite du document).
== Indexation de la nouvelle base ==
Dans cette section, nous allons présenté les différents mécanismes à mettre en place pour pouvoir indexer un document de type {{var|maBase}}. Ces mécanismes consistent essentiellement à la mise en place de ''pipelines''. Ces derniers seront à placer dans le fichier {{path|local.xmap}}.
{{remarque|<del>Pour plus de clarté, les fichiers sources ({{path|.xsl}}, {{path|.xsp}}, etc.) des pipelines de cette section seront présentés dans la section [[#Annexe|Annexe]]</del>}}
Les mécanismes d'authentifications seront présentés dans la section [[#Paramétrage Avancés|paramétrage avancés]].


Les mécanismes de gestion avancés des champs et index pour l'EAD (champs agrégées, champs multivalués, etc.) ne sont pas disponibles par défaut. Il faut les implémenter indépendamment comme décrit dans la section suivante, nous détaillerons un exemple d'implémentations de [[champs agrégées]] pour la base {{var|kml}}.
=== Pré-requis ===
Avant de pouvoir faire des publications et indexations, il est nécessaire de savoir où les données à publier sont stockées. Pour cela on définira une variable d'applications dans le fichier {{path|{{app}}}}.


Dans le fichier {{path|{{var|kml}}-documentbase.xconf}}, la section documentBase/index/pipeline indique les fichiers qui permette de modifier successivement (mécanisme {{cmd|map:transform}} de cocoon) le document final à indexer par le {{SDX}}. Dans le plus simple des cas, nous avons uniquement besoin d'un transformateur ({{path|{{var|kml}}-fields.xsl}}) qui va s'occuper de remplir les différents champs déclarés.
=== Indexation par URL ===
Il faut mettre en place les ''pipelines'' nécessaire à la publication. C'est à dire :
<syntaxhighlight lang="xml">
<pipeline-gérant-la-publication>
</syntaxhighlight>


Dans cette configuration, toute les données d'indexation sont stockées en base de donnée type système de fichier ({{var|FS}}). Dans la section paramétrage avancé, nous allons présenter une configuration supplémentaire pour stocker les données d'indexation dans un SGBD relationnel.
=== Tester l'indexation ===
http://{{var|projet}}/results.debug?base={{var|maBase}}&champ1=fulltext&op1=AND&search_type=simple&query1=sdxall%3A1&ssearch-submit-npt.x=5&ssearch-submit-npt.y=11
==== Termes indexés ====
http://bm-orleans.dev/functions/sdx-terms.xml?&base={{var|maBase}}&field={{var|monChamps}}
{{important|Commencé par mettre la déclaration dans le corps du fichier {{path|{{var|maBase}}-documentbase.xconf}} et externalisé les ensuite. Cela évitera les problèmes inutiles}}


== Mise en place de l'indexation ==
=== Indexation par l'interface ===
Dans cette section, nous allons présenté les différents mécanismes à mettre en place pour pouvoir indexer un document de type {{var|kml}}. Ces mécanismes consistent essentiellement à la mise en place de ''pipelines''. Ces derniers seront à placer dans le fichier {{path|local.xmap}}.
Deux fichiers sont nécessaires pour cela :
{{remarque|Pour plus de clarté, les fichiers sources ({{path|.xsl}}, {{path|.xsp}}, etc.) des pipelines de cette section seront présentés dans la section [[#Annexe|Annexe]]}}
* {{path|{{app}}/module-eadeac/xsl/{{var|maBase}}-publish.xsl}}
Les mécanismes d'authentifications seront présentés dans la section [[#Paramétrage Avancés|paramétrage avancés]].
* {{path|{{app}}/module-eadeac/xsl/{{var|maBase}}-publish-form.xsl}}


=== Formulaire de publication ===
== Formulaire de publication ==
Mise en place d'un formulaire de publication simple dans {{Pleade}}. On rajoutera le code suivant dans un sitemap, si vous ne savait pas dans quel sitemap le placer, ajouter le à {{path|local.xmap}} :
Mise en place d'un formulaire de publication simple dans {{Pleade}}. On rajoutera le code suivant dans un sitemap, si vous ne savait pas dans quel sitemap le placer, ajouter le à {{path|local.xmap}} :
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
<map:match pattern="edit/kml\-publish\-form\.(xsp|debug)" id="main-kml-edit-publish-form" type="regexp">
<map:match pattern="edit/maBase\-publish\-form\.(xsp|debug)" id="main-maBase-edit-publish-form" type="regexp">
   <map:aggregate element="aggregate">
   <map:aggregate element="aggregate">
     <map:part src="module-eadeac/xsp/kml-publish-form.xhtml" element="template"/>
     <map:part src="module-eadeac/xsp/maBase-publish-form.xhtml" element="template"/>
     <map:part src="cocoon://edit/functions/edit-publish/kml-documents.xml"/>
     <map:part src="cocoon://edit/functions/edit-publish/maBase-documents.xml"/>
     <map:part src="cocoon:/edit/functions/edit-publish/get-properties-publication.xml"/>
     <map:part src="cocoon:/edit/functions/edit-publish/get-properties-publication.xml"/>
     <map:part src="cocoon:/edit/functions/edit-publish/get-properties-display.xml"/>
     <map:part src="cocoon:/edit/functions/edit-publish/get-properties-display.xml"/>
Ligne 171 : Ligne 222 :
     <map:parameter name="value" value="{1}"/>
     <map:parameter name="value" value="{1}"/>
     <map:when test="xsp">
     <map:when test="xsp">
       <map:transform type="xslt2" src="module-eadeac/xsl/kml-publish-form.xsl">
       <map:transform type="xslt2" src="module-eadeac/xsl/maBase-publish-form.xsl">
         <map:parameter name="locale" value="{request-attr:locale}"/>
         <map:parameter name="locale" value="{request-attr:locale}"/>
         <map:parameter name="theme" value="{baselink:sitemapBaseLink}../"/>
         <map:parameter name="theme" value="{baselink:sitemapBaseLink}../"/>
Ligne 190 : Ligne 241 :
</map:match>
</map:match>
</syntaxhighlight>
</syntaxhighlight>
== Résultat de recherche ==
On travaillera dans le fichier {{path|module-eadeac/xsp/sdx-results.xsp}}.


== Paramétrages avancés ==
== Paramétrages avancés ==
Ligne 195 : Ligne 249 :
* Base de donnée sdx-csv-repositry
* Base de donnée sdx-csv-repositry
* Authentification dans les pipelines d'indexation
* Authentification dans les pipelines d'indexation
== Création de la document base dans la base de données ==
=== Repository ===
* LuceneDocumentBase.configure(Configuration configuration)
** SDXDocumentBase.configure(Configuration configuration)
*** SDXDocumentBase.configureRepositories(Configuration configuration)
**** ligne 349 : repo = ConfigurationUtils.createRepository(super.getLog(), super.getContext(), super.getServiceManager(), repoConfList[i]);
***** ConfigurationUtils.createRepository(Logger logger, org.apache.avalon.framework.context.Context context, ServiceManager manager, Configuration repoConf)
****** JDBCRepository.init()
******* JDBC.createTable(Connection conn)
******* AbstractJDBCDatabase
=== Database ===
* LuceneDocumentBase.configure(Configuration configuration)
** SDXDocumentBase.configure(Configuration configuration)
*** SDXDocumentBase.configureRepositories(Configuration configuration)
**** ligne 349 : repo = ConfigurationUtils.createRepository(super.getLog(), super.getContext(),
== Liens ==
* Pour tester les document bases que vous avez créés utiliser un lien comme : http://localhost:8080/pleade-libre/conf/application.xconf
== Références ==
<references/>
[[category:Base SDX]]
[[category:Doc]]
[[category:Pleade]]
[[category:Index]]

Dernière version du 7 octobre 2014 à 13:58

Une base SDX est un Lieu virtuel où des documents XML sont indexés et peuvent être recherchés.<ref>Concept de « base de documents » dans SDX</ref>

Ce document à pour but d'expliquer de façons pratique (à travers des exemples) la création et l'exploitation de bases SDX documentaires dans Pleade.

À l'issue de ce document, l'utilisateur devra être capable de créer une nouvelle base documentaire dans Pleade, d'indexer des documents ; et d'établir sur cette nouvelle base les différents service qu'offre Pleade pour la base EAD (recherche, subset, navindex, suggest, etc.).

La création des bases dans Pleade est native ; elle se fait suivant un ensemble d'étapes bien déterminées. Ces dernières peuvent à leur tour être subdivisées en plusieurs autres étapes (exemple l'étape de publication d'un document dans la base EAD est subdivisé en quatorze sous étapes).

Ce document n'a pas pour but d'expliquer la création d'un système d'indexation aussi complexe que l'EAD dans Pleade, mais, il explique la gestion de l'indexation d'un forme de document simple (profondeur 1).

Dans la suite de ce document nous allons supposé vouloir indexer une base KML nommée maBase dont un exemple de document à la structure suivante :

<?xml version="1.0" encoding="UTF-8"?>
<NOTICE>
  <GFIELD>Registre matricule</GFIELD>
  <COLLECTION>Registre matricule</COLLECTION>
  <SUBDIVISION>bureau de Langres</SUBDIVISION>
  <REF>00001</REF>
  <PATRONYME>Terrasse</PATRONYME>
  <PRENOMS>François Hippolyte</PRENOMS>
  <SURNOM>non renseigné</SURNOM>
  <SUPPLEANT>non renseigné</SUPPLEANT>
  <ANNEE_NAISSANCE>1849</ANNEE_NAISSANCE>
  <COMMUNE_NAISSANCE>Bugnières</COMMUNE_NAISSANCE>
  <COMMUNE_DOMICILE>Bugnières</COMMUNE_DOMICILE>
  <INTITULE_DOCUMENT>Registre matricule, bureau de Langres</INTITULE_DOCUMENT>
  <COTE>R 741/01</COTE>
  <IDENTIFIANT_PREMIERE_IMAGE>FRAD052_R0757_01_001.jpg</IDENTIFIANT_PREMIERE_IMAGE>
</NOTICE>

Déclaration de la base dans l'application

[modifier | modifier le wikicode]

Cette première phase consiste à indiquer à Pleade le nom de la nouvelle base ainsi que les configurations nécessaires pour l'indexation (identifiant de la base, champs à index, structure des index, etc.). C'est dans cette étape aussi qu'on défini les entrepôts OAI pour cette base. Pour cela, on modifiera le fichier <app>/module-eadeac/conf/application.xconf<ref>Schema XML du fichier application.xconf</ref><ref>Exemple détaillé de fichier applications.xconf</ref>. Ci-dessous, un exemple de déclaration dans un Pleade fraichement installé :

<!--+ | Configuration de l'application SDX Pleade
 +--><application    xmlns="http://www.culture.gouv.fr/ns/sdx/sdx"  indexation-logging-level="1"  id=""  xml:lang="fr"  sessionObjectLimit="20">
    <!-- Catalog  file  for  EAD  -->
    <catalogs>
        <catalog  src="dtd/catalog"/>
    </catalogs>
    <admin  groupId="admins"  userId="admin"  userPassword="Pleade3"  />

    <!-- Déclaration de la liste des champs Lucene (d'indéxation) -->
    <!-- On externalise la liste des champs dans des fichiers <base>-fieldList-<type>.xconf -->
    <fieldLists>
        <xi:include  href="cocoon:/conf/ead-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude"  />
        <xi:include  href="cocoon:/conf/eac-fieldlist.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
        <!-- Déclaration de la liste des champs Lucene (d'indéxation) -->
        <!-- URL résolu dans les sitemap, aggrège : champs de base, index, champs aggrégés, champs dupliqués -->
       <xi:include   href="cocoon:/conf/maBase-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
    </fieldLists>

    <!--  Les  bases  de  documents  -->
    <documentBases>
        <xi:include  href="cocoon:/conf/ead-documentbase.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
        <xi:include  href="cocoon:/conf/eac-documentbase.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
        <!-- déclaration  base  maBase-->
        <xi:include  href="cocoon:/conf/maBase-documentbase.xconf"  xmlns:xi="http://www.w3.org/2001/XInclude"  />
    </documentBases>
</application>

La ligne 13 indique l'emplacement du fichier décrivant la liste des champs de la base, ici <app>/module-eadeac/conf/maBase-fieldlist-base.xconf. Son contenu est détaillée dans la section déclaration des champs de la base.

La ligne 21 quand à elle revnoi vers le fichier <app>/module-eadeac/conf/maBase-documentbase.xconf qui déclare la base, telle que détaillé dans la section déclaration de la base.

Déclaration de la base et de ses ressources : maBase-documentbase.xconf

[modifier | modifier le wikicode]

La déclaration de la base se structure de la façon suivante :

  • la base (<documentBase>)
    • son identifiant (id),
    • son entrepôt de donnée (<repository>)
    • le type de dépôt (type).
  • et ses ressources associées :
    • la liste des champs décrit dans <fieldList> (souvent externalisés via un <xi:include>),
    • la feuille d'indexatione de la base <transformation>
    • les entrepôts OAI (<oai-repository>).

Voici un exemple avec une déclaration interne des champs de la base (cf. éléments <field>) :

<documentBase id="maBase" type="lucene" keepOriginalDocuments="false">
<!--L'entrepôt pour les documents-->
<repositories>
  <repository type="FS" id="maBase-docs" baseDirectory="docs/maBase" depth="2" extent="50" default="true" />
</repositories>

<!-- Déclaration de la liste des champs Lucene (d'indéxation) -->
<fieldList id="maBase-fieldlist" analyzerConf="analysis/fr.xml" xml:lang="fr">
    <!-- Déclaration de la liste des champs Lucene (d'indéxation) -->
    <!-- URL résolu dans les sitemap, aggrège : champs de base, index, champs aggrégés, champs dupliqués -->
    <xi:include href="cocoon:/conf/maBase-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
</fieldList>

<!-- Les étapes de transformation des documents au moment de la publication. -->
<index>
  <pipeline id="index-bdmaBase">
    <!-- Remplissage des champs -->
    <transformation id="fields" type="SAXONXSLT" src="../xsl/publication/maBase/maBase-fields.xsl"/>
  </pipeline>
</index>

<!-- Entrepôt OAI&nbsp;: NB : les champs vides seront remplies par le parametres.xconf -->
<oai-repository name="" baseURL="" adminEmail="" noPerResponse="" id="maBase-oai" default="true">
  <!-- Le subset sera rempli en fonction du paramètre records -->
  <oai-subset>
  </oai-subset>

  <!-- Format OAI-DC -->
  <oai-format name="OAI Dublin core" metadataPrefix="oai_dc"
    namespace="http://www.openarchives.org/OAI/2.0/oai_dc/"
    schemaUrl="http://www.openarchives.org/OAI/2.0/oai_dc.xsd"
  >
    <pipeline id="to-oaidc">
      <transformation id="oai-dc" type="XSLT" src="oai-repository/ead/qdc/oai-dc.xsl" />
    </pipeline>
  </oai-format>
</oai-repository>
</documentBase>

Remarques : L'élément <pipeline> indique les fichiers qui permette de modifier successivement (mécanisme <map:transform> de Cocoon) le document final à indexer par le SDX. Dans la plupart des cas, nous n'aurons besoin que d'un seul transformateur, appelé (maBase-fields.xsl), qui s'occupera simplement de remplir les différents champs SDX déclarés à partir du fichier XML d'entrée.

Remarques : L'utilisation de FS comme valeur de type implique que les données d'indexation sont stockées sous forme de système de fichier (dossier sdx-data ou datadir).

Déclaration des champs de la base : maBase-fieldlist-base.xconf

[modifier | modifier le wikicode]

On préférera déclarer les champs de façon externes dans le but d'améliorer la lisibilité des documents XML et en facilité la correction. Le fichier décrivant les champs de la base doit se situer dans <app>/module-eadeac/conf/maBase-fieldlist-base.xconf. Ce fichier se contient les informations suivantes :

  • un analyseur définit par l'attribut analyzerConf de l'élément racine <fieldList>,
  • la liste champs de recherche, défini par des éléments <field>, chacun ayant au moins :
    • un nom name,
    • et un type (field vs. word vs. unindexed),
<fieldList id="bm-orleans-fieldslist"
    xmlns="http://www.culture.gouv.fr/ns/sdx/sdx"
    analyzerConf="/sdx/resources/conf/analysis/fr.xml"
    xml:lang="fr"
>
  <!-- Le champ par défaut -->
    <field name="base" type="unindexed" brief="true" />

    <field name="REF" type="field" />
    <field name="PATRONYME" type="field" brief="true"/>
    <field name="PRENOMS" type="field" brief="true"/>
    <field name="SURNOM" type="field" />
    <field name="ANNEE_NAISSANCE" type="field" brief="true"/>
    <field name="COMMUNE_NAISSANCE" type="unindexed" brief="true"/>
    <field name="COMMUNE_DOMICILE" type="unindexed" brief="true"/>
    <field name="COLLECTION" type="field" />
    <field name="SUBDIVISION" type="field" />
    <field name="COTE" type="field" />
    <!-- Les champs de type word :  destinés à des recherches de type « libre » -->
    <!-- Les champs de type field (ou « valeur ») : sont destinés à une recherche exacte -->

<!-- Champs Pleade -->
    <field name="searchable" type="field"/>
    <field name="fulltext" type="word"/>
    <field name="base" type="unindexed" brief="true" />
</fieldList>

Pour la création et la configuration des champs se référer à la documentation de Pleade correspondante.

Important :
Chaque document à indexer doit posséder une référence unique qui va lui servir d'identifiant dans la base. Cette référence peut être soit :
  • fournie par le document (dans notre cas le champs <REF> ou le champs <eadid> dans le cas d'un document EAD) ;
  • générer automatiquement durant l'indexation (voire suite du document)..
Notice :
Les mécanismes de gestion avancés des champs et index pour l'EAD (champs agrégées, champs multivalués, etc.) ne sont pas disponibles par défaut. Il faut les implémenter indépendamment comme décrit dans la section suivante, nous détaillerons un exemple d'implémentations de champs agrégées pour la base maBase.

Externalisation de la liste des champs : maBase-fieldlist-base.xconf

[modifier | modifier le wikicode]

Pour plus de clarté, les champs d'indexations peuvent être déclarer dans un fichier maBase-fieldlist-base.xconf. Dans ce cas, il faudra également adapter le contenu du fichier application.xconf comme suit :

<!-- Inclure la liste des champs Lucene -->
<fieldLists>
  <xi:include href="cocoon:/conf/ead-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
  <xi:include href="cocoon:/conf/eac-fieldlist.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
  <xi:include href="cocoon:/conf/maBase-fieldlist-base.xconf" xmlns:xi="http://www.w3.org/2001/XInclude" />
</fieldLists>

La fichier maBase-fieldlist-base.xconf est ensuite renseigné à l'image du fichier ead-fieldlistlist-base.xconf.

D'autres fichiers à mettre à jour

[modifier | modifier le wikicode]
  • pleade-libre/src/webapp/module-eadeac/conf/utils/sdx-xconf.xsl - Ce fichier genère le repository vers la base de données automatiquement pour ead, eac, mets, oai_dc, et qdc mais pas les nouveaux document bases. Faire une recherche pour "oai_dc" par exemple.

Indexation de la nouvelle base

[modifier | modifier le wikicode]

Dans cette section, nous allons présenté les différents mécanismes à mettre en place pour pouvoir indexer un document de type maBase. Ces mécanismes consistent essentiellement à la mise en place de pipelines. Ces derniers seront à placer dans le fichier local.xmap.

Remarques : Pour plus de clarté, les fichiers sources (.xsl, .xsp, etc.) des pipelines de cette section seront présentés dans la section Annexe.

Les mécanismes d'authentifications seront présentés dans la section paramétrage avancés.

Avant de pouvoir faire des publications et indexations, il est nécessaire de savoir où les données à publier sont stockées. Pour cela on définira une variable d'applications dans le fichier <app>.

Indexation par URL

[modifier | modifier le wikicode]

Il faut mettre en place les pipelines nécessaire à la publication. C'est à dire :

<pipeline-gérant-la-publication>

Tester l'indexation

[modifier | modifier le wikicode]

http://projet/results.debug?base=maBase&champ1=fulltext&op1=AND&search_type=simple&query1=sdxall%3A1&ssearch-submit-npt.x=5&ssearch-submit-npt.y=11

Termes indexés

[modifier | modifier le wikicode]

http://bm-orleans.dev/functions/sdx-terms.xml?&base=maBase&field=monChamps

Important :
Commencé par mettre la déclaration dans le corps du fichier maBase-documentbase.xconf et externalisé les ensuite. Cela évitera les problèmes inutiles.

Indexation par l'interface

[modifier | modifier le wikicode]

Deux fichiers sont nécessaires pour cela :

  • <app>/module-eadeac/xsl/maBase-publish.xsl
  • <app>/module-eadeac/xsl/maBase-publish-form.xsl

Formulaire de publication

[modifier | modifier le wikicode]

Mise en place d'un formulaire de publication simple dans Pleade. On rajoutera le code suivant dans un sitemap, si vous ne savait pas dans quel sitemap le placer, ajouter le à local.xmap :

<map:match pattern="edit/maBase\-publish\-form\.(xsp|debug)" id="main-maBase-edit-publish-form" type="regexp">
  <map:aggregate element="aggregate">
    <map:part src="module-eadeac/xsp/maBase-publish-form.xhtml" element="template"/>
    <map:part src="cocoon://edit/functions/edit-publish/maBase-documents.xml"/>
    <map:part src="cocoon:/edit/functions/edit-publish/get-properties-publication.xml"/>
    <map:part src="cocoon:/edit/functions/edit-publish/get-properties-display.xml"/>
    <map:part src="cocoon:/edit/functions/list-search-forms.xml" element="search-forms"/>
    <map:part src="cocoon:/edit/functions/edit-publish/frag-method.xml"/>
    <map:part src="cocoon:/edit/functions/edit-publish/toc-method.xml"/>
    <map:part src="cocoon:/edit/functions/edit-publish/notsearchable-method.xml"/>
    <map:part src="cocoon:/edit/functions/edit-publish/title-method.xml"/>
    <map:part src="cocoon:/edit/functions/edit-publish/index-global.xml"/>
    <map:part src="cocoon:/edit/functions/edit-publish/inheritance.xml"/>
    <map:part src="cocoon:/edit/functions/edit-publish/index-local.xml"/>
    <map:part src="cocoon://functions/get-subset-hierarchy.xml" element="subsets"/>
  </map:aggregate>
  <map:select type="simple">
    <map:parameter name="value" value="{1}"/>
    <map:when test="xsp">
      <map:transform type="xslt2" src="module-eadeac/xsl/maBase-publish-form.xsl">
        <map:parameter name="locale" value="{request-attr:locale}"/>
        <map:parameter name="theme" value="{baselink:sitemapBaseLink}../"/>
        <map:parameter name="tmpdir" value="{contextpath:${Pleade.csv-tmp-dir}}"/>
      </map:transform>
      <map:act type="locale">
        <map:transform type="i18n">
          <map:parameter name="locale" value="{locale}"/>
          <map:parameter name="default-catalogue-id" value="module-eadeac-edit"/>
        </map:transform>
      </map:act>
      <map:serialize type="xhtml"/>
    </map:when>
    <map:otherwise>
      <map:serialize type="xml"/>
    </map:otherwise>
  </map:select>
</map:match>

Résultat de recherche

[modifier | modifier le wikicode]

On travaillera dans le fichier module-eadeac/xsp/sdx-results.xsp.

Paramétrages avancés

[modifier | modifier le wikicode]

À faire :

  • Base de donnée sdx-csv-repositry
  • Authentification dans les pipelines d'indexation

Création de la document base dans la base de données

[modifier | modifier le wikicode]
  • LuceneDocumentBase.configure(Configuration configuration)
    • SDXDocumentBase.configure(Configuration configuration)
      • SDXDocumentBase.configureRepositories(Configuration configuration)
        • ligne 349 : repo = ConfigurationUtils.createRepository(super.getLog(), super.getContext(), super.getServiceManager(), repoConfList[i]);
          • ConfigurationUtils.createRepository(Logger logger, org.apache.avalon.framework.context.Context context, ServiceManager manager, Configuration repoConf)
            • JDBCRepository.init()
              • JDBC.createTable(Connection conn)
              • AbstractJDBCDatabase
  • LuceneDocumentBase.configure(Configuration configuration)
    • SDXDocumentBase.configure(Configuration configuration)
      • SDXDocumentBase.configureRepositories(Configuration configuration)
        • ligne 349 : repo = ConfigurationUtils.createRepository(super.getLog(), super.getContext(),

<references/>