Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Stephane Crozat
hdoc
Commits
25142265
Commit
25142265
authored
Jan 11, 2017
by
Vincent Keller
Browse files
Update readme
parent
25b43161
Changes
2
Hide whitespace changes
Inline
Side-by-side
hdoc_to_elasticSearch/README.md
View file @
25142265
...
@@ -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
hdoc_to_elasticSearch/xsl/content_extractor.xsl
View file @
25142265
<?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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment