Commit c853c8cc authored by Aghiles's avatar Aghiles
Browse files

Merge branch 'master' of https://gitlab.utc.fr/crozatst/hdoc

parents 2ea5f2f6 16fe948d
...@@ -3,4 +3,4 @@ log=${basedir}/log ...@@ -3,4 +3,4 @@ log=${basedir}/log
xsl=${basedir}/xsl xsl=${basedir}/xsl
in=${basedir}/input in=${basedir}/input
out=${basedir}/output out=${basedir}/output
tmp=${basedir}/tmp tmp=${basedir}/tmp
\ No newline at end of file
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
<target name="convert"> <target name="convert">
<!-- Preparation for the file transformation : delete old folders and create new folders --> <!-- Preparation for the file transformation : delete old folders and create new folders -->
<delete dir="${tmp}" failonerror="false"/>
<mkdir dir="${tmp}"/> <mkdir dir="${tmp}"/>
<delete dir="${out}" failonerror="false"/> <delete dir="${out}" failonerror="false"/>
<mkdir dir="${out}"/> <mkdir dir="${out}"/>
......
...@@ -10,9 +10,9 @@ ...@@ -10,9 +10,9 @@
</xsl:template> </xsl:template>
<xsl:template match="h:head" mode="title"> <xsl:template match="h:head" mode="title">
<titre> <title>
<xsl:value-of select="./h:title"/> <xsl:value-of select="./h:title"/>
</titre> </title>
<xsl:apply-templates select="./h:meta"/> <xsl:apply-templates select="./h:meta"/>
</xsl:template> </xsl:template>
...@@ -44,29 +44,32 @@ ...@@ -44,29 +44,32 @@
<xsl:template match="h:section"> <xsl:template match="h:section">
<section> <section>
<titresection> <typesection>
<xsl:value-of select="@data-hdoc-type"/>
</typesection>
<titlesection>
<xsl:value-of select="./h:header/h:h1"/> <xsl:value-of select="./h:header/h:h1"/>
</titresection> </titlesection>
<contenu> <content>
<paragraphs>
<paragraphes>
<xsl:apply-templates select="h:div"/> <xsl:apply-templates select="h:div"/>
</paragraphes> </paragraphs>
<xsl:apply-templates select="h:section" mode="soussect"/> <xsl:apply-templates select="h:section" mode="soussect"/>
</contenu> </content>
</section> </section>
</xsl:template> </xsl:template>
<xsl:template match="h:section" mode="soussect"> <xsl:template match="h:section" mode="soussect">
<soussection></soussection> <soussection></soussection>
</xsl:template> </xsl:template>
<xsl:template match="h:div" > <xsl:template match="h:div" >
<xsl:if test="h:p"> <xsl:if test="h:p">
<paragraphe> <paragraph>
<xsl:value-of select="."/> <xsl:value-of select="."/>
</paragraphe> </paragraph>
</xsl:if> </xsl:if>
<xsl:if test="h:ul"> <xsl:if test="h:ul">
<xsl:apply-templates select="h:ul"></xsl:apply-templates> <xsl:apply-templates select="h:ul"></xsl:apply-templates>
...@@ -75,9 +78,9 @@ ...@@ -75,9 +78,9 @@
</xsl:template> </xsl:template>
<xsl:template match="h:ul"> <xsl:template match="h:ul">
<xsl:for-each select="h:li"> <xsl:for-each select="h:li">
<paragraphe> <paragraph>
<xsl:value-of select="h:p"/> <xsl:value-of select="h:p"/>
</paragraphe> </paragraph>
</xsl:for-each> </xsl:for-each>
</xsl:template> </xsl:template>
......
...@@ -22,7 +22,7 @@ There's no particular dependencies needed to run the converter. ...@@ -22,7 +22,7 @@ There's no particular dependencies needed to run the converter.
Conditions particulières Conditions particulières
--- ---
Pour le moment, il ne faut pas utilisé les "sous-Division" de Opale. Les divisions à la racine sont autorisées. Pour le moment, il ne faut pas utiliser les "sous-Division" de Opale. Les divisions à la racine sont autorisées.
User Story User Story
--- ---
...@@ -31,3 +31,39 @@ User Story ...@@ -31,3 +31,39 @@ User Story
* Put the `.hdoc` files in the input folder * Put the `.hdoc` files in the input folder
* Run `run.bat` or `run.sh` according to your operating system * Run `run.bat` or `run.sh` according to your operating system
* The output files are in the output folder * The output files are in the output folder
DONE
---
Opale Hdoc Canoprof
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Module fichier hdoc Programme
Objectif / Introduction / Conclusion du module Section contenant une div avec un header et du texte Séance contenant une activité de type description courte
Division ou activité Section Séance
Grain opale Section contenant une section Activité Texte et multimédia
Parties et sous-partie d’un grain section/section/section... Activité Texte et multimédia
Définition div avec un attribut data-hdoc-type = definiton Définition
Exemple div avec un attribut data-hdoc-type = example Exemple
Remarque div avec un attribut data-hdoc-type = remark Hypothèse (information?)
Conseil div avec un attribut data-hdoc-type = advice Conseil
Attention div avec un attribut data-hdoc-type = warning Attention
Complément div avec un attribut data-hdoc-type = complement Complément
Fondamental div avec un attribut data-hdoc-type = emphasis Méthode
Remarque : le texte, les listes, les tableaux fonctionnent.
TODO
---
Points particuliers de Canoprof :
Questions avec corrigé
Consigne élève
Remarque prof
Blocs :
Information Pas traité (à faire dans Opale_to_Hdoc et Hdoc_to_canoprof)
Méthode Pas traité (à faire dans Opale_to_Hdoc et Hdoc_to_canoprof)
Rappel Pas traité (à faire dans Opale_to_Hdoc et Hdoc_to_canoprof)
Syntaxe Pas traité Pas traité (à faire dans Opale_to_Hdoc et Hdoc_to_canoprof)
Texte légal Pas traité Pas traité (à faire dans Opale_to_Hdoc et Hdoc_to_canoprof)
Simulation Pas traité Pas traité (à faire dans Opale_to_Hdoc et Hdoc_to_canoprof)
\ No newline at end of file
...@@ -77,6 +77,17 @@ ...@@ -77,6 +77,17 @@
<xsl:if test="not(./h:header/h:h1/text())"> Untitled </xsl:if> <xsl:if test="not(./h:header/h:h1/text())"> Untitled </xsl:if>
<xsl:value-of select="./h:header/h:h1"/> <xsl:value-of select="./h:header/h:h1"/>
</sp:title> </sp:title>
<!-- If a SOLO section have a div; this div become a Canoprof's resume of the current seance.
<xsl:if test="./h:div/*">
<sp:abstract>
<cp:txtDesc>
<xsl:apply-templates select="./h:div/*" mode="resume"/>
</cp:txtDesc>
</sp:abstract>
</xsl:if>
-->
</cp:sessionM> </cp:sessionM>
<xsl:apply-templates select="./*"/> <xsl:apply-templates select="./*"/>
</cp:session> </cp:session>
...@@ -144,10 +155,38 @@ ...@@ -144,10 +155,38 @@
</xsl:template> </xsl:template>
<!-- CanoProf's Activite TetM (section) = hdoc's body/Section/Section/(Section...) = Opale's Grain (partie) --> <!-- CanoProf's Activite TetM (section) = hdoc's body/Section/Section/(Section...) = Opale's Grain (partie) -->
<!-- TODO -->
<xsl:template match="h:section" mode="CanoprofSection"> <xsl:template match="h:section" mode="CanoprofSection">
<sp:section>
<cp:textActivity>
<cp:activityM>
<sp:title>
<xsl:if test="not(./h:header/h:h1/text())"> Untitled </xsl:if>
<xsl:value-of select="./h:header/h:h1"/>
</sp:title>
<xsl:if test="(./h:header/h:div[@data-hdoc-type = 'introduction']/text())">
<xsl:apply-templates
select="./h:header/h:div[@data-hdoc-type = 'introduction']"/>
</xsl:if>
</cp:activityM>
<xsl:if test="./h:div/*">
<sp:body>
<cp:blocks>
<xsl:apply-templates select="./h:div"/>
</cp:blocks>
</sp:body>
</xsl:if>
<xsl:if test="./h:section/*">
<xsl:apply-templates select="./h:section" mode="CanoprofSection"/>
</xsl:if>
</cp:textActivity>
</sp:section>
</xsl:template> </xsl:template>
<!-- TODO : intro/conlcusion/obj d'une activité....
<xsl:template match="h:section[@data-hdoc-type = 'introduction'] | h:section[@data-hdoc-type = 'conclusion']">
</xsl:template>
-->
<!-- Div related templates --> <!-- Div related templates -->
<!-- Formatting content based on @data-hdoc-type --> <!-- Formatting content based on @data-hdoc-type -->
<xsl:template match="h:div"> <xsl:template match="h:div">
...@@ -359,6 +398,18 @@ ...@@ -359,6 +398,18 @@
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
<!--
<xsl:template match="h:p | h:ul | h:ol" mode="resume">
<xsl:if test="not(preceding-sibling::h:p)">
<xsl:if test="not(preceding-sibling::h:ul)">
<xsl:if test="not(preceding-sibling::h:ol)">
<xsl:call-template name="blockloop"/>
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:template>
-->
<xsl:template name="blockloop"> <xsl:template name="blockloop">
<xsl:for-each select=". | ./following-sibling::*"> <xsl:for-each select=". | ./following-sibling::*">
<xsl:choose> <xsl:choose>
...@@ -401,6 +452,7 @@ ...@@ -401,6 +452,7 @@
</sc:inlineStyle> </sc:inlineStyle>
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
<xsl:template match="h:em"> <xsl:template match="h:em">
<xsl:if test="./* | ./text()"> <xsl:if test="./* | ./text()">
<sc:inlineStyle role="emphasis"> <sc:inlineStyle role="emphasis">
...@@ -408,6 +460,7 @@ ...@@ -408,6 +460,7 @@
</sc:inlineStyle> </sc:inlineStyle>
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
<xsl:template match="h:q"> <xsl:template match="h:q">
<xsl:if test="./* | ./text()"> <xsl:if test="./* | ./text()">
<sc:phrase role="quote"> <sc:phrase role="quote">
...@@ -415,6 +468,7 @@ ...@@ -415,6 +468,7 @@
</sc:phrase> </sc:phrase>
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
<xsl:template match="h:sub"> <xsl:template match="h:sub">
<xsl:if test="./* | ./text()"> <xsl:if test="./* | ./text()">
<sc:textLeaf role="ind"> <sc:textLeaf role="ind">
...@@ -422,6 +476,7 @@ ...@@ -422,6 +476,7 @@
</sc:textLeaf> </sc:textLeaf>
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
<xsl:template match="h:sup"> <xsl:template match="h:sup">
<xsl:if test="./* | ./text()"> <xsl:if test="./* | ./text()">
<sc:textLeaf role="exp"> <sc:textLeaf role="exp">
...@@ -429,6 +484,7 @@ ...@@ -429,6 +484,7 @@
</sc:textLeaf> </sc:textLeaf>
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
<xsl:template match="h:a"> <xsl:template match="h:a">
<xsl:if test="./* | ./text()"> <xsl:if test="./* | ./text()">
<sc:phrase role="url"> <sc:phrase role="url">
...@@ -491,6 +547,17 @@ ...@@ -491,6 +547,17 @@
<xsl:apply-templates select="./*"/> <xsl:apply-templates select="./*"/>
</sc:cell> </sc:cell>
</xsl:template> </xsl:template>
<!-- Display images -->
<xsl:template match="h:img">
<sp:txt>
<cp:txt>
<sc:para xml:space="preserve">
<sc:inlineImg role="ico" sc:refUri="res/{./@src}"/>
</sc:para>
</cp:txt>
</sp:txt>
</xsl:template>
<xsl:template match="h:header"/> <xsl:template match="h:header"/>
<!-- Its content is already used in <xsl:template match="h:section"> --> <!-- Its content is already used in <xsl:template match="h:section"> -->
......
...@@ -16,4 +16,11 @@ Hdoc to ElasticSearch module extract data from an Hdoc file to use it with Elast ...@@ -16,4 +16,11 @@ Hdoc to ElasticSearch module extract data from an Hdoc file to use it with Elast
## Dependence ## Dependence
------------- -------------
No depedencies No depedencies
\ No newline at end of file
##Utilisation
-------------
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).
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.
\ No newline at end of file
<project name="hdoc_to_elasticsearch" default="clean"> <project name="hdoc_to_elasticsearch" default="executeTransformation">
<!-- Use contribant --> <!-- Use contribant -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties"> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
...@@ -27,32 +27,51 @@ ...@@ -27,32 +27,51 @@
<echo message="JSON File creation" /> <echo message="JSON File creation" />
<xslt in="${tmpHdoc}/${fileToParseName}/content.xml" out="${outputPath}/${fileToParseName}.json" style="xsl/content_extractor.xsl"/> <xslt in="${tmpHdoc}/${fileToParseName}/content.xml" out="${outputPath}/${fileToParseName}.json" style="xsl/content_extractor.xsl"/>
</target> </target>
<!-- Check if input directory is empty -->
<target name="check.dir">
<fileset dir="${inputPath}" id="fileset">
<include name="*.hdoc"/>
</fileset>
<pathconvert refid="fileset" property="dir.contains-files" setonempty="false"/>
</target>
<!-- Parcours la liste des fichiers pour les transformer -->
<target name="targetAllFiles"> <!-- Use converter on all files in input -->
<target name="targetAllFiles" depends="check.dir" if="dir.contains-files">
<delete> <delete>
<fileset dir="${outputPath}"> <fileset dir="${outputPath}">
<include name="*.json"/> <include name="*.json"/>
</fileset> </fileset>
</delete> </delete>
<foreach target="jsonFiles" param="fileToParse"> <foreach target="jsonFiles" param="fileToParse">
<fileset dir="${inputPath}"> <path id="hdocFiles">
<include name="*.hdoc"/> <fileset dir="${inputPath}">
</fileset> <include name="*.hdoc"/>
</fileset>
</path>
</foreach> </foreach>
</target> <!-- Clear tmp files -->
<!-- Clear tmp files -->
<target name="clean" depends="targetAllFiles">
<echo message="Clean files" />
<!-- -->
<delete includeemptydirs="true" verbose="true"> <delete includeemptydirs="true" verbose="true">
<fileset dir="${tmpHdoc}"> </fileset> <fileset dir="${tmpHdoc}"> </fileset>
<dirset dir="${tmpHdoc}" includes="**/*" /> <dirset dir="${tmpHdoc}" includes="**/*" />
</delete> </delete>
<echo message="Conversion end" /> </target>
<!-- Tell user that he needs to provide input -->
<target name="noFileToUse" depends="check.dir" unless="dir.contains-files">
<delete>
<fileset dir="${outputPath}">
<include name="*.json"/>
</fileset>
</delete>
<echo message="You need to provide file in input directory." />
</target>
<!-- Main target -->
<target name="executeTransformation" depends="targetAllFiles, noFileToUse">
<echo message="End transformation" />
</target> </target>
</project> </project>
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- Namespaces -->
<xsl:stylesheet xmlns="http://www.utc.fr/ics/hdoc/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs" version="2.0" xmlns:sc="http://www.utc.fr/ics/scenari/v3/core"
xmlns:sp="http://www.utc.fr/ics/scenari/v3/primitive" xmlns:op="utc.fr:ics/opale3">
<xsl:template match="sc:item">
<xsl:apply-templates/>
</xsl:template>
<!-- MODULE -->
<xsl:template match="op:ue">
<!-- RNG -->
<xsl:processing-instruction name="oxygen">
RNGSchema="http://hdoc.crzt.fr/schemas/xhtml/hdoc1-xhtml.rng" type="xml"
</xsl:processing-instruction>
<!-- HTML -->
<html>
<!-- MODULE"s HEADER -->
<head>
<xsl:apply-templates select="op:ueM/sp:title"/>
<meta charset="utf-8"/>
<meta content="HdocConverter/Opale3.4" name="generator"/>
<xsl:apply-templates select="op:ueM/sp:info"/>
</head>
<!-- MODULE's COMPONENTS -->
<body>
<xsl:apply-templates select="child::*[name() != 'op:ueM']"/>
</body>
</html>
</xsl:template>
<!-- Information -->
<xsl:template match="op:ueM/sp:info">
<xsl:apply-templates select="op:info/sp:keywds/op:keywds/sp:keywd"/>
<xsl:apply-templates select="op:info/sp:cc"/>
<xsl:apply-templates select="op:info/sp:cpyrgt/op:sPara/sc:para"/>
</xsl:template>
<!-- Titles -->
<xsl:template match="op:uM/sp:title | op:expUcDivM/sp:title | op:ueDivM/sp:title | op:exeM/sp:title">
<h1>
<xsl:value-of select="."/>
</h1>
</xsl:template>
<xsl:template match="op:ueM/sp:title">
<title>
<xsl:value-of select="."/>
</title>
</xsl:template>
<xsl:template match="op:pbTi/sp:title">
<h6>
<xsl:value-of select="."/>
</h6>
</xsl:template>
<!-- Subtitle -->
<xsl:template match="op:uM/sp:sTitle">
<h2>
<xsl:value-of select="."/>
</h2>
</xsl:template>
<!-- Liscences -->
<xsl:template match="op:ueM/sp:info/op:info/sp:cc">
<meta name="rights" content="{.}"/>
</xsl:template>
<xsl:template match="op:uM/sp:info/op:info/sp:cc">
<div data-hdoc-type="rights">
<xsl:value-of select="."/>
</div>
</xsl:template>
<!-- Keywords -->
<xsl:template match="op:ueM/sp:info/op:info/sp:keywds/op:keywds/sp:keywd">
<meta name="keywords" content="{.}"/>
</xsl:template>
<xsl:template match="op:uM/sp:info/op:info/sp:keywds">
<div data-hdoc-type="tags">
<xsl:apply-templates select="./op:keywds/sp:keywd"/>
</div>
</xsl:template>
<xsl:template match="op:uM/sp:info/op:info/sp:keywds/op:keywds/sp:keywd">
<span>
<xsl:value-of select="."/>
</span>
</xsl:template>
<!-- Author -->
<xsl:template match="op:ueM/sp:info/op:info/sp:cpyrgt/op:sPara/sc:para">
<meta name="author" content="{.}"/>
</xsl:template>
<xsl:template match="op:uM/sp:info/op:info/sp:cpyrgt/op:sPara/sc:para">
<div data-hdoc-type="author">
<xsl:value-of select="."/>
</div>
</xsl:template>
<!-- Division -->
<xsl:template match="op:ue/sp:div | op:ueDiv/sp:div">
<section data-hdoc-type="division">
<header>
<xsl:apply-templates select="./op:ueDiv/op:ueDivM/sp:title"/>
<xsl:apply-templates
select="./op:ueDiv/op:ueDivM/sp:info/op:info/sp:cpyrgt/op:sPara/sc:para"/>
<xsl:apply-templates select="./op:ueDiv/op:ueDivM/sp:info/op:info/sp:cc"/>
</header>
<!-- check for sub-division -->
<xsl:apply-templates select="./op:ueDiv/sp:div"/>
<!-- currently : grain & introduction & conclusion || adding "exercice redactionnel" || adding "actvite d'apprentissage" -->
<xsl:apply-templates select="./op:ueDiv/sp:intro"/>
<xsl:apply-templates select="./op:ueDiv/sp:courseUc"/>
<xsl:apply-templates select="./op:ueDiv/sp:conclu"/>
<xsl:apply-templates select="./op:ueDiv/sp:practUc"/>
<xsl:apply-templates select="./op:ueDiv/sp:courseUa"/>
<footer>
<xsl:apply-templates select="./op:ueDiv/op:ueDivM/sp:info/op:info/sp:keywds"/>
</footer>
</section>
</xsl:template>
<!-- Activity -->
<xsl:template match="sp:courseUa">
<section data-hdoc-type="activity">
<header>
<xsl:apply-templates select="./op:courseUa/op:uM/sp:title"/>
<xsl:apply-templates
select="./op:courseUa/op:uM/sp:info/op:info/sp:cpyrgt/op:sPara/sc:para"/>
<xsl:apply-templates select="./op:courseUa/op:uM/sp:info/op:info/sp:cc"/>
</header>
<!-- currently : grain & introduction & conclusion -->
<xsl:apply-templates select="./op:courseUa/sp:obj"/>
<xsl:apply-templates select="./op:courseUa/sp:intro"/>
<xsl:apply-templates select="./op:courseUa/sp:courseUc"/>
<xsl:apply-templates select="./op:courseUa/sp:conclu"/>
<!-- overview questions : regroup questions into a section-->
<xsl:if test="./op:courseUa/sp:quest">
<section data-hdoc-type="synthesis">
<header>
<h1>Questions de synthèse</h1>
</header>
<!-- a conclusion has only a bloc -->
<div>
<xsl:apply-templates select="./op:courseUa/sp:quest"/>
</div>
</section>
</xsl:if>
<footer>
<xsl:apply-templates select="./op:courseUa/op:uM/sp:info/op:info/sp:keywds"/>
</footer>
</section>