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 :

[XSLT] Problème de passage SVG à GRAPHML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Points : 160
    Points
    160
    Par défaut [XSLT] Problème de passage SVG à GRAPHML
    Bonjour,

    je vais essayer d'expliquer mon problème le plus clairement possible :
    J'ai un fichier .svg de ce type :
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>

    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"

    "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [

    <!ATTLIST svg xmlns: xlink CDATA #FIXED "http://www.w3.org/1999/xlink">

    ]>

    <!-- Generated by neato version 1.16 (Tue Sep 14 22:15:32 UTC 2004)

    For user: Bill Gates Title: RNA polymerase II Pages: 1 -->

    <svg width="602pt" height="679pt"

    viewBox = "-1 -1 601 678"

    xmlns="http://www.w3.org/2000/svg" xmlns: xlink="http://www.w3.org/1999/xlink">

    <g id="graph0" class="graph" transform = "scale(0.597166)"

    style="font-family:Times-Roman;font-size:14.00;">

    <title>RNA polymerase II</title>

    <text text-anchor="middle" style="font-size:10.00;" x="499" y="1120">RNA POLYMERASE II Network of Protein Complexes (27 complex(es), 133 proteins -- as of Jun 07, 2007)</text>

    <g id="edge24" class="edge"><title>YNL236w-&gt;&lt;PolII-Med&gt;</title>

    <path style="fill:none;stroke:silver;" d="M177,764C185,749 194,734 202,718"/>

    <ellipse cx="202" cy="718" rx="1" ry="1" style="fill:none;stroke:silver;"/>

    </g>

    <g id="node23" class="node"><title>YLR071c</title>

    <a xlink:href="http://pin.mskcc.org/web/graphviz.ProteinServlet?protein=YLR071c&amp;species=2" xlink:title="YLR071c">

    <ellipse cx="212" cy="793" rx="12" ry="4" style="fill:skyblue;stroke:skyblue;"/>

    <text text-anchor="middle" style="font-size:5.00;fill:navy;" x="212" y="795">YLR071c</text>

    </a>

    </g>

    </g>

    </svg>
    Que je pense il est possible de résumer comme suit (pour ce que je souhaite en faire -> voir plus loin) :

    <svg>
    <g>
    <g class="edge">
    <title>OrigineEdge-&gt;DestEdge</title>
    </g>
    <g class="node">
    <title>Noeud</title>
    </g>
    </g>
    </svg>
    Je voudrais le transformer en ce type de fichier :

    <graphml...>
    <graph edgedefault="undirected">

    <node id="Noeud" />

    <edge id="OrigineEdge_DestEdge" source="OrigineEdge" target="DestEdge" />

    </graph>
    </graphml>
    J'essaye désepérément de tirer quelque chose du processeur xslt, mais tout ce que j'arrive à avoir c'est l'ensemble des éléments textes du fichier de départ. C'est à dire un fichier de ce style (ici il n'est pas complet):

    <?xml version="1.0" encoding="utf-8"?>


    RNA polymerase II
    RNA POLYMERASE II Network of Protein Complexes (27 complex(es), 133 proteins -- as of Jun 07, 2007)
    YNL236w-&gt;&lt;PolII-Med&gt;
    YNL236w-&gt;&lt;Mediator&gt;
    YPL042c-&gt;&lt;PolII-Med&gt;
    YPL042c-&gt;&lt;Mediator&gt;
    YPL042c-&gt;&lt;Srb8-11&gt;
    YPL042c-&gt;&lt;Srb8/9/10/11&gt;
    YNL025c-&gt;&lt;PolII-Med&gt;
    YNL025c-&gt;&lt;Mediator&gt;
    YNL025c-&gt;&lt;Srb8-11&gt;
    YNL025c-&gt;&lt;Srb8/9/10/11&gt;
    YHR041c-&gt;&lt;PolII-Med&gt;
    YMR033w
    YMR033w
    YGR275w
    YGR275w
    YDR073w
    YDR073w
    YNR023w
    YNR023w
    Avec en prime les noeuds "node" en double.
    Voici mon programme :
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0"
    xmlns: xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" encoding="utf-8"/>


    <xsl:template match="/svg">
    <graph>

    <xsl:apply-templates select="//g"/>
    </graph>
    </xsl:template>

    <xsl:template match="//g[@class=node]">

    </xsl:template>
    </xsl:stylesheet>
    Dans un premier temps je ne cherchais qu'à récupérer les noeuds (ça me semblait plus facile), je n'ai pas beaucoup d'expérience en xslt alors peut être est-ce une erreur bateau... en tout cas entre tutoriel et bouquin je n'ai pas trouvé...

    Merci beaucoup de vos conseils.

  2. #2
    Membre habitué Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Points : 160
    Points
    160
    Par défaut
    Après remodelage de mon programme dans tous les sens, légères modifs du fichier d'entrée qui apparemment ne convenait pas à xslt (soit aucun affichage, soit l'affichage que j'avais précédemment indiqué), voici ce que j'ai trouvé :

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

    <xsl:output method="xml" encoding="utf-8"/>

    <xsl:template match="/">

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

    </xsl:template>

    <xsl:template match="title">
    <xsl:choose>
    <xsl:when test="../@class='node'"><node><xsl:value-of select="//title"/></node></xsl:when>
    <xsl:when test="../@class='edge'"><edge><xsl:value-of select="//title"/></edge></xsl:when>
    <xsl:otherwise></xsl:otherwise>
    </xsl:choose>
    </xsl:template>
    </xsl:stylesheet>
    mais je n'obtiens qu'un piètre résultat...

    <?xml version="1.0" encoding="utf-8"?>
    <edge>YNL236w-&gt;&lt;PolII-Med&gt;</edge>
    <edge>YNL236w-&gt;&lt;PolII-Med&gt;</edge>
    <edge>YNL236w-&gt;&lt;PolII-Med&gt;</edge>
    <edge>YNL236w-&gt;&lt;PolII-Med&gt;</edge>
    <edge>YNL236w-&gt;&lt;PolII-Med&gt;</edge>
    <edge>YNL236w-&gt;&lt;PolII-Med&gt;</edge>
    <edge>YNL236w-&gt;&lt;PolII-Med&gt;</edge>
    <edge>YNL236w-&gt;&lt;PolII-Med&gt;</edge>

    etc...
    Au passage il n'y a aucun passage à la ligne c'est moi qui les ai ajouté... comment peut on les insérer automatiquement ?

    Et sinon, pour obtenir le bon résultat une explication ? Une idée ?

  3. #3
    Membre habitué Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Points : 160
    Points
    160
    Par défaut Un point technique
    J'ai beaucoup fait évolué mon programme depuis hier:

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

    <xsl:output method="xml" encoding="utf-8"/>

    <xsl:template match="/">
    <graph>
    <xsl:text>
    </xsl:text>
    <xsl:apply-templates select="/svg/g/g"/>
    </graph>
    </xsl:template>

    <xsl:template match="/svg/g/g">
    <node>
    <xsl:attribute name="id">
    <xsl:text> </xsl:text>
    <xsl:value-of select="title"/>
    </xsl:attribute>
    </node>
    <xsl:text>
    </xsl:text>
    </xsl:template>
    </xsl:stylesheet>
    Mais je ne vois vraiment pas comment faire le test pour savoir si j'ai affaire à une class = edge ou class = node. Je vous rappelle la structure globale du svg:

    <svg>
    <g>
    <g class="edge">
    <title>OrigineEdge-&gt;DestEdge</title>
    </g>
    <g class="node">
    <title>Noeud</title>
    </g>
    </g>
    </svg>
    J'ai essayé d'utiliser cette syntaxe : g[@class=node] dans le match mais sans succès.
    Help

  4. #4
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    pour tester si c'est une classe="edge" ou ="node" tu dois faire ceci :

    <xsl:if test="g[@classe='node']">
    instructions...
    </xsl:if>

    <xsl:if test="g[@classe='edge']">
    instructions...
    </xsl:if>

    ou tu peux aussi le faire avec un xsl:choose et un xsl:when...

    je pense...

  5. #5
    Membre habitué Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Points : 160
    Points
    160
    Par défaut
    lorsque j'insère le code que vous m'avez donné (juste pour les noeuds dans un premier temps) comme suit:
    <xsl:template match="/">
    <graph>
    <xsl:text>
    </xsl:text>
    <xsl:apply-templates select="/svg/g/g"/>
    </graph>
    </xsl:template>

    <xsl:template match="/svg/g/g">
    <xsl:if test="g[@class='node']">
    <node>
    <xsl:attribute name="id">
    <xsl:text> </xsl:text>
    <xsl:value-of select="title"/>
    </xsl:attribute>
    </node>
    <xsl:text>
    </xsl:text>
    </xsl:if>
    </xsl:template>
    je n'ai plus que ceci dans mon fichier résultat:

    <?xml version="1.0" encoding="utf-8"?>
    <graph>
    </graph>
    une solution ?

  6. #6
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    j'ai adapté un peu le code et il marche :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <g>
    <ARCHIVE>
        <ARCHIVE class="edge">
        	<title>toto</title>
        </ARCHIVE>
        <ARCHIVE class="node">
        	<title>tata</title>
        </ARCHIVE>
    </ARCHIVE>
    </g>

    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
     <xsl:template match="g/ARCHIVE/ARCHIVE">
    <xsl:choose>
     
    <xsl:when test="@class='node'">
    <fo:block>
    <xsl:value-of select="title"/>
    </fo:block>
    </xsl:when>
     
    <xsl:when test="@class='edge'">
    <fo:block>
    <xsl:value-of select="title"/>
    </fo:block>
    </xsl:when>
    </xsl:choose>
    </xsl:template>
    Ce code là me donne les valeurs du titre de chaque archive en fonction de son type de class...

    Est-ce bien ce que tu veux ??

  7. #7
    Membre habitué Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Points : 160
    Points
    160
    Par défaut merci
    grâce à ce bout de code que tu m'a donné j'ai obtenu ce que je voulais. Pour info, voici ce que ça donne :
    <xsl:template match="/svg/g/g">
    <xsl:choose>
    <xsl:when test="@class='node'">
    <node>
    <xsl:attribute name="id">
    <xsl:text> </xsl:text>
    <xsl:value-of select="title"/>
    </xsl:attribute>
    </node>
    <xsl:text>
    </xsl:text>
    </xsl:when>
    <xsl:when test="@class='edge'">
    <edge>
    <xsl:attribute name="id">
    <xsl:text> </xsl:text>
    <xsl:value-of select="title"/>
    </xsl:attribute>
    </edge>
    <xsl:text>
    </xsl:text>
    </xsl:when>
    </xsl:choose>
    merci encore

  8. #8
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    Ravie d'avoir pu t'aider !

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

Discussions similaires

  1. [XSLT] Problème de passage de variable en noeud
    Par Lepirate62 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/03/2008, 16h40
  2. Réponses: 9
    Dernier message: 13/05/2005, 04h13
  3. problème de passage de paramêtre sous mozilla
    Par mat10000 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/09/2004, 11h48
  4. [XSLT] Problème de chemin d'accès + XSLT
    Par Jorus dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 15/09/2004, 09h36
  5. problème de passage de texte avec getvariable
    Par VincentB dans le forum Flash
    Réponses: 2
    Dernier message: 12/01/2004, 19h35

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