Aller au contenu

Besoin D'aide En Xml Et Xslt


Nirvana

Messages recommandés

Histoire de ne pas polluer le fil sur la programmation objet, je pose ma question ici.

 

Je galère en ce moment sur XSLT, je suis allé voir sur plein de pages différentes (w3schools, entre autres) et je n'arrive pas à répondre à la consigne suivante :

 

J'ai un fichier de ce genre-là (sur 950 lignes) :

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE tags SYSTEM "http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/IM12/Projet/tags.dtd">
<tags xmlns="http://crim.fr/ns/graph">
<w lemma="déclaration" pos="NOM">Déclaration</w>
<w lemma="du" pos="PRP:det">des</w>
<w lemma="droit" pos="NOM">droits</w>
<w lemma="de" pos="PRP">de</w>
<w lemma="le" pos="DET:ART">l'</w>
<w lemma="homme" pos="NOM">homme</w>
<w lemma="et" pos="KON">et</w>
<w lemma="du" pos="PRP:det">du</w>
<w lemma="citoyen" pos="NOM">citoyen</w>
<w lemma="@card@" pos="NUM">26</w>
<w lemma="août" pos="NOM">août</w>
<w lemma="." pos="SENT">.</w>
<w lemma="@card@" pos="NUM">1789</w>
<w lemma="le" pos="DET:ART">Les</w>
<w lemma="représentant" pos="NOM">représentants</w>
<w lemma="du" pos="PRP:det">du</w>
<w lemma="peuple" pos="NOM">peuple</w>
<w lemma="français" pos="ADJ">français</w>

(...)

<w lemma="préalable" pos="ADJ">préalable</w>
<w lemma="indemnité" pos="NOM">indemnité</w>
<w lemma="." pos="SENT">.</w>
</tags>

et je dois écrire une feuille de style XSLT qui me permet de "supprimer les occurrences de ponctuations (les noeuds à attribut pos="PUN") à l'exception du point de fin de phrase (les noeuds à attribut pos="SENT"), de mots grammaticaux et de diverses catégories grammaticales ad libitum."

 

Pour commencer, j'ai essayé d'obtenir une sortie XML en ne gardant que les noeuds d'une même catégorie (genre tous les NOM) mais je n'y arrive pas.

 

Par exemple, j'ai essayé ça :

 

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

<!-- Sélectionner tous les noeuds w ayant un attribut pos qui a la valeur NOM-->
<xsl:template match="//w[@pos='NOM']">

	<!-- Copier le noeud courant-->
	<xsl:copy/>
</xsl:template>

</xsl:stylesheet> 

Et xsltproc me donne :

 

<?xml version="1.0"?>

Déclaration
des
droits
de
l'
homme
et
du
citoyen
26
août
.
1789
Les
représentants
du
peuple
français
,

 

Alors que je veux ça (par exemple) :

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE tags SYSTEM "http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/IM12/Projet/tags.dtd">
<tags xmlns="http://crim.fr/ns/graph">
<w lemma="déclaration" pos="NOM">Déclaration</w>
<w lemma="droit" pos="NOM">droits</w>
<w lemma="homme" pos="NOM">homme</w>
<w lemma="citoyen" pos="NOM">citoyen</w>
<w lemma="août" pos="NOM">août</w>
<w lemma="représentant" pos="NOM">représentants</w>
</tags>

 

Quelqu'un pourrait m'expliquer comment on fait ?

 

Merci.

Lien vers le commentaire

Bon, apparamment ça marche si je fais

 

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>


<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="*[contains(@pos,'NOM')]"/>

</xsl:stylesheet>

 

Lien vers le commentaire

 

Bon, apparamment ça marche si je fais

 







<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>


<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="*[contains(@pos,'NOM')]"/>

</xsl:stylesheet>

 

 

Je te conseille de lire le chapitre de ce bouquin qui explique comment marche XSLT: pas tout le bouquin ca sert a rien, mais la partie théorique sur XSLT est très claire.

 

http://www.amazon.com/XSLT-Programmers-Reference-2nd-Edition/dp/1861005067

 

Bon, ca fait bien longtemps que j'ai pas utilise de XSLT (mais qui utilise encore ca de nos jours ??), mais de tête l'idée c'est d'avoir un matcher sur tous les nœuds qui fait une copie du nœud, et un matcher pour les nœuds avec l'attribut PUN qui lui ne fait rien du tout (aucune sortie). Et voila.

 

 

<xsl:template match="node() | @*"> <xsl:copy>    <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template> <xsl:template match="lemma[@pos='PUN'"/>
Lien vers le commentaire

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...