IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

question bete : ma template ne s'exécute pas.


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 36
    Points : 32
    Points
    32
    Par défaut question bete : ma template ne s'exécute pas.
    Bonjour à tous,
    je travaille sur en projet en TAL et je dois mettre en valeur des patrons morpho-syntaxiques (ici NOM et ADJ).
    Je travaille à partir d'un fichier xml qui ressmble à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <item number="1">
    <titre><article>
    <element><data type="type">PRO:DEM</data><data type="lemma">ce</data><data type="string">Ce</data></element>
    <element><data type="type">PRO:REL</data><data type="lemma">que</data><data type="string">que</data></element>
    <element><data type="type">NOM</data><data type="lemma">l’on</data><data type="string">l’on</data></element>
    <element><data type="type">VER:pres</data><data type="lemma">savoir</data><data type="string">sait</data></element>
    <element><data type="type">PRP</data><data type="lemma">de</data><data type="string">de</data></element>
    <element><data type="type">NOM</data><data type="lemma">l’attentat</data><data type="string">l’attentat</data></element>
    <element><data type="type">PRP:det</data><data type="lemma">du</data><data type="string">du</data></element>
    <element><data type="type">NAM</data><data type="lemma">Nouvel</data><data type="string">Nouvel</data></element>
    <element><data type="type">NAM</data><data type="lemma">An</data><data type="string">An</data></element>
    <element><data type="type">PRP</data><data type="lemma">dans</data><data type="string">dans</data></element>
    <element><data type="type">DET:ART</data><data type="lemma">un</data><data type="string">un</data></element>
    <element><data type="type">NOM</data><data type="lemma">club</data><data type="string">club</data></element>
    <element><data type="type">ADJ</data><data type="lemma">d’Istanbul</data><data type="string">d’Istanbul</data></element>
    <element><data type="type">SENT</data><data type="lemma">.</data><data type="string">.</data></element>
    </article>
    </titre>
    Et voici mon code pour mettre en valeur ce pattern ADJ-NOM. Le problème c'est que ma template qui match //data ne s'execute pas. Je crois savoir pourquoi mais je ne peux pas faire autrement. Je ne maitrise pas assez bien Xpath et Xslt.
    Enfin elle s’exécute bien mais elle n'affiche rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:myNS="http://devedge.netscape.com/2002/de">
        <xsl:output method="html"/>
     
    <xsl:template match="/">
     
      <html>
        <body>      
        <xsl:apply-templates/>
        </body>
      </html>
     
    </xsl:template>   
     
     <xsl:template match="//item">
      <p>
       <xsl:for-each select="//element">
           <xsl:apply-templates/>
       </xsl:for-each>
     </p><br />      
    </xsl:template>
     
    <xsl:template match="//data">    
        <xsl:choose>
            <xsl:when test="data[@type='type']='NOM' or data[@type='type']='ADJ'">
                <b><font color="yellow"><xsl:value-of select="data[@type='string']/text()"/></font></b>
                <font color="blue"><xsl:value-of select="data[@type='lemma']/text()"/></font>
                <i><font color="green"><xsl:value-of select="data[@type='type']/text()"/></font></i>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="data[@type='string']/text()"/>
                <font color="blue"><xsl:value-of select="data[@type='lemma']/text()"/></font>
                <i><font color="green"><xsl:value-of select="data[@type='type']/text()"/></font></i>
            </xsl:otherwise>
       </xsl:choose>
    </xsl:template>
     
    </xsl:stylesheet>
    Merci d'avance

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je vais réécrire le xslt, d'une façon minimale, qu'on s'en tire des leçons.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:myNS="http://devedge.netscape.com/2002/de"
        exclude-result-prefixes="myNS">
     
    <xsl:output method="html" encoding="utf-8" />
     
    <xsl:template match="/">
      <html>
        <head><title></title></head>
        <body>      
          <xsl:apply-templates select="//item/titre/article" />
        </body>
      </html>
    </xsl:template>   
     
    <xsl:template match="article">
      <p>
        <xsl:apply-templates select="element" />  
      </p>
      <br />      
    </xsl:template>
     
    <xsl:template match="element">
      <xsl:choose>
        <xsl:when test="normalize-space(data[@type='type'])='NOM' or normalize-space(data[@type='type'])='ADJ'">
          <b><font color="yellow"><xsl:value-of select="normalize-space(data[@type='string'])"/></font></b>
          <font color="blue"><xsl:value-of select="normalize-space(data[@type='lemma'])"/></font>
          <i><font color="green"><xsl:value-of select="normalize-space(data[@type='type'])"/></font></i>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="normalize-space(data[@type='string'])"/>
          <font color="blue"><xsl:value-of select="normalize-space(data[@type='lemma'])"/></font>
          <i><font color="green"><xsl:value-of select="normalize-space(data[@type='type'])" /></font></i>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
     
    </xsl:stylesheet>

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Merci C'est exactement celui que j'ai réécris ou presque en ayant compris les bases :
    J'ai un peu progressé depuis la dernière fois. C'était mon deuxième jour de XSLT. Je ne savais même pas quelc proc XSLT j'utilisais.
    J'ai ajouté d'autres choses pour le projet entre temps donc n'y fais pas attention.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:saxon="http://saxon.sf.net/" extension-element-prefixes="saxon" exclude-result-prefixes="saxon">
    <xsl:output method="html" encoding="utf-8"/>
        <xsl:variable name="count" saxon:assignable="yes" select="0"/>
     
    <xsl:template match="/">
     <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html&gt;</xsl:text>
        <xsl:text>
        </xsl:text>
      <html>
        <body>
            <xsl:apply-templates/>
        </body>
          <h2>Nombre de patrons DET-NOM rencontrés : <xsl:value-of select="$count"/></h2><br/>
      </html>       
    </xsl:template>   
     
     <xsl:template match="article">
     
      <p><xsl:apply-templates/></p>
     
    </xsl:template>
     
    <xsl:template match="element">
     
        <xsl:choose>
            <xsl:when test="(./data[contains(text(),'DET')]) and (following-sibling::element[1][./data[contains(text(),'NOM')]]) or (./data[contains(text(),'NOM')]) and (preceding-sibling::element[1][./data[contains(text(),'DET')]])">
                <saxon:assign name="count"><xsl:value-of select="$count+1"/></saxon:assign>
                <span style="border:1px; border-style:solid; border-color:#FF0000; padding: 1px;background-color : #ffe6e6; color : #cc0000; font-weight: bold;"><xsl:value-of select="./data[@type='string']/text()"/></span>
                <font color="blue"><xsl:value-of select="./data[@type='lemma']/text()"/></font>
                <i><font color="red"><xsl:value-of select="concat('[', ./data[@type='type']/text(), ']')"/></font></i>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="data[@type='string']/text()"/>
                <font color="blue"><xsl:value-of select="data[@type='lemma']/text()"/></font>
                <i><font color="green"><xsl:value-of select="concat('[', ./data[@type='type']/text(), ']')"/></font></i>
            </xsl:otherwise>
       </xsl:choose>
    </xsl:template>
     
    </xsl:stylesheet>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question de débutant : java n exécute pas mes fichiers
    Par torkeep dans le forum Général Java
    Réponses: 2
    Dernier message: 26/02/2014, 14h28
  2. Réponses: 3
    Dernier message: 03/09/2009, 13h35
  3. [Question Bete] f ou pas f!!!
    Par theshark85 dans le forum C
    Réponses: 17
    Dernier message: 20/05/2006, 16h02
  4. template match="node() mais pas text()"
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/03/2003, 10h52
  5. Réponses: 3
    Dernier message: 09/10/2002, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo