Commit 25142265 authored by Vincent Keller's avatar Vincent Keller
Browse files

Update readme

parent 25b43161
...@@ -23,4 +23,30 @@ No depedencies ...@@ -23,4 +23,30 @@ No depedencies
Pour utiliser ce convertisseur, veuillez suivre les étapes suivantes : Pour utiliser ce convertisseur, veuillez suivre les étapes suivantes :
1 - Placer le(s) fichier(s) hdoc que vous souhaitez convertir dans le dossier input (des exemples sont fournis dans le dossier sample). 1 - Placer le(s) fichier(s) hdoc que vous souhaitez convertir dans le dossier input (des exemples sont fournis dans le dossier sample).
2 - Lancer l'un des executable run.bat ou run.sh en fonction du système d'exploitation de votre ordinateur. 2 - Lancer l'un des executable run.bat ou run.sh en fonction du système d'exploitation de votre ordinateur.
3 - Récupérer le(s) résultat(s) dans le dossier output. 3 - Récupérer le(s) résultat(s) au format .json dans le dossier output.
\ No newline at end of file
##Conversion
------------
Ce module permet :
- L'extraction des données du header
- Titre
- Auteurs
- Mots clés
- Droits
- L'extraction des exercices conformément aux attentes de Kibana :
- Récupération des exercices et affectation d'un ID unique.
- Association des questions aux exercices grâce aux ID générés précédemment.
##TODO
------
- Prendre en compte les futures modification de la conversion opale_to_hdoc pour les exercices.
- Ajouter la gestion des sections sachant que Kibana ne considère pas les tableaux d'objets JSON. Pour cela, la solution que nous avons retenu :
- Générer des ID via la function generate-id() pour produire une clé de la forme section_ID.
- Ajouter une références vers l'id de la section mère dans chacun des fils. (Ex : "parent" : "section_ID")
##Technical notes
-----------------
Les tabulations lors de la conversion en JSON sont déconseillés car cela pose problème avec Kibana.
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xpath-default-namespace="http://www.utc.fr/ics/hdoc/xhtml" xpath-default-namespace="http://www.utc.fr/ics/hdoc/xhtml"
exclude-result-prefixes="xs" exclude-result-prefixes="xs"
version="2.0"> version="2.0">
<xsl:output omit-xml-declaration="yes" <xsl:output omit-xml-declaration="yes"
encoding="UTF-8"> encoding="UTF-8">
<!-- Encodage UTF-8 pour caractères spéciaux (accents...) --> <!-- Encodage UTF-8 pour caractères spéciaux (accents...) -->
</xsl:output> </xsl:output>
<!-- On remplace les quotes dans le texte pour éviter les problèmes de JSON --> <!-- On remplace les quotes dans le texte pour éviter les problèmes de JSON -->
<xsl:param name="pPattern">"</xsl:param> <xsl:param name="pPattern">"</xsl:param>
<xsl:param name="pReplacement">\\"</xsl:param> <xsl:param name="pReplacement">\\"</xsl:param>
<!-- --> <!-- -->
<xsl:template match="/" > <xsl:template match="/" >
{ {
<xsl:apply-templates select="html"/> <xsl:apply-templates select="html"/>
} }
</xsl:template> </xsl:template>
<!-- Extraction des informations du head --> <!-- Extraction des informations du head -->
<xsl:template match="head"> <xsl:template match="head">
"title" : "<xsl:value-of select="title/text()"/>", "title" : "<xsl:value-of select="normalize-space(title/text())"/>",
"keywords" : [ "keywords" : [
<xsl:for-each select="meta[@name='keywords']"> <xsl:for-each select="meta[@name='keywords']">
"<xsl:value-of select="@content"/>"<xsl:if test="position() != last()">,</xsl:if> "<xsl:value-of select="@content"/>"<xsl:if test="position() != last()">,</xsl:if>
</xsl:for-each> </xsl:for-each>
], ],
<xsl:apply-templates select="meta"/> <xsl:apply-templates select="meta"/>
</xsl:template> </xsl:template>
<!-- Extraction des informations du body --> <!-- Extraction des informations du body -->
<xsl:template match="body"> <xsl:template match="body">
<!-- Extraction des sections --> <!-- Extraction des sections -->
<xsl:apply-templates select="*/section[@data-hdoc-type='exercise']"/> <xsl:apply-templates select="*/section[@data-hdoc-type='exercise']"/>
</xsl:template> </xsl:template>
<xsl:template match="meta[@name='author']"> <xsl:template match="meta[@name='author']">
"author" : "<xsl:value-of select="@content"/>", "author" : "<xsl:value-of select="normalize-space(@content)"/>",
</xsl:template> </xsl:template>
<xsl:template match="meta[@name='date']"> <xsl:template match="meta[@name='date']">
"date" : "<xsl:value-of select="@content"/>", "date" : "<xsl:value-of select="normalize-space(@content)"/>",
</xsl:template> </xsl:template>
<xsl:template match="meta[@name='rights']"> <xsl:template match="meta[@name='rights']">
"rights" : "<xsl:value-of select="@content"/>", "rights" : "<xsl:value-of select="normalize-space(@content)"/>",
</xsl:template> </xsl:template>
<!-- Traitement des sections --> <!-- Traitement des sections -->
<xsl:template match="section[not(@data-hdoc-type='exercise')]"/> <xsl:template match="section[not(@data-hdoc-type='exercise')]"/>
<xsl:template match="section[@data-hdoc-type='exercise']"> <xsl:template match="section[@data-hdoc-type='exercise']">
"exercice_<xsl:value-of select="generate-id()"/>" : { "exercice_<xsl:value-of select="generate-id()"/>" : {
"titre" : "<xsl:value-of select="normalize-space(replace(header/h1/text(),$pPattern,$pReplacement))"/>", "titre" : "<xsl:value-of select="normalize-space(replace(header/h1/text(),$pPattern,$pReplacement))"/>",
<xsl:apply-templates select="div[@data-hdoc-type='description']"/> <xsl:apply-templates select="div[@data-hdoc-type='description']"/>
} <xsl:if test=". != (//section[@data-hdoc-type='exercise'])[last()] or div[@data-hdoc-type='question']">,</xsl:if> } <xsl:if test=". != (//section[@data-hdoc-type='exercise'])[last()] or div[@data-hdoc-type='question']">,</xsl:if>
<!-- On test si c'est le dernier exercice et qu'il n'a pas de question --> <!-- On test si c'est le dernier exercice et qu'il n'a pas de question -->
<xsl:apply-templates select="div[@data-hdoc-type='question']"> <xsl:apply-templates select="div[@data-hdoc-type='question']">
<xsl:with-param name="prev_id" select="generate-id()"/> <xsl:with-param name="prev_id" select="generate-id()"/>
<xsl:with-param name="is_not_last" select=". != (//section[@data-hdoc-type='exercise'])[last()]"/> <xsl:with-param name="is_not_last" select=". != (//section[@data-hdoc-type='exercise'])[last()]"/>
</xsl:apply-templates> </xsl:apply-templates>
</xsl:template> </xsl:template>
<!-- Traitement des question --> <!-- Traitement des question -->
<xsl:template match="div[@data-hdoc-type='question']"> <xsl:template match="div[@data-hdoc-type='question']">
<xsl:param name="prev_id"/> <xsl:param name="prev_id"/>
<xsl:param name="is_not_last"/> <xsl:param name="is_not_last"/>
"question_<xsl:value-of select="generate-id()"/>" : { "question_<xsl:value-of select="generate-id()"/>" : {
"parent" : "exercice_<xsl:value-of select="$prev_id"/>", "parent" : "exercice_<xsl:value-of select="$prev_id"/>",
<xsl:apply-templates select="div[@data-hdoc-type='description']"/> <xsl:apply-templates select="div[@data-hdoc-type='description']"/>
<xsl:apply-templates select="div[@data-hdoc-type='solution']"/> <xsl:apply-templates select="div[@data-hdoc-type='solution']"/>
}<xsl:if test="((position() != last()) or $is_not_last)">,</xsl:if> }<xsl:if test="((position() != last()) or $is_not_last)">,</xsl:if>
<!-- On test si c'est le dernier exercice et la dernière question --> <!-- On test si c'est le dernier exercice et la dernière question -->
</xsl:template> </xsl:template>
<!-- Traitement de l'élément description --> <!-- Traitement de l'élément description -->
<xsl:template match="div[@data-hdoc-type='description']"> <xsl:template match="div[@data-hdoc-type='description']">
"description" : "<xsl:value-of select="normalize-space(replace(./text(),$pPattern,$pReplacement))"/>" "description" : "<xsl:value-of select="normalize-space(replace(./text(),$pPattern,$pReplacement))"/>"
</xsl:template> </xsl:template>
<!-- Traitement de l'élément solution --> <!-- Traitement de l'élément solution -->
<xsl:template match="div[@data-hdoc-type='solution']"> <xsl:template match="div[@data-hdoc-type='solution']">
,"solution" : "<xsl:value-of select="normalize-space(replace(./text(),$pPattern,$pReplacement))"/>" ,"solution" : "<xsl:value-of select="normalize-space(replace(./text(),$pPattern,$pReplacement))"/>"
</xsl:template> </xsl:template>
</xsl:stylesheet> </xsl:stylesheet>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment