diff --git a/hdoc_to_mongo/README.md b/hdoc_to_mongo/README.md index 3cb53001e16e9e5439fec06916ff098031fb49e6..3f2bae7483395c8e2a6295de35e1d47f08a031e1 100644 --- a/hdoc_to_mongo/README.md +++ b/hdoc_to_mongo/README.md @@ -12,4 +12,9 @@ Kapilraj Thangeswaran This module is able to extract data from a file in Hdoc format and insert them into MongoDB. ## Dependencies -No dependance needed. \ No newline at end of file +No dependance needed. + +## User stories +En tant qu’utilisateur rédigeant des documents sous opale, je veux récupérer les exercices corrigés d’un sujet donné dans le but de les réutiliser. +En tant qu’utilisateur rédigeant des documents sous opale, je veux récupérer les cours d’un auteur précis dans le but d’utiliser ses cours comme références. +En tant qu’utilisateur universitaire, je souhaite mettre à disposition mes exercices sur internet de manière structuré dans le but de permettre à d’autre utilisateurs universitaires de les trouver, par thème, auteur ou contenu et de les réutiliser. diff --git a/hdoc_to_mongo/hdoc/META-INF/container.xml b/hdoc_to_mongo/hdoc/META-INF/container.xml new file mode 100644 index 0000000000000000000000000000000000000000..e0a201d4d28bcdc8f45e671be2a4dafbd115d650 --- /dev/null +++ b/hdoc_to_mongo/hdoc/META-INF/container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/hdoc_to_mongo/hdoc/content.xml b/hdoc_to_mongo/hdoc/content.xml new file mode 100644 index 0000000000000000000000000000000000000000..cade99aa72b89e18898a192027b1647c52c6b460 --- /dev/null +++ b/hdoc_to_mongo/hdoc/content.xml @@ -0,0 +1,55 @@ + + XSLT (opérations avancées) : expressions régulières et fichiers texte

Objectifs

Introduction

XSL-XSLT est un langage de programmation qui permet notamment de manipuler des documents XML.

Ce module a pour but de vous apporter des connaissances plus approfondies sur ce langage que vous connaissez déjà : l'utilisation de document non XML et d'expressions régulières.

Cours

Lecture de fichier texte non XML

Introduction

Dans cette partie du cours, nous allons voir comment utiliser un fichier texte brut (non XML) avec le langage XSLT.

Limitation du XSLT

Dans son principe de fonctionnement originel, XSLT est conçu pour prendre en entrée un fichier XML bien formé.

Lecture de fichier non XML

XSLT 2.0 introduit la possibilité de lire des fichiers texte qui ne sont pas nécessairement des fichiers XML bien formés.

La fonction :

unparsed-text($href as xs:string?, $encoding as xs:string) as xs:string?

permet en effet de lire une ressource externe et de renvoyer le résultat sous forme d'une chaîne de caractères.

L'argument $href correspond à l'URI de la ressource externe à lire.

Il est également possible de préciser un encodage spécifique via l'argument optionnel $encoding.

Exemple de lecture d'un fichier texte non XML

Lecture du fichier txt.txt, en utilisant l'encoding iso-8859-1. La fonction unparsed-text(...) récupère le contenu du fichier et renvoie le résultat sous forme d'une chaîne de caractère à la commande xsl :value-of, qui affiche donc le contenu du fichier lu.

<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + exclude-result-prefixes="xs" + version="2.0"> + +<xsl:output method="text"></xsl:output> + + <xsl:template match="/"> + <xsl:value-of select="unparsed-text('txt.txt', 'iso-8859-1')" disable-output-escaping="yes"/> + </xsl:template> + +</xsl:stylesheet>

Le paramètre disable-output-escaping, permet d'indiquer si les caractères spéciaux (comme '<' par exemple) sont échappés ou non.

Comment lancer la transformation sans fichier XML source ?

Habituellement l'utilisation d'une transformation XSLT se fait via le document XML source (en utilisant la processing instruction <?xml-stylesheet ... ?>).

<?xml version="1.0" encoding="UTF-8"?> +<?xml-stylesheet type="xsl" href="poeme.xsl"?> + +<poeme titre="The Stone Troll" auteur="JRR Tolkien"> +<strophe> +<vers>Troll sat alone on his seat of stone,</vers> +<vers>And munched and mumbled a bare old bone;</vers> +</strophe> +<strophe> +<vers>Up came Tom with his big boots on.</vers> +<vers>Said he to Troll: 'Pray, what is yon?</vers> +</strophe> +</poeme>

Pour pallier ce principe, si on ne souhaite pas faire appel à un fichier XML source, il faut utiliser le fichier XSLT (qui est du XML) comme entrée.

Expression régulière avec XSL-XSLT

Introduction

Dans cette partie du cours, nous allons voir comment utiliser des expressions régulières avec le langage XSLT, après avoir fait un rappel sur ce que sont les expressions régulières.

Qu'est ce qu'une expression régulière ?

Une expression régulière est une chaîne de caractères que l'on appelle parfois un motif et qui décrit un ensemble de chaînes de caractères possibles selon une syntaxe précise.

Une expression régulière est une suite de caractères typographiques (un « motif » ou « pattern ») décrivant une chaîne de caractères dans le but de la trouver dans un bloc de texte pour lui appliquer un traitement automatisé, comme un ajout, son remplacement ou sa suppression.

Syntaxe des expressions régulières dans XSL-XSLT/XPath.

Exemples d'expressions régulières
Exemples de regex

Expression régulière

Résultats

a

match le caractère a seul

a+b

match les mots commençants par a suivi de de zéro ou plusieurs a et finissant par b

[a-z]{5}

match les mots composés de 5 caractères compris entre a et z

a\.b+c?

match : a.b, a.bc, a.bb, a.bbc, a.bbbc...

(http|https|ftp):\/\/([a-zA-Z0-9]*)\.([a-zA-Z0-9]*)\.(com|net)

Pattern simpliste d'adresse web

Expressions régulières avec oXygen

Outils -> Constructeur des expressions régulières

Les expressions régulières dans XSL-XSLT

Dans le langage XSL-XSLT il y a 4 fonctions qui permettent d'utiliser les expressions régulières :

  1. tokenize

  2. matches

  3. replace

  4. xsl:analyze-string

Tokenize

La fonction tokenize($input, $pattern) est pratique car elle permet de séparer une chaîne de caractères en une séquence de chaînes de caractères.

L'argument $input désigne la chaîne de caractère d'entrée, et l'argument $pattern désigne le pattern (ou expression régulière) qui match le délimiteur choisi.

Exemple de récupération d'un fichier texte et de tokenize

On cherche à lire un fichier texte et à remplacer les sauts de lignes par des points virgules.

<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + exclude-result-prefixes="xs" + version="2.0"> + + <xsl:output method="text"></xsl:output> + + <xsl:template match="/"> + <xsl:for-each select="tokenize(unparsed-text('txt.txt', 'iso-8859-1'), '\r?\n')"> + <xsl:copy></xsl:copy><xsl:text>;</xsl:text> + </xsl:for-each> + </xsl:template> + +</xsl:stylesheet> +

Matches

La fonction matches($input, $pattern) permet de vérifier si $input match l'expression régulière $pattern.

Replace

La fonction replace($input, $pattern, $replacement) permet de remplacer les parties de $input qui matchent $pattern avec $replacement.

Analyse de chaîne de caractère

L'instruction xsl:analyze-string permet d'analyser une chaîne de caractère en fonction d'une expression régulière. On peut accéder aux sous chaînes de caractères qui correspondent à l'expression régulière avec l'instruction xsl:matching-substring, et inversement aux sous chaînes de caractères qui ne correspondent pas à la regex avec xsl:non-matching-substring.

<xsl:analyze-string + select = expression + regex = { string } + flags? = { string }> + <!-- Content: (xsl:matching-substring?, xsl:non-matching-substring?, xsl:fallback*) --> +</xsl:analyze-string>

Exemple d'analyse de string avec une regex

Cet exemple remplace tout les caractères '\n' (newline) par la balise <br/>.

<xsl:analyze-string select="abstract" regex="\n"> + <xsl:matching-substring> + <br/> + </xsl:matching-substring> + <xsl:non-matching-substring> + <xsl:value-of select="."/> + </xsl:non-matching-substring> +</xsl:analyze-string> +

Exercices

diff --git a/hdoc_to_mongo/hdoc/mimetype b/hdoc_to_mongo/hdoc/mimetype new file mode 100644 index 0000000000000000000000000000000000000000..ebda1c400b8705155e2254996113030590fd8dae --- /dev/null +++ b/hdoc_to_mongo/hdoc/mimetype @@ -0,0 +1 @@ +application/x-hdoc+zip \ No newline at end of file