Commit 7daf11a0 authored by Etienne Chognard's avatar Etienne Chognard

Update

parent 5f0b0521
*/input/*
*/tmp/*
*/output/*
!*/input/sample.*
*.DS_Store*
\ No newline at end of file
# Converter framapad_to_hdoc
## License
License GPL3.0
http://www.gnu.org/licenses/gpl-3.0.txt
## Credits
- 2016
- Etienne Chognard
- Fabien Boucaud
- 2015
- Jean-Côme Douteau
- Gabrielle Rit
- Jean Vintache
- 2014
- Fecherolle Cécile
## Presentation
This module is able to convert several [etherpad](http://etherpad.org/) files (exported as html files) to the hdoc format.
## User documentation
## User Story
Vous êtes un utilisateur de framapad et en créez un pour un projet. Après avoir travaillé sur votre pad, vous souhaitez transformer ce document en un autre format que vous pourrez utiliser dans un nouveau contexte de travail. Pour ce faire, vous exportez le framapad au format HTML grâce au bouton « Import/Export ». Vous récupérez ensuite les fichiers nécessaires à la transformation framapad to hdoc sur le répertoire git du projet hdoc (voir http://hdoc.crzt.fr/). Il ne vous reste alors plus qu'à placer le fichier html précédemment récupéré dans le dossier « input » du dossier framapad_to_hdoc et à exécuter le /run.bat si vous êtes sur Windows ou le /run.sh si vous êtes sur Linux/Mac. Cela produira une archive .hdoc dont l'intérêt est de servir de format de passage pour une transformation d'un format à un autre, et ce pour une grande variété de format. Il vous restera ensuite à déterminer le nouveau format dans lequel vous voulez transformer votre hdoc et utiliser le convertisseur approprié s'il existe.
## Running etherpad_to_hdoc.ant
1. Create an etherpad document and export it as an html file.
2. please place your html files in the `/input` folder
3. run the `run.[bat|sh]` script of your choice depending on your OS
4. and retrieve the hdoc outputs in the `/output` folder
## Unsupported
- Markdown
- Author paternity
- Etherpad timeline
- Chat
## Known bugs
- Nested lists in lists are not supported
Example :
`<ul>
<li>
<ul>
<li>
Never gonna give you up.
</li>
</ul>
</li>
<ul>`
- As a consequence, etherpad indentation is not supported because it is coded as nested lists.
## Product Backlog
Currently available on: https://framemo.org/framapad_to_opale
## TODO
- Markdown
## Technical notes
### Description of etherpad_to_hdoc.ant
#### Prelude
- Importation of necessary classes (antlib, htmlcleaner, jing)
- Creation of directories architecture tree
#### Transformations
- Use of htmlcleaner to transform the input file from html to xhtml. For more info, see http://htmlcleaner.sourceforge.net/index.php.
- Apply html2xhtml.xsl : this xsl extracts the content into <body> tags
- Apply html2xhtmlv1.xsl : this xsl is used as a fix and adds br tag at the end of lists (ul and ol)
- Apply html2xhtmlv2.xsl : this xsl surround text line with p tags and transforms non-hdoc tags into hdoc tags as s, u, strong tags.
- Apply html2xhtml3.xsl : this xsl is used as a fix, it deletes p tags when its child is ul or ol
- Apply xhtml2hdoc.xsl : this xsl transforms the content into hdoc structure
#### Post-transformations actions
- Build hdoc structure
- Jing checks if the output file is validated with the right rng schema
- Zip the directory into hdoc archive
### Supported tags
- html tags -> hdoc tags
- u, s, em, strong -> em
- li -> li
- ol -> ol
- br -> p
## Capitalisation
Using regular expression with xsl is a good way to parse a non xml file.
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." name="myantce" default="main">
<property file="etherpad_to_hdoc.properties"/>
<!-- import classes -->
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<taskdef name="htmlcleaner" classname="org.htmlcleaner.HtmlCleanerForAnt"/>
<taskdef name="jing" classname="com.thaiopensource.relaxng.util.JingTask"/>
<target name="start">
<delete dir="${tmp}" failonerror="false"/>
<mkdir dir="${tmp}"/>
<delete dir="${out}" failonerror="false"/>
<mkdir dir="${out}"/>
<delete dir="${log}" failonerror="false"/>
<mkdir dir="${log}"/>
</target>
<!-- Apply Xslt -->
<target name="apply-xslt">
<!-- clean html file (html -> xhtml) -->
<htmlcleaner src="${in}/${fileName}" dest="${tmp}/pad-clean.xml"/>
<!-- calls for pad-clean.xml internally -->
<xslt in="${xsl}/html2xhtml.xsl" out="${tmp}/${properName}/tmpPad.xhtml"
style="${xsl}/html2xhtml.xsl"/>
<delete file="${tmp}/pad-clean.xml"></delete>
<xslt in="${tmp}/${properName}/tmpPad.xhtml" out="${tmp}/${properName}/tmpPad2.xhtml"
style="${xsl}/html2xhtmlv1.xsl"/>
<xslt in="${tmp}/${properName}/tmpPad2.xhtml" out="${tmp}/${properName}/tmpPad3.xhtml"
style="${xsl}/html2xhtmlv2.xsl"/>
<xslt in="${tmp}/${properName}/tmpPad3.xhtml" out="${tmp}/${properName}/tmpPad4.xhtml"
style="${xsl}/html2xhtml3.xsl"/>
<xslt in="${tmp}/${properName}/tmpPad4.xhtml" out="${tmp}/${properName}/tozip/content.xml"
style="${xsl}/xhtml2hdoc.xsl"/>
</target>
<!-- Builds Hdoc structure -->
<target name="construct_hdoc">
<mkdir dir="${tmp}/${properName}/tozip/"/>
<mkdir dir="${tmp}/${properName}/META-INF/"/>
<mkdir dir="${tmp}/${properName}/tozip/META-INF"/>
<!-- container -->
<touch file="${tmp}/${properName}/META-INF/container.xml"/>
<echoxml file="${tmp}/${properName}/META-INF/container.xml">
<container version="1.0">
<rootfiles>
<rootfile full-path="${rootfilename}" media-type="text/xml"/>
</rootfiles>
</container>
</echoxml>
<xslt in="${tmp}/${properName}/META-INF/container.xml"
out="${tmp}/${properName}/tozip/META-INF/container.xml"
style="${xsl}/addNamespaceToContainer.xsl"/>
<!-- mimetype -->
<touch file="${tmp}/${properName}/mimetype"/>
<echo message="application/x-hdoc+zip" file="${tmp}/${properName}/tozip/mimetype"/>
</target>
<target name="jing-hdoc">
<jing file="${tmp}/${properName}/tozip/content.xml"
rngfile="${schema}/xhtml/hdoc1-xhtml.rng"/>
</target>
<!-- Zip Hdoc container -->
<target name="zip">
<zip basedir="${tmp}/${properName}/tozip/" destfile="${out}/${properName}.hdoc"/>
</target>
<target name="main">
<antcall target="start"/>
<for param="inputPad">
<path>
<fileset dir="${in}" includes="*.html"/>
</path>
<sequential>
<local name="padFileName"/>
<basename property="padFileName" file="@{inputPad}"/>
<local name="properFileName"/>
<basename property="properFileName" file="@{inputPad}" suffix=".html"/>
<echo>============ Processing pad : ${properFileName} ============</echo>
<antcall target="apply-xslt">
<param name="fileName" value="${padFileName}"/>
<param name="properName" value="${properFileName}"/>
</antcall>
<antcall target="construct_hdoc">
<param name="properName" value="${properFileName}"/>
</antcall>
<trycatch>
<try>
<!-- schema verification -->
<antcall target="jing-hdoc">
<param name="properName" value="${properFileName}"/>
</antcall>
<!-- zip hdoc if the schema is verified -->
<antcall target="zip">
<param name="properName" value="${properFileName}"/>
</antcall>
<!-- delete tmp files if everything went fine -->
<delete dir="${tmp}/${properFileName}" failonerror="false"/>
</try>
<catch>
<echo>WARNING</echo>
<echo>${properFileName} : the outptut doesn't match the hdoc schema</echo>
<echo>see the Jing log above and the tmp files</echo>
</catch>
</trycatch>
</sequential>
</for>
</target>
</project>
in = ${basedir}/input
out = ${basedir}/output
tmp = ${basedir}/tmp
xsl = ${basedir}/xsl
lib = ${basedir}/lib
log = ${basedir}/log
schema = ../schemas
rootfilename = content.xml
\ No newline at end of file
emplacement_hdoc=./to_zip
rootfile=./content.xml
output_xml=./to_zip/content.xml
\ No newline at end of file
<project name="EtherpadToHdoc" default="convert" basedir=".">
<property file="build.properties"/>
<!-- Builds Hdoc structure -->
<target name="construct_hdoc">
<mkdir dir="${emplacement_hdoc}" />
<mkdir dir="${emplacement_hdoc}/META-INF" />
<mkdir dir="${emplacement_hdoc}/OPS" />
<touch file="${emplacement_hdoc}/META-INF/container.xml" />
<touch file="${emplacement_hdoc}/mimetype" />
<echo message="application/x-hdoc+zip" file="${emplacement_hdoc}/mimetype" />
</target>
<!-- Fills Hdoc container -->
<target name="fill_container" depends="construct_hdoc">
<echoxml file="${emplacement_hdoc}/META-INF/container.xml">
<container version="1.0">
<rootfiles>
<rootfile full-path="${rootfile1}" media-type="text/xml" />
</rootfiles>
</container>
</echoxml>
</target>
<!-- Applies Perl Script to exported HTML file from Etherpad -->
<target name="perl_exec" depends="fill_container">
<exec executable="perl">
<arg value="src/normalization.pl"/>
<arg value="${InputPath}"/>
<!-- output dans intermediaire.xml -->
</exec>
</target>
<!-- Launches XSLT transform to Perl script output -->
<target name="xslt_exec">
<xslt style="src/etherpadTohdoc.xsl" in="tmp/intermediaire.xml" out="${output_xml}" />
</target>
<!-- Zipping Hdoc container -->
<target name="zip">
<zip basedir="${emplacement_hdoc}" destfile="${OutputPath}" />
</target>
<target name="convert" depends="fill_container, perl_exec, xslt_exec, zip"/>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<xsl:apply-templates select="//meta" mode="inHead"/>
<title><xsl:value-of select="//title"/></title>
</head>
<body>
<section>
<xsl:apply-templates select="@*|node()[not(self::meta)]" />
</section>
</body>
</html>
</xsl:template>
<xsl:template match="title">
</xsl:template>
<xsl:template match="meta" mode="inHead">
<xsl:for-each select="./*">
<meta name="{local-name(.)}" content="{./text()}"/>
</xsl:for-each>
<meta charset="utf-8"/>
<meta generator="HdocConverter/Etherpad"/>
</xsl:template>
<xsl:template match="meta">
</xsl:template>
<xsl:template match="h1 | h2 | h3 | h4 | h5 | h6">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:template>
<xsl:template match="important">
<div class="emphasis"><xsl:value-of select="."/></div>
</xsl:template>
<xsl:template match="exemple">
<div class="example"><xsl:value-of select="."/></div>
</xsl:template>
<xsl:template match="definition">
<div class="definition"><xsl:value-of select="."/></div>
</xsl:template>
<xsl:template match="br">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:template>
<xsl:template match="br|b|i|ul|ol|li|u|del">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
#!/usr/bin/perl
($InputPath) = @ARGV;
use FindBin;
# OPENING INPUT AN OUTPUT FILES
open(FICH_IN, '<', $InputPath) or die $!;
open(FICH_OUT, '+>', $FindBin::Bin . "/../tmp/intermediaire.xml") or die $! . $FindBin::Bin . "/../tmp/intermediaire.xml";
$insideMeta = 0;
$insideImportant = 0;
$insideExemple = 0;
$insideDefinition = 0;
$insideAttention = 0;
print FICH_OUT '<!-- <?oxygen RNGSchema="http://scenari.utc.fr/hdoc/schemas/xhtml/hdoc1-xhtml.rng" type="xml"?> -->';
while($_ = <FICH_IN>)
{
#print "\n current line : " . $_;
$isDone = 0;
# REMOVE NON-BREAKABLE SPACES AT END OF LINES (USELESS)
while ($_ =~s/&nbsp;//s) {
$_ =~s/&nbsp;//s;
}
# REPLACE BROKEN <br tags by <br/>
while ($_ =~ s/<br$//) {
$_ = $_ . "<br/>";
}
# REMOVE ends of broken br tags
if ($_ =~ /^\/>/) {
$_ =~ s/\/>//;
}
# REMOVE EXISTING DOCTYPE AND META
if ($_ =~ /<!DOCTYPE|<meta|<META/) {
$isDone = 1;
}
# REPLACE HTML TAG BY A SIMPLE ONE (WITHOUT NAMESPACE)
if ($_ =~ /<html/) {
print FICH_OUT "<html>";
$isDone = 1;
}
# TITLE LEVELS
if ($_ =~ /(={1,6})\s(.*)?\s\1/) {
$title_lvl = length $1;
print FICH_OUT '<h' . $title_lvl . '>' . $2 . '</h' . $title_lvl . '>';
$isDone = 1;
}
# META DATA BLOCK
if ($_ =~ /\{#/) {
$insideMeta = 1;
print FICH_OUT '<meta>';
$isDone = 1;
}
if ($_ =~ /#}/) {
$insideMeta = 0;
print FICH_OUT '</meta>';
$isDone = 1;
}
if ($insideMeta == 1)
{
if ($_ =~ /\#([a-z]{1,15})\s([^\#]+)/g)
{
print FICH_OUT "<" . $1 . ">" . $2 . "</" . $1 . ">";
}
$isDone = 1;
}
# IMPORTANT BLOCK
if ($_ =~ /.*\$}/ && !($_ =~ /{\$.*/)) {
$insideImportant = 0;
print FICH_OUT '</important>';
$isDone = 1;
}
if ($insideImportant == 1) {
print FICH_OUT $_;
$isDone = 1;
}
if ($_ =~ /{\$.*/) {
$insideImportant = 1;
print FICH_OUT '<important>';
$isDone = 1;
}
# EXAMPLE BLOCK
if ($_ =~ /.*-}/ && !($_ =~ /{-.*/)) {
$insideExemple = 0;
print FICH_OUT '</exemple>';
$isDone = 1;
}
if ($insideExemple == 1) {
print FICH_OUT $_;
$isDone = 1;
}
if ($_ =~ /{-.*/) {
$insideExemple = 1;
print FICH_OUT '<exemple>';
$isDone = 1;
}
# DEFINITION BLOCK
if ($_ =~ /.*:}/ && !($_ =~ /{:.*/)) {
$insideDefinition = 0;
print FICH_OUT '</definition>';
$isDone = 1;
}
if ($insideDefinition == 1) {
print FICH_OUT $_;
$isDone = 1;
}
if ($_ =~ /{:.*/) {
$insideDefinition = 1;
print FICH_OUT '<definition>';
$isDone = 1;
}
# attention BLOCK
if ($_ =~ /.*!}/ && !($_ =~ /{!.*/)) {
$insideAttention = 0;
print FICH_OUT '</attention>';
$isDone = 1;
}
if ($insideAttention == 1) {
print FICH_OUT $_;
$isDone = 1;
}
if ($_ =~ /{!.*/) {
$insideAttention = 1;
print FICH_OUT '<attention>';
$isDone = 1;
}
if ($isDone == 0) { # if line has been handled without detecting anything, we print it
print FICH_OUT $_;
}
} # END OF FILE LOOP
close(FICH_IN);
close(FICH_OUT);
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="en-us" />
<title>/4DC226pyXC</title>
</head>
<body>Réunion EPIN du 5 janvier 2012<br
/><br
/>Intervention de Virginie Julliard et Julia Bonaccorsi<br
/><br
/><b>Introduction</b><br
/>Projet CDE: divers terrains: aujourd'hui débat CNDP Ivry.<br
/><br
/>Postulat: dispositif norme et régule l'action en mettant à disposition une forme<br
/>positionnement socio-sémiotique<br
/>texte supporté par un artefact technique<br
/>orise en compte de la matérialité sémiotique et documentaire qui sont autant de formes de médiation du politique<br
/>&nbsp;<br
/><b>Cadre théorique</b><br
/>Focus sur le concept de <b>dispositif </b>à partir de la relecture de Foucault par D&amp;G<br
/><br
/>4 dimensions&nbsp;&nbsp;<br
/><br
/><ul><li>1 : que rend visible le dispositif ( courbes de visibilité )&nbsp;&nbsp;<br/><br
/></li
><li>2 : régime d'énoncé : quels types de discours sont rendus possibles&nbsp;&nbsp;<br/><br
/></li
><li>3: dimension de rapport de pouvoir entre acteurs<br/><br
/></li
><li>4ème dimension : la créativité =&gt; comment des choses échappent, fuient<br/><br
/></li></ul
>étude d'une construction du sens<br
/><br
/>La technologie joue un rôle particulier dans le phénomèe de la médiation<br
/>dispositif : en mouvement, rend possible la notion de mouvement<br
/><br
/>focus notion de<b> format</b><br
/>Structure récurrente, traits reproductibles, qui induit standardisation des contenus.&nbsp;<br
/>pour les médias informatisées: ce qui va orienter le regard, donner à voir et à lire selon des traits reproductibles et permanents. Lien avec notion de <b>cadre</b>: ce qui sépare/ ce qui organise et met en forme un contenu interne.<br
/><br
/><b>Cas d'étude du débat CPDP</b><br
/>importance de la temporalité: saisir l'évolution du dispositif dans le temps long, qu'est ce qui est cadré? qu'est ce qui va évoluer?&nbsp;<br
/><br
/>Polysémie du concept qui charrie incompréhensions et malentendus.&nbsp;<br
/>Cas de la CNDP : macro-dispo (la procédure), le site web (méso) et les formats d'expression en micro-dispositifs.<br
/>Imbrication des dispositifs dans la procédure de concertation, multiplicité des formats<br
/><br
/>QR: comment les acteurs s'approprient les formats?&nbsp;<br
/><br
/>1) comment le dispositif va canaliser le débat dans une multiplicité de format<br
/>2/ interpretation du format par les acteurs du débat<br
/><br
/><br
/><b>Terrain</b><br
/><br
/><ul><li>1. faire participer</li></ul
>Corrélation entre élargissement du débat et multiplication des formats qui le canalisent.&nbsp;<br
/>l'imbrication des dispositifs<br
/>Mise en abyme du dispositif, diffusion des questions web lors des rencontres en face-à-face et réappropriation des débats web par les participants en face-à-face.&nbsp;<br
/>focus sur les cahiers d'acteurs: fort contrôle éditorial: s'explique par une volonté d'inclusion et de limiter les asymétries de ressources.&nbsp;<br
/><br
/>l'exemple des cahiers d'acteurs<br
/><br
/>volonté d'imbriquer les deux types de dispositifs : site web et réunions publiques (hybridation en ligne/hors ligne)<br
/><br
/>vie et rajectoire d'un texte depuis un blog jusqu'aux Q/R<br
/>Variété des formats qui s'explique par la circulation des acteurs : circulation des énoncés à travers les formats?&nbsp;<br
/>L'appropriation des formats est stratégique.&nbsp;<br
/>La sémiotique des formats n'est pas toujours perçue par les concepteurs.<br
/>Etude de la trajectoire des énoncés à travers les différents formats.&nbsp;<br
/>Une "balistique" des énoncés à la Chateauraynaud? (pas vraiment, la temporalité n'est pas la même.<br
/><br
/>opérationnaliser la notion de dispositif dans le c&nbsp;&nbsp;&nbsp; aadre des procédures délibératives.<br
/>imbrication tellement forte qu'il a fallu piocher dans la notion de format.&nbsp;<br
/><br
/>les dispositifs servent de support aux sorties du dispositifs.&nbsp; Comment en suivant des textes on peut voir comment les acteurs s'approprisent des formats et stratégisent leur usage.&nbsp;<br
/><br
/>Débat<br
/>Jérôme : dimensions substantielle et formelle du dispositif, à ne pas confondre.<br
/>Serge : Genre et format. Genre comme système d'attente et de reconnaissance.&nbsp;<br
/>Virginie : Format et mise en scène qui fige le texte. Le genre ne fige pas, ne reproduit pas le contenu.&nbsp;<br
/><br
/><br
/></body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<container version="1.0">
<rootfiles>
<rootfile full-path="../OPS/file1.xml" media-type="text/xml" />
</rootfiles>
</container>
<?xml version="1.0" encoding="UTF-8"?><html>
<head>
<meta content="Cécile&#10;" name="auteur"/>
<meta content="26/12/13&#10;" name="date"/>
<meta charset="utf-8"/>
<meta generator="HdocConverter/Etherpad"/>
<title>/WgiCsM6pyN</title>
</head>
<body>
<section>
<br/>
<br/>
<h2>Titre de niveau 2 : démo NF29 Etherpad vers Hdoc</h2>
<br/>
<div class="definition"> Une définition ici
</div>
<br/>Du texte simple en plein milieu
<br/>
<br/>
<div class="example">Et un paragraphe exemple avec un bout en italique
</div>
<br/>
<br/>
<br/>
<br/>
</section>
</body>
</html>
application/x-hdoc+zip
\ No newline at end of file
@echo off
set lib=lib
set ant=etherpad_to_hdoc.ant
set antparam=-Dprogram.param=%1
set scJarList=%lib%\*
java.exe -classpath "%scJarList%" -Xmx150m org.apache.tools.ant.Main -buildfile %ant% %antparam%
pause
REM start /MIN java.exe -classpath "%scJarList%" -Xmx150m org.apache.tools.ant.Main -buildfile %ant% %antparam%
#!/bin/sh
lib="lib"
ant="etherpad_to_hdoc.ant"
antparam="-Dprogram.param=$1"
#Recherche de java et controle que se soit une version SUN
vJavaCmd="java"
xCheckJava () {
vInputVarName=\$"$1"
vInputVarVal=`eval "expr \"$vInputVarName\" "`
if [ -z "$vInputVarVal" ];then
eval "$1=false"
return
fi
vSunJavaFound=`$vInputVarVal -version 2>&1 | grep -Eo -m 1 "(HotSpot)|(OpenJDK)"`
if [ "$vSunJavaFound" != "HotSpot" ] && [ "$vSunJavaFound" != "OpenJDK" ] ; then
eval "$1=false"
return
fi
}
xCheckJava vJavaCmd
if [ "$vJavaCmd" = "false" ]; then
vJavaCmd="$JAVA_HOME/bin/java"
xCheckJava vJavaCmd
if [ "$vJavaCmd" = "false" ]; then
echo "ERREUR: JRE de SUN introuvable. Veuillez déclarer la variable d'environnement JAVA_HOME."
exit 1
fi
fi
#Lancer la commande
scJarList="$lib/*"
$vJavaCmd -classpath "$scJarList:" -Xmx150m org.apache.tools.ant.Main -buildfile $ant $antparam
<?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"
xmlns="urn:utc.fr:ics:hdoc:container">
<xsl:output method="xml" indent="yes"/>
<!-- Identity transformation -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Namespace substitution for hdoc elements -->
<xsl:template match="*" priority="1">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="container" priority="2">
<xsl:processing-instruction name="oxygen">RNGSchema="http://scenari.utc.fr/hdoc/schemas/container/hdoc1-container.rng" type="xml"</xsl:processing-instruction>
<xsl:element name="{local-name()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<!-- Suppress processing-instructions -->
<xsl:template match="processing-instruction()" priority="1"/>
</xsl:stylesheet>
\ No newline at end of file