Rapport sur les activités de TD

 

 

Gérard LY

 

 

 

 

 

Environnement de travail

 

 

Les informations sur l’environnement de travail peuvent être importantes pour la compatibilité des logiciels utilisés ainsi que pour les performances des parseurs et processeurs XSLT..

 

Ordinateur portable DELL Inspiron 4000

Processeur : Intel Pentium III

RAM : 128 Mo

Système d’exploitation : Windows Millenium

Machine Virtuelle Java : java 2 sdk 1.41.01 (inclus java 2 re 1.41.01)

 

 

 

 

 

TP XML

 

 

Le document sur lequel nous allons travailler est un corpus balisé au format XML réalisé en 2001 par Andrea Taillefer Kuncova et Aude Maisondieu dans le cadre d’un TD de phonétique.

Il a été constitué à partir d’extraits en version française et en version tchèque du livre Le Petit Prince d’Antoine de Saint-Exupéry.

Ce corpus est contenu dans le fichier SAINTEX.XML qui est associé à la DTD SAINTEX.DTD.

 

Les modifications que nous apporterons seront faites à l’aide de l’éditeur de textes UltraEdit-32 version 9.20b (http://www.ultraedit.com/downloads/index.html). Cet éditeur applique la coloration syntaxique pour les documents XML, il permet d’utiliser les expressions régulières de type Unix, d’exécuter des applications externes, et de créer des macros.

 

Par mesures de précautions, nous travaillerons sur une copie du fichier XML d’origine que nous appellerons PetitPrince.XML.

Nous supprimons le lien à la DTD SAINTEX.DTD puisque les modifications que nous allons apporter rendrons le document non-valide par rapport à la DTD d’origine.

Après chaque modification, nous ajouterons un chiffre derrière le nom du fichier XML pour nous permettre de garder une trace sur l’évolution du corpus.

 

 

 

Partie 1 : Avec RXP

 

Il nous faut maintenant vérifier que le document est bien-formé. Pour cela, nous utiliserons un parser XML : la version DOS de RXP (http://www.cogsci.ed.ac.uk/~richard/rxp.html).

 

 

En entrant la ligne de commande RXP –xs PetitPrince.XML le parser ne nous signale aucunes malformations dans le document. Nous pouvons donc commencer à le modifier.

 

 

a) Modification du document XML

 

Nous ajoutons d’abord les informations relatives aux dernières modifications du corpus entre les balises <entete> et </entete>.

 

     <derniere_modification>

         <nom>LY</nom>

         <prenom>Gérard</prenom>

         <email>magicg1@hotmail.com</email>

         <date>2002</date>

     </derniere_modification>

 

Puis nous ajoutons dans les balises <paragraphe> l’attribut « loc » pour indiquer le nom du locuteur avec narrateur ou LePetitPrince (conformément aux appellations utilisées dans le document XML).

Pour trouver le nom des différents locuteurs pour chaque paragraphe nous recherchons le motif suivant : <paragraphe>\r\n.*$ pour trouver la ligne suivant la balise <paragraphe> qui indique le nom du locuteur dans la balise <phrase>.

 

Nous observons que les balises <phrase> ont toujours la valeur "narrateur" pour l’attribut « loc », ce qui parait normal puisque le locuteur "LePetitPrince" n’apparaît que dans les dialogues.

Nous remplaçons alors toutes les balises <paragraphe> par les balises <paragraphe loc="narrateur">

 

Nous enregistrons le document sous PetitPrince1.XML et nous vérifions avec RXP que le document est bien-formé.

Nous pouvons maintenant modifier la DTD d’origine en fonction de nos modifications.

 

 

     b) Modification de la DTD

 

Nous commençons par copier la DTD d’origine SAINTEX.DTD dans le fichier PetitPrince.DTD.

 

Nous modifions et ajoutons les données relatives aux modifications du document XML :

<!ELEMENT entete (info_texte, info_corpus, derniere_modification?)>

<!ELEMENT derniere_modification (nom, prenom, email?, date)>

<!ELEMENT nom (#PCDATA)>

<!ELEMENT prenom (#PCDATA)>

<!ELEMENT email (#PCDATA)>

<!ATTLIST paragraphe loc CDATA #IMPLIED>

 

Pour une meilleure lisibilité nous restructurons la DTD en ajoutant des tabulations et des retours à la ligne, et  en plaçant les éléments en fonction de leur ordre d’apparition. Nous obtenons le fichier PetitPrince1.DTD

 

Nous ajoutons au fichier PetitPrince1.XML le lien à la DTD PetitPrince1.DTD puis nous utilisons RXP pour vérifier la validité du fichier XML.

En entrant la ligne de commande : RXP –Vs PetitPrince1.xml le parser nous indique plusieurs erreurs concernant les éléments AUDIO et image.

 

En regardant le fichier PetitPrince1.DTD et en examinant les lignes erronées indiquées par RXP dans le fichier PetitPrince1.XML, nous découvrons les erreurs suivantes :

 

1) Contrairement aux définitions de la DTD, l’élément « image » de la ligne 2064 est frère de l’élément « corps » alors qu’il devrait être son fils.

Pour corriger cette erreur, nous déplaçons cet élément juste avant la balise </corps>.

 

2) La balise <image> possède un attribut non spécifié dans la DTD et appartient à un élément père ayant le même nom. Par exemple : <image><image chemin="PP.gif"></image></image>.

Pour corriger ces erreurs, nous remplaçons dans le fichier XML la chaîne de caractère suivante :

 <image><image chemin="(\w+.\w+)"></image></image> par <image>\1</image>.

 

3) L’élément audio est désigné en lettres majuscules dans le fichier XML alors qu’il est désigné en minuscules dans la DTD.

Pour corriger ces erreurs, nous remplaçons dans le fichier XML la chaîne de caractère suivante :  <AUDIO(.*)></AUDIO>  par <audio\1></audio>.

 

4) L’élément audio possède les attributs « start » et « end » qui ne sont pas spécifiés dans la DTD. On le trouve aussi entre les balises <titre> et </titre> dans le document XML alors que la DTD ne spécifie pas qu’il peut être fils de l’élément titre.

Pour corriger ces erreurs, nous ajoutons et modifions dans la DTD les éléments suivants :

<!ELEMENT titre (#PCDATA | audio)*>

<!ATTLIST audio start CDATA #REQUIRED>

<!ATTLIST audio end CDATA #REQUIRED>

<!ELEMENT mot (#PCDATA | audio)*>

 

Nous enregistrons nos modifications dans les fichiers PetitPrince2.XML et PetitPrince2.DTD.

RXP ne nous signale aucunes erreurs entre le fichier XML et sa DTD.

 

 

 

Partie 2 : Avec Xerces-J 1.4.4 (Projet XML Apache)

 

 

Dans cette partie, nous utiliserons Xerces-J 1.4.4 (http://xml.apache.org/xerces2-j/index.html) pour tester notre document XML.

 

a) Modification du document XML

 

En examinant plus minutieusement le document PetitPrince2.XML, nous avons remarqué que le document comporte plusieurs erreurs entre les balises <mots> et </mot>.

 

Nous utiliserons Xerces-J pour vérifier la bonne formation et la validité du document après nos modifications.

 

Les erreurs que nous avons relevées sont les suivantes :

 

1) Certains mots sont suivit d’un espace insécable.

Pour corriger ces erreurs, nous supprimons l’espace en trop en recherchant le motif  </mot> et en le remplaçant par le motif </mot>.

 

2) On trouve « sà»r » à la place de « sûr », « à Â » à la place de « à », les mots « drà´le » au lieu de « drôle » à la ligne173, « Voià » au lieu de « Voilà » à la ligne 453 et « tàªte » au lieu de « tête » à la ligne 1964.

Nous faisons les remplacements nécessaires.

 

3) On observe aussi à la ligne 1159 qu’il y a une virgule mais pas de mot, et qu’il manque un signe de ponctuation à la ligne 1167 (dernier mot de la phrase). Après une recherche du texte « Le Petit Prince » sur internet, nous identifions les éléments manquants et nous ajoutons lui à la ligne 1159 et un point à la ligne 1167.

 

4) On trouve deux mots entre le couple de balises <mot> et </mot> à la ligne 474 : « dessin,bien »

Pour corriger cette erreur, nous recherchons le motif (\w+,)(\w+) et nous le remplaçons par le motifs \1</mot>\r\n\t\t\t\t\t\t<mot>\2.

 

Nous enregistrons nos modifications dans le fichier PetitPrince3.XML.

 

En entrant la ligne de commande java sax.SAXCount PetitPrince3.XML, nous avons eu le message d’erreur suivant :

[Fatal Error] :0:0: File "PetitPrince3.XML" not found.

org.xml.sax.SAXException: Stopping after fatal error: File "PetitPrince3.XML" not found.

        at org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1245

)

        at org.apache.xerces.readers.DefaultEntityHandler.startReadingFromDocume

nt(DefaultEntityHandler.java:501)

        at org.apache.xerces.framework.XMLParser.parseSomeSetup(XMLParser.java:3

14)

        at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1097)

        at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1139)

        at sax.SAXCount.print(SAXCount.java:158)

        at sax.SAXCount.main(SAXCount.java:392)

 

Nous vérifions la syntaxe de des arguments du programme car java est sensible à la casse, mais le problème ne semble pas venir de là. Après plusieurs test, nous comprenons que le chemin d’accès du fichier ne doit pas contenir de caractères accentués. Nous déplaçons donc nos fichiers dans un autre répertoire.

 

En entrant à nouveau la ligne de commande java sax.SAXCount PetitPrince3.XML, nous obtenons le message suivant :

PetitPrince3.XML: 830 ms (1776 elems, 703 attrs, 12505 spaces, 5924 chars)

Le parser ne nous signale aucunes malformations dans le document.

 

 

b) Modification de la DTD

 

Comme nous n’avons pas modifié la structure arborescente du document XML, il n’est pas nécessaire de modifier la DTD. Nous vérifions cependant que le document est bien valide en entrant la ligne de commande : java sax.SAXCount –v PetitPrince3.XML. Le message que nous obtenons ne nous signale aucunes erreurs, le document est donc valide :

PetitPrince3.XML: 1260 ms (1776 elems, 703 attrs, 12505 spaces, 5924 chars)

 

 

 

Partie 3 : Avec XML Cooktop

 

 

Le PetitPrince3.XML ne nous semble pas avoir besoin d’être modifié. Nous utiliserons seulement XML Cooktop (http://www.xmlcooktop.com/) pour vérifier que les documents précédemment créés sont bien formés et sont conformes à la DTD.

 

Comme prévu, XML Cooktop nous indique des erreurs dans les documents PetitPrince1.XML au moyen d’une boîte de dialogue.

 

 

 

XML Cooktop ne nous signale aucunes erreurs dans le fichier PetitPrince2.XML (les erreurs que nous avions corrigées étaient des erreurs de contenu) ni dans le fichier PetitPrince3.XML. Pour ces deux documents, le logiciel nous indique dans le coin inférieur gauche de la fenêtre principale : « The XML document is valid »

 

 

 

 

 

TP XSLT

 

 

Pour ce TP, nous utiliseront différents logiciels et modules de transformation : Xalan, XT, XML Cooktop et Mkcorpus.

Pour les parties 1 et 2, nous allons créer plusieurs feuilles de styles que nous appliquerons sur le document PetitPrince3.XML.

Pour la partie 3, testerons et commenterons des feuilles de styles construites pour des document syntaxiques au format XML.

 

 

Partie 1 : Avec Xalan (Projet XML Apache)

 

Dans cette partie, nous utiliserons Xalan-J 2.4.1 (http://xml.apache.org/xalan-j/index.html).

 

Nous enregistrerons les feuilles de style créées dans un fichier nommé PetitPrinceXalan*.XSL et le résultat de l’application des feuilles de style dans un fichier nommé PetitPrinceXalan*.html où * signifie le numéro de la feuille de style.

 

 

1) Définir une feuille de styles minimale pour formater le document XML fourni en HTML

 

Nous créons une feuille de style qui mettra en forme les informations contenues entre les balises <entete> et </entete> mais elle ne donnera pas de mise en forme au reste du document XML.

 

Feuille de style : PetitPrinceXalan1.XSL

Résultat : Résultat : PetitPrinceXalan1.html

 

On observe que Xalan conserve les tabulations du document XML source et ajoute un retour à la ligne après chaque balise. Cela évite de devoir insérer un espace entre chaque mot mais rend le code html un peu confus.

Xalan ajoute la ligne <META http-equiv="Content-Type" content="text/html; charset=UTF-8">.

 

 

2) Séparer les phrases par des paragraphes, les traductions en tchèque et français par des sauts de lignes et les mots par des espaces

 

Nous utilisons la feuille de Feuille de style PetitPrinceXalan1.XSL que nous modifions.

 

Feuille de style : PetitPrinceXalan2.XSL

Résultat : PetitPrinceXalan2.html

 

 

3) Mettre les phrases du narrateur en rouge et celles du Petit prince en vert

 

Nous utilisons la feuille de Feuille de style PetitPrinceXalan2.XSL que nous modifions.

 

Feuille de style : PetitPrinceXalan3.XSL

Résultat : PetitPrinceXalan3.html

 

 

4) N'afficher que la traduction en tchèque

 

Nous utilisons la feuille de Feuille de style PetitPrinceXalan3.XSL que nous modifions.

 

Feuille de style : PetitPrinceXalan4.XSL

Résultat : PetitPrinceXalan4.html

 

Nous obtenons le résultat souhaité mais le document html comporte plusieurs des balises de mise en forme en trop. Ce sont en fait les balises qui apparaissent au niveau des traductions françaises non-affichées.

 

 

Nous décidons donc de ne mettre en forme que les paragraphes et les phrases des traductions en tchèques. Voici ce que nous obtenons :

 

Feuille de style : PetitPrinceXalan4a.XSL

Résultat : PetitPrinceXalan4a.html

 

Nous constatons que certaines phrase en français apparaissent sur la même ligne que certaines des phrases en tchèque. Cela est dû au fait qu’entre la ligne 350 et 387 du document PetitPrince3.XML les éléments phrases contiennent deux éléments petit-fils traduction alors qu’ils n’en contiennent qu’un seul dans tout le reste du document.

 

 

Nous modifions donc la feuille de style pour n’afficher que les phrases en tchèque, sans les balises HTML inutiles :

 

Feuille de style : PetitPrinceXalan4.XSL

Résultat : PetitPrinceXalan4b.html

 

 

5) Mettez en gras le mot "mouton"

 

Nous utilisons la feuille de Feuille de style PetitPrinceXalan3.XSL que nous modifions.

 

Nous prenons  en compte les signes de ponctuation puisque le mot mouton peut apparaître suivit d’un signe de ponctuation quelconque.

 

Feuille de style : PetitPrinceXalan5.XSL

Résultat : PetitPrinceXalan5.html

 

 

6) Ne ramener que les traductions en français des phrases qui comporte un mot "mouton"

 

Feuille de style : PetitPrinceXalan6.XSL

Résultat : PetitPrinceXalan6.html

 

 

 

Partie 2 : Avec XT (http://www.blnz.com/xt/index.html)

 

Dans cette partie, nous utiliserons la version DOS de XT (http://www.jclark.com/xml/xt-old.html)

 

Nous enregistrerons les feuilles de style créées dans un fichier nommé PetitPrinceXT*.XSL et le résultat de l’application des feuilles de style dans un fichier nommé PetitPrinceXT*.HTML où * signifie le numéro de la feuille de style.

 

 

1) Définir une feuille de styles minimale pour formater le document XML fourni en HTML

 

Feuille de style : PetitPrinceXT1.XSL

Résultat : PetitPrinceXT1.html

 

On observe que tout comme Xalan, XT conserve les tabulations du document XML source et ajoute un retour à la ligne après chaque balise.

XT est par ailleurs beaucoup plus rapide que Xalan dans l’application des feuilles de style.

 

 

2) Séparer les phrases par des paragraphes, les traductions en tchèque et français par des sauts de lignes et les mots par des espaces

 

Feuille de style : PetitPrinceXT2.XSL

Résultat : PetitPrinceXT2.html

 

 

3) Mettre les phrases du narrateur en rouge et celles du Petit prince en vert

 

Feuille de style : PetitPrinceXT3.XSL

Résultat : PetitPrinceXT3.html

 

 

4) N'afficher que la traduction en tchèque

 

Feuille de style : PetitPrinceXT4.XSL

Résultat : PetitPrinceXT4.html

 

 

5) Mettez en gras le mot "mouton"

 

Nous prenons  en compte les signes de ponctuation puisque le mot mouton peut apparaître suivit d’un signe de ponctuation quelconque.

 

Feuille de style : PetitPrinceXT5.XSL

Résultat : PetitPrinceXT5.html

 

 

6) Ne ramener que les traductions en français des phrases qui comporte un mot "mouton"

 

Feuille de style : PetitPrinceXT6.XSL

Résultat : PetitPrinceXT6.html

 

 

 

Partie 3 : Avec XML Cooktop (MSXML) et MKCorpus (Sablotron)

 

Dans cette partie, nous utiliserons XML Cooktop 2.2 et MK Corpus 1.03 beta.

 

 

a) Notes sur XML Cooktop

 

Nous avons d’abord testé les différents processeurs XSLT avec le fichier PetitPrince3.XML et la feuille de style PetitPrinceXT6.XSL.

 

- Avec MSXML

- Avec XT

- Avec Sablotron 0.50 et Sablotron 0.43

- Avec Unicorn

- Avec Xalan

- Avec Saxon

(les autres processeurs ne fonctionnent pas)

 

Pour les exercices, nous n’utiliserons pas le processeur Unicorn car il n’interprète pas les entités caractères et considère que le document est au format XML en ajoutant une balise XML.

Nous utiliserons finalement le processeur MSXML car il ne prend pas en compte les décalages des balises dans le document XML, cela rend le résultat plus propre.

De plus, à l’exceptions de Saxon, nous avons déjà utilisé ou nous utiliserons les autres processeurs dans ce TP.

 

 

     b) Notes sur MKCorpus

 

N’ayant pas réussi à faire démarrer le logiciel après l’installation, il était nécessaire de rechercher la cause de la panne.

Finalement, il suffisait de copier dans le répertoire ledxml le fichier .edxmlrc (distribué dans le correctif de MKCorpus 1.02) et de copier le fichier expat.dll en le renommant expat_win32.dll dans le répertoire de MKCorpus.

 

Nous utiliserons le processeur Sablotron inclus dans MKCorpus pour appliquer les feuilles de style.

 

 

a) Etape 1 : Patron de transformation vers HTML

 

1) Application des patrons adresse1/2/3.xslt au fichier adresses.xml (lecture de code)

 

Feuille de style : adresses1.xslt

Résultat pour XML Cooktop : adressesCT1.html

Résultat pour MKCorpus : adressesMKC1.html

 

Feuille de style : adresses2.xslt

Résultat pour XML Cooktop : adressesCT2.html

Résultat pour MKCorpus : adressesMKC2.html

 

Feuille de style : adresses3.xslt

Résultat pour XML Cooktop : adressesCT3.html

Résultat pour MKCorpus : adressesMKC3.html

 

Nous remarquons que le processeur Sablotron ajoute un retour à la ligne après chaque template.

 

 

2) Créer votre propre patron (écriture de code)

 

Nous créons un patron pour afficher la liste des adresses et des téléphones fixes des personnes figurant dans la base de donnée.

 

Feuille de style : adressesCT4.xslt

Résultat pour XML Cooktop : adressesCT4.html

 

 

Nous créons un patron pour afficher dans un tableau la liste des adresses et des téléphones fixes des personnes figurant dans la base de donnée.

 

Feuille de style : adressesMKC4.xslt

Résultat pour MKCorpus : adressesMKC4.html

 

 

 

     b) Etape 2 : Documents arborés, arbres syntaxiques et sorties XML

 

Dans les exercices qui suivent, nous testerons nos feuilles de styles en les appliquant sur le document arbresStenose.xml.

 

 

1) Créer une feuille de style pour recopier un document XML (cf arbresStenose1.xslt)

 

<xsl:template match="@*|node()"> nous permet de nous positionner sur n’importe quel nœud ou attribut.

<xsl:copy>

<xsl:apply-templates select="@*|node()" />

</xsl:copy>

Nous permet de copier le nœud ou l’attribut courant.

 

Feuille de style : SortieXML1a.xslt

Résultat pour XML Cooktop : SortieXMLCT1a.xml

Résultat pour MKCorpus : SortieXMLMKC1a.xml

 

 

Créer ensuite une feuille produisant le même résultat mais autrement

 

En utilisant <xsl:copy-of> nous recopions l’élément sélectionné (l’élément racine) et l’intégralité de sont contenu y compris les noeuds.

 

Feuille de style : SortieXML1b.xslt

Résultat pour XML Cooktop : SortieXMLCT1b.xml

Résultat pour MKCorpus : SortieXMLMKC1b.xml

 

 

2) Créer une feuille de style pour enlever un sous-arbre du document XML

(cf arbresStenose2.xslt)

 

En ajoutant à la feuille de style SortieXML1a.xslt les lignes

<xsl:template match="sadj">

</xsl:template>

nous indiquons au processeur XSLT de ne rien faire lorsqu’il trouve l’élément « sadj », ce qui a pour effet de ne pas le copier ni de copier ses éléments descendants.

 

Feuille de style : SortieXML2.xslt

Résultat pour XML Cooktop : SortieXMLCT2.xml

Résultat pour MKCorpus : SortieXMLMKC2.xml

 

 

3) Créer une feuille de style pour remonter d'un niveau un sous-arbre du document XML

(cf arbresStenose3.xslt)

 

Pour cela, nous ulisisons « xsl :choose » avec :

<xsl:when test="det">

<xsl:apply-templates select="sn" />

</xsl:when>

pour ignorer le nœud « det » en passant au nœud « sn » suivant.

 

et avec :

<xsl:otherwise>

<xsl:copy>

  <xsl:apply-templates select="@*|node()" />

</xsl:copy>

</xsl:otherwise>

pour copier les autres nœuds.

 

Feuille de style : SortieXMLCT3.xslt

Résultat pour XML Cooktop : SortieXMLCT3.xml

Résultat pour MKCorpus : SortieXMLMKC3.xml

 

 

4) Créer une feuille de style pour simplifier récursivement les arbres du document XML (cf arbresStenose4.xslt)

 

Cette feuille de style nous permet de simplifier l’arbre en ne gardant que les syntagmes nominaux et les syntagmes prépositionnels. Pour cela, nous remontons d’un niveau les sous-arbres des éléments « sadj » et de « det » (voir  exercice précédant).

 

Feuille de style : SortieXML4.xslt

Résultat pour XML Cooktop : SortieXMLCT4.xml

Résultat pour MKCorpus : SortieXMLMKC4.xml

 

 

5) Créer une feuille de style pour extraire des terminaux et pré-terminaux des arbres du

document XML (cf arbresStenose5.xslt)

 

La feuille de style arbresStenose5.xslt ne copiant pas la balise racine du document, nous modifions la feuille de style en lui faisant écrire l’élément racine « resultat » dans le document de sortie.

 

Nous utilisons :

<xsl:template match="art|nom|adj|prep">

<xsl:copy-of select="." />

</xsl:template>

pour sélectionner les éléments « art », « nom », « adj » et « prep » qui sont les pré-terminaux, et pour les copier avec leur contenu (terminaux).

 

Feuille de style : SortieXML5a.xslt

Résultat pour XML Cooktop : SortieXMLCT5a.xml

Résultat pour MKCorpus : SortieXMLMKC5a.xml

 

 

Nous modifions le code pour extraire uniquement les noms, pour cela, nous remplaçons à la 22ème ligne <xsl:template match="art|nom|adj|prep"> par <xsl:template match="nom">.

 

Feuille de style : SortieXML5b.xslt

Résultat pour XML Cooktop : SortieXMLCT5b.xml

Résultat pour MKCorpus : SortieXMLMKC5b.xml

 

Nous remarquons en comparant les résultats obtenus que le processeur MSXML utilisé avec Cooktop ne recopie pas les retours à la ligne contenus entre les balises <xsl:text> et </xsl:text> Il les considère comme une balise auto-fermante.

 

 

6) Créer une feuille de style pour extraire un sous-arbre de type donné (cf arbresStenose7.xslt)

 

La feuille de style arbresStenose7.xslt ne copiant pas la balise racine du document, nous modifions la feuille de style en lui faisant écrire l’élément racine « resultat » dans le document de sortie.

 

Nous utiliserons xsl :choose avec :

<xsl:when test="sadj/adj and sn/nom">

<xsl:copy-of select="." />

</xsl:when>

pour nous permettre de copier l’intégralité des éléments courants lorsque ces éléments sont des syntagmes adjectivaux ou nominaux suivit respectivement d’un adjectif et d’un nom.

 

et avec :

<xsl:otherwise>

<xsl:apply-templates select="@*|node()" />

</xsl:otherwise>

pour nous permettre de continuer à parcourir les nœuds dans les autres cas.

 

 

Feuille de style : SortieXML6.xslt

Résultat pour XML Cooktop : SortieXMLCT6.xml

Résultat pour MKCorpus : SortieXMLMKC6.xml

 

 

7) De dépendances élémentaires à des associations pivot / contexte élémentaire

(cf arbresCyclade1.xslt)

 

 

La feuille de style permet de définir le contexte élémentaire des mots à partir de la structure du document XML.

 

Pour cela, il faudra pour chaque type d’arbre donné, indiquer le type de patron syntaxique avec un attribut patron pour les balises que nous appellerons <association>. Il faudra préciser ensuite le pivot et le contexte dans des nœuds.

 

La feuille de style définit deux type de relation : « sn/sp » et « sn/sadj ».

   <xsl:if test="sn/sp">

...

   <xsl:if test="sn/sadj">

 

Enfin, pour chacune de ces relations, la feuille de style permettra changer le pivot : « sn » et « sp » ou alors « sn » et « sadj ».

En fonction du pivot, la feuille de style ajoutera le étoile dans l’attribut patron de l’élément « association » et définira aussi le contenu de ses éléments fils « pivot » et « contexte ».

 

Feuille de style : SortieXML7.xslt

Résultat pour XML Cooktop : SortieXMLCT7.xml

Résultat pour MKCorpus : SortieXMLMKC7.xml

 

 

 

 

 

TP XPATH : Partie 3

 

 

 

Partie 1 : Avec Xalan (Projet XML Apache)

 

Dans cette partie, nous utiliserons Xalan-J 2.4.1 (http://xml.apache.org).

Nous récupérons le fichier ApplyXPath.class contenu dans le fichier xalansamples.jar (distribué avec Xalan-J 2.4.1) et nous l’utiliserons avec la ligne de commande suivante.

 

java -classpath .;xalan.jar;xerces.jar ApplyXPath Fichier "Chemin XPath"

 

Nous faisons un test avec le fichier PetitPrince3.XML et le chemin XPath suivant :

/texte/entete/derniere_modification

 

Exception in thread "main" org.xml.sax.SAXParseException: File "PetitPrince2.DTD

" not found.

        at org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1219

)

        at org.apache.xerces.readers.DefaultEntityHandler.startReadingFromExtern

alEntity(DefaultEntityHandler.java:780)

        at org.apache.xerces.readers.DefaultEntityHandler.startReadingFromExtern

alSubset(DefaultEntityHandler.java:571)

        at org.apache.xerces.framework.XMLDTDScanner.scanDoctypeDecl(XMLDTDScann

er.java:1139)

        at org.apache.xerces.framework.XMLDocumentScanner.scanDoctypeDecl(XMLDoc

umentScanner.java:2145)

        at org.apache.xerces.framework.XMLDocumentScanner.access$0(XMLDocumentSc

anner.java:2100)

        at org.apache.xerces.framework.XMLDocumentScanner$PrologDispatcher.dispa

tch(XMLDocumentScanner.java:831)

        at org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentS

canner.java:381)

        at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)

        at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.

java:195)

        at ApplyXPath.doMain(ApplyXPath.java:120)

        at ApplyXPath.main(ApplyXPath.java:183)

 

Le module semble ne pas retrouver la DTD, nous essayons alors avec différentes versions de Xalan et de Xerces mais sans succès.

Nous choisissons alors de passer en commentaire le lien à la DTD PetitPrince2.DTD et nous sauvegardons le fichier sous PetitPrince4.XML que nous utiliserons avec ApplyXPath.

 

Voici ce que nous obtenons pour le chemin Xpath : "/texte/entete/derniere_modification" avec le fichier PetitPrince4.XML :

 

<output>

<derniere_modification>

                        <nom>LY</nom>

                        <prenom>G+®rard</prenom>

                        <email>magicg1@hotmail.com</email>

                        <date>2002</date>

                </derniere_modification>

</output>

 

Pour la suite, nous utiliserons l’éditeur de texte TexPad 4.6 (http://www.textpad.com/download/) pour obtenir les captures d’écran de la fenêtre de commandes DOS car UltraEdit-32 ne permet d’entrer des lignes de commandes supérieures à 100 caractères. Nous enregistrerons les sorties dans un fichier nommé OutputXalan*.XSL où * signifie le numéro de la sortie affichée.

 

 

1) Rechercher toutes les traductions en tchèque

 

Chemin XPath : //traduction[@lang='tcheque']

Résultat : OutputXalan1.txt

 

 

2) Rechercher la traduction en tchèque de la 2ème phrase

 

Chemin XPath : //phrase[2]/modalite/traduction[@lang='tcheque']

Résultat : OutputXalan2.txt

 

 

3) Rechercher la traduction en français de la 2ème phrase

 

Chemin XPath : //phrase[2]/modalite/traduction[@lang='francais']

Résultat : OutputXalan3.txt

 

 

4) Rechercher toutes les traductions en français des phrases dites par le narrateur

 

Chemin XPath : //phrase[@loc='narrateur']/modalite/traduction[@lang='francais']

Résultat : OutputXalan4.txt

 

 

5) Même chose en ne gardant que le texte.

 

Chemin XPath : //phrase[@loc='narrateur']/modalite/traduction[@lang='francais']/mot/text()

Résultat : OutputXalan5.txt

 

 

6) Rechercher toutes les phrases prononcées par le Petit Prince et qui comportent le

caractère '?' (traduction en français uniquement)

 

Chemin XPath : //phrase[@loc='LePetitPrince'][modalite/traduction/mot[contains(text(),'?')]]/modal

ite/traduction[@lang='francais']

Résultat : OutputXalan6.txt

 

 

7) Rechercher toutes les phrases (traduction en français uniquement) du narrateur qui

répondent à des questions du petit prince (phrases précédentes prononcées par le petit

prince et comportant un caractère '?')

 

Chemin XPath : //phrase[@loc='LePetitPrince'][modalite/traduction/mot[contains(text(),'?')]]/follow

ing-sibling::phrase[@loc='narrateur'][1]/modalite/traduction[@lang='francais']

Résultat : OutputXalan7.txt

 

 

8) Même chose pour les réponses du Petit Prince au narrateur

 

Chemin XPath : //phrase[@loc='narrateur'][modalite/traduction/mot[contains(text(),'?')]]/following-sibling::phrase[@loc='LePetitPrince'][1]/modalite/traduction[@lang='francais']

Résultat : OutputXalan8.txt

 

 

 

Partie 2 : Avec XML Cooktop, XML Spy et MKCorpus

 

Dans cette partie, nous utiliserons XML Cooktop, XMLSpy et MKCorpus. La structure de notre document n’ayant pas changée, nous utiliserons les mêmes chemins XPath que pour l’exercice précédent.

 

Nous avons au préalable chargé le fichier PetitPrince3.XML avec les trois logiciels pour vérifier s’ils trouvaient la DTD. Contrairement à Xalan sans que ces derniers ne nous signalent un problème au niveau de la DTD

 

 

a) Notes sur XML Cooktop

 

La console XPath de XML Cooktop permet d’utiliser 3 options :

Nodes: ou n: pour une recherche de noeuds

Value: ou s: pour rechercher une valeur

Values: ou v: pour rechercher toutes les valeurs.

 

Nous utiliserons l’option nodes: pour toutes les questions et nous utiliserons aussi l’option values: pour la question 5 où il ne faut afficher que le texte.

Cela nous permettra de comparer la différence de résultats entre les deux options.

 

Nous avons enregistré nos résultats dans un fichier nommé OutputCT_*.txt où * correspond au numéro du chemin XPath demandé.

 

 

     b) Notes sur XML Spy

 

L’interface XPath de XML Spy ne permet pas d’obtenir un document de sortie contenant les chemins XPath recherchés. Il affiche dans une boîtte de dialogue la liste des éléments trouvés et permet en cliquant dessus d’accéder à l’élément en question dans le document XML.

Nous avons donc réalisé des captures d’écran pour montrer les résultats obtenus.

 

Nous avons enregistré nos résultats dans un fichier nommé OutputXSpy*.jpg où * correspond au numéro du chemin XPath demandé.

 

 

c) Notes sur MKCorpus

 

Lorsque l’on cherche un chemin Xpath avec MKCourpus, celui-ci nous affiche une fenêtre vide.

 

 

Quelque soit les options Xpath choisies, la fenêtre DOS indique toujours des erreurs.

 

 

Nous alors avons essayé la version précédente de MKCorpus mais sans succès.

 

Après une série de tests sur le logiciel et en utilisant des documents et des chemins Xpath différetns, nous découvrons la panne.

La fenêtre DOS indique les mêmes erreurs quand on ne charge pas de document, ce qui signifie que la fenêtre active est considérée comme vide par MKCorpus.

 

Finalement, nous découvrons qu’il faut cliquer une première fois sur la fenêtre d’édition pour que le logiciel prenne en compte le document chargé.

 

Nous utiliserons la première option XPath de MKCorpus qui permet de faire une recherche sur des nœuds.

 

Nous avons enregistré nos résultats dans un fichier nommé OutputMKC*.txt où * correspond au numéro du chemin XPath demandé.

 

 

     d) Résultats des chemins Xpath

 

1) Rechercher toutes les traductions en tchèque

 

Chemin XPath : //traduction[@lang='tcheque']

Résultat pour XML Cooktop : OutputCT1.txt

Résultat pour XML Spy : OutputXSpy1.jpg

Résultat pour MKCorpus : OutputMKC1.txt

 

 

2) Rechercher la traduction en tchèque de la 2ème phrase

 

Chemin XPath : //phrase[2]/modalite/traduction[@lang='tcheque']

Résultat pour XML Cooktop : OutputCT2.txt

Résultat pour XML Spy : OutputXSpy2.jpg

Résultat pour MKCorpus : OutputMKC2.txt

 

 

3) Rechercher la traduction en français de la 2ème phrase

 

Chemin XPath : //phrase[2]/modalite/traduction[@lang='francais']

Résultat pour XML Cooktop : OutputCT3.txt

Résultat pour XML Spy : OutputXSpy3.jpg

Résultat pour MKCorpus : OutputMKC3.txt

 

 

4) Rechercher toutes les traductions en français des phrases dites par le narrateur

 

Chemin XPath : //phrase[@loc='narrateur']/modalite/traduction[@lang='francais']

Résultat pour XML Cooktop : OutputCT4.txt

Résultat pour XML Spy : OutputXSpy4.jpg

Résultat pour MKCorpus : OutputMKC4.txt

 

 

5) Même chose en ne gardant que le texte.

 

Chemin XPath : //phrase[@loc='narrateur']/modalite/traduction[@lang='francais']/mot/text()

Résultat pour XML Cooktop : OutputCT5a.txt

Résultat pour XML Spy : OutputXSpy5.jpg

Résultat pour MKCorpus : OutputMKC5.txt

 

Chemin XPath : //phrase[@loc='narrateur']/modalite/traduction[@lang='francais']

Résultat pour XML Cooktop : OutputCT5b.txt

 

Nous pouvons observer en comparant le résultat des options nodes (OutputCT5a.txt) et values (OutputCT5b.txt) de XML Cooktop qu’il est plus intéressant d’utiliser la seconde option si l’on ne veut garder que le texte.

En effet, l’option values permet d’insérer un espace entre les éléments frères et un retour à la ligne entre les éléments fils et père. L’option nodes: au contraire concatène les valeurs en une seule ligne, ce qui rends le résultat inexploitable.

 

 

6) Rechercher toutes les phrases prononcées par le Petit Prince et qui comportent le

caractère '?' (traduction en français uniquement)

 

Chemin XPath : //phrase[@loc='LePetitPrince'][modalite/traduction/mot[contains(text(),'?')]]/modal

ite/traduction[@lang='francais']

Résultat pour XML Cooktop : OutputCT6.txt

Résultat pour XML Spy : OutputXSpy6.jpg

Résultat pour MKCorpus : OutputMKC6.txt

 

 

7) Rechercher toutes les phrases (traduction en français uniquement) du narrateur qui

répondent à des questions du petit prince (phrases précédentes prononcées par le petit

prince et comportant un caractère '?')

 

Chemin XPath : //phrase[@loc='LePetitPrince'][modalite/traduction/mot[contains(text(),'?')]]/follow

ing-sibling::phrase[@loc='narrateur'][1]/modalite/traduction[@lang='francais']

Résultat pour XML Cooktop : OutputCT7.txt

Résultat pour XML Spy : OutputXSpy7.jpg

Résultat pour MKCorpus : OutputMKC7.txt

 

 

8) Même chose pour les réponses du Petit Prince au narrateur

 

Chemin XPath : //phrase[@loc='narrateur'][modalite/traduction/mot[contains(text(),'?')]]/following-sibling::phrase[@loc='LePetitPrince'][1]/modalite/traduction[@lang='francais']

Résultat pour XML Cooktop : OutputCT8.txt

Résultat pour XML Spy : OutputXSpy8.jpg

Résultat pour MKCorpus : OutputMKC8.txt

 

 

 

Partie 3 : Avec les interfaces XpathVisualizer-1.4 et XpathVisualizer-1.0

 

 

Dans cette partie, nous utiliserons XpathVisualizer 1.4 et XpathVisualizer 1.0. Notre document n’ayant pas changé, nous utiliserons les mêmes chemin XPath que pour l’exercice précédent.

 

 

a) Notes sur XpathVisualizer-1.4

 

XPathVisualizer 1.4 est une interface HTML qui permet de rechercher des chemins XPath grâce à des scripts java. Le résultat est affiché sous forme d’arborescence par Internet Explorer utilisant le parser MSXML.  XPathVisualizer 1.4 se contente de coloriser les éléments trouvés en jaune et le début des nœuds ancêtres de ces éléments en bleu.

 

Ne pouvant pas enregistrer les la page contenant les résultats, nous avons opérer un copiage de l’intégralité de l’arbre dans un document DOC pour conserver la mise en forme.

Nous avons ensuite appliquer des macros pour rectifier les changements de mise en forme du au copiage du document HTML vers un document DOC.

 

Nous avons enregistré nos résultats dans un fichier nommé OutputXPV14_*.doc où * correspond au numéro du chemin XPath demandé.

 

 

     b) Notes sur XpathVisualizer-1.0

 

Lors du chargement du fichier PetitPrince3.XML, XPathVisualiser 1.0 nous indique par une boîte de dialogue qu’il ne trouve pas la DTD.

 

 

 

Nous chargeons alors le document PetitPrince4.XML (sans DTD) mais XPathVisualizer 1.0 ne parvient pas à afficher de résultats. Quelque soit le chemin XPath recherché la fenêtre DOS affiche toujours des erreurs.

 

 

Nous avons essayer avec différentes versions de Xalan et de Xerces mais sans succès.

 

Finalement, nous avons trouvé des instructions dans les archives de la mailing-liste logilab.org qui nous a permis de modifier le code source. Après recompilation des codes modifiés, nous avons obtenu une version corrigée de XPathVisualizer 1.0 opérationnelle.

 

XpathVisualiser 1.0 comporte deux cadres. Celui de gauche affiche le document XML chargé sous forme d’arborescence. Celui de droite affiche la liste des chemins XPath trouvés également sous forme d’arborescence.

Ne pouvant pas enregistrer le résultat de la recherche XPath, nous avons réalisé une capture d’écran de la partie droite de XPathVisualizer 1.0 après avoir ouvert les premiers nœud pour vérifier les résultats obtenus.

 

Nous avons enregistrer nos résultats dans un fichier nommé OutputXPV10_*.jpg où * correspond au numéro du chemin XPath demandé.

 

 

c) Résultats des chemins Xpath

 

1) Rechercher toutes les traductions en tchèque

 

Chemin XPath : //traduction[@lang='tcheque']

Résultat pour XPathVisualizer 1.4 : OutputXPV14_1.doc

Résultats pour XPathVisualizer 1.0 : OutputXPV10_1.jpg

 

 

2) Rechercher la traduction en tchèque de la 2ème phrase

 

Chemin XPath : //phrase[2]/modalite/traduction[@lang='tcheque']

Résultat pour XPathVisualizer 1.4 : OutputXPV14_2.doc

Résultats pour XPathVisualizer 1.0 : OutputXPV10_2.jpg

 

 

3) Rechercher la traduction en français de la 2ème phrase

 

Chemin XPath : //phrase[2]/modalite/traduction[@lang='francais']

Résultat pour XPathVisualizer 1.4 : OutputXPV14_3.doc

Résultats pour XPathVisualizer 1.0 : OutputXPV10_3.jpg

 

 

4) Rechercher toutes les traductions en français des phrases dites par le narrateur

 

Chemin XPath : //phrase[@loc='narrateur']/modalite/traduction[@lang='francais']

Résultat pour XPathVisualizer 1.4 : OutputXPV14_4.doc

Résultats pour XPathVisualizer 1.0 : OutputXPV10_4.jpg

 

 

5) Même chose en ne gardant que le texte.

 

Chemin XPath : //phrase[@loc='narrateur']/modalite/traduction[@lang='francais']/mot/text()

Résultat pour XPathVisualizer 1.4 : OutputXPV14_5.doc

Résultats pour XPathVisualizer 1.0 : OutputXPV10_5.jpg

 

 

6) Rechercher toutes les phrases prononcées par le Petit Prince et qui comportent le

caractère '?' (traduction en français uniquement)

 

Chemin XPath : //phrase[@loc='LePetitPrince'][modalite/traduction/mot[contains(text(),'?')]]/modal

ite/traduction[@lang='francais']

Résultat pour XPathVisualizer 1.4 : OutputXPV14_6.doc

Résultats pour XPathVisualizer 1.0 : OutputXPV10_6.jpg

 

 

7) Rechercher toutes les phrases (traduction en français uniquement) du narrateur qui

répondent à des questions du petit prince (phrases précédentes prononcées par le petit

prince et comportant un caractère '?')

 

Chemin XPath : //phrase[@loc='LePetitPrince'][modalite/traduction/mot[contains(text(),'?')]]/follow

ing-sibling::phrase[@loc='narrateur'][1]/modalite/traduction[@lang='francais']

Résultat pour XPathVisualizer 1.4 : OutputXPV14_7.doc

Résultats pour XPathVisualizer 1.0 : OutputXPV10_7.jpg

 

 

8) Même chose pour les réponses du Petit Prince au narrateur

 

Chemin XPath : //phrase[@loc='narrateur'][modalite/traduction/mot[contains(text(),'?')]]/following-sibling::phrase[@loc='LePetitPrince'][1]/modalite/traduction[@lang='francais']

Résultat pour XPathVisualizer 1.4 : OutputXPV14_8.doc

Résultats pour XPathVisualizer 1.0 : OutputXPV10_8.jpg