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 et règles


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut XSLT et règles
    Je cherche à faire une conversion XSLT avec jaxp et xalan.
    Je n'arrive pas à trouver comment la faire à partir de plus de 2 fichiers.
    C'est à dire, j'ai un fichier .XLS un fichier .XML de "règles" et le fichier des données.
    Je n'ai pas trouvé le moyen de faire passer ses "règles" qui sont indispenssable à la conversion.
    J'ai beau chercher je trouve pas d'exemple.
    J'ai par contre parfaitement reussi la conversion avec un autre outils mais il me faut en java... J'aime le java .

    Code la méthode standard de transformation : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static void transforme(String ficherXML, String fichierXSLT) throws Exception {
            TransformerFactory fabrique;
            StreamSource xml;
            StreamSource xslt;
            StreamResult dest;
            Transformer transformation;
            fabrique = TransformerFactory.newInstance();
            xml = new StreamSource(new File(ficherXML));
            xslt = new StreamSource(new File(fichierXSLT));
            transformation = fabrique.newTransformer(xslt);
            File sortie = new File("sortie.svg");
            dest = new StreamResult(new FileOutputStream(sortie));
            transformation.transform(xml, dest);
        }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Citation Envoyé par dawadam Voir le message
    C'est à dire, j'ai un fichier .XLS un fichier .XML de "règles" et le fichier des données.
    Je n'ai pas trouvé le moyen de faire passer ses "règles" qui sont indispenssable à la conversion.
    C'est-à-dire ? Quelle technologie lie ces "règles" à XSLT ?

    Citation Envoyé par dawadam Voir le message
    J'ai par contre parfaitement reussi la conversion avec un autre outils mais il me faut en java... J'aime le java .
    Comment as-tu fait avec les autres outils ?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par thelvin Voir le message
    C'est-à-dire ? Quelle technologie lie ces "règles" à XSLT ?
    Je ne connais que la base du XML.
    Je peut juste dire que ces règles, sont un fichier .xml avec la balise racine "rules" et pleins d'enfants et des sous-enfants "rule".

    Code exemple : 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
    <rule e="way" k="highway" v="path|footway">
     
    			<rule e="way" k="sac_scale" v="hiking|t1|T1">
     
    				<line class="sac-scale-t1" smart-linecap="no"/>
     
    			</rule>
     
    			<rule e="way" k="sac_scale" v="mountain_hiking|t2|T2">
     
    				<line class="sac-scale-t2" smart-linecap="no"/>
     
    			</rule>
     
    			<rule e="way" k="sac_scale" v="demanding_mountain_hiking|t3|T3">
     
    				<line class="sac-scale-t3" smart-linecap="no"/>
     
    			</rule>
     
    			<rule e="way" k="sac_scale" v="alpine_hiking|t4|T4">
     
    				<line class="sac-scale-t4" smart-linecap="no"/>
     
    			</rule>
     
    			<rule e="way" k="sac_scale" v="demanding_alpine_hiking|t5|T5">
     
    				<line class="sac-scale-t5" smart-linecap="no"/>
     
    			</rule>
     
    			<rule e="way" k="sac_scale" v="difficult_alpine_hiking|t6|T6">
     
    				<line class="sac-scale-t6" smart-linecap="no"/>
     
    			</rule>
     
    		</rule>

    Citation Envoyé par thelvin Voir le message
    Comment as-tu fait avec les autres outils ?
    En fait, j'ai utilisé xsltproc, outil en ligne de command sous linux, qui lui semble accepter mon fichier de règles.

    Code utilisation de xsltproc : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/bin/xsltproc  --stringparam osmfile /home/osmarender/xslt/data.osm ./xslt/osmarender.xsl ./stylesheets/osm-map-features-z17.xml

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Ce fichier .xml de "rules" serait-il référencé dans le fichier "./xslt/osmarender.xsl"?

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par Morbo Voir le message
    Ce fichier .xml de "rules" serait-il référencé dans le fichier "./xslt/osmarender.xsl"?
    non par contre le fichier .xsl est référencé dans celui des "rules"
    Code entete de osm-map-features.xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="osmarender.xsl"?>

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    A priori, pour faire la même chose que l'option "--stringparam" de XSLT, il faut ajouter la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transformation.setParameter("osmfile", "/home/osmarender/xslt/data.osm");
    avant d'appeler transformation.transform(). Il s'agit de définir un paramètre "osmfile" déclaré quelque part dans la feuille XSLT.
    Pour être honnête cela me surprend un peu, mais n'est pas impossible avec un xPath du genre document($osmfile)//rule

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Après réflexion en comparaison à la commande xsltproc, j'ai pu ajouter le paramettre osmfile que je n'utilisais pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Transformer transformation = fabrique.newTransformer(xslt);
    transformation.setParameter("osmfile", "/home/map.osm");
    J'ai donc une config identique à celle de la commande xsltproc.
    Seulement j'obtient un resultat vide, la taille de l'image SVG est correct mais il n'y à qu'un carré blanc.
    J'obtient aussi, pendant l'execution plusieurs messages de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    file:/home/osmarender/xslt/osmarender.xsl; Ligne #3561; Colonne #24;
    Processing <rule e="node|way" k="osmarender:render" v="~|yes" >
    Je suis perplexe

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Ben... On a pas ton code complet donc il est évident qu'on peut pas deviner ce qui se passe. Peut-être que ta feuille XSLT compte sur des bugs ou des extensions spécifiques à xsltproc, va savoir.
    Concernant les lignes que tu vois, ça ressemble à des logs normaux.

    Mais bon, même si on avait le code complet, personnellement je ne vais pas me taper des pages de codes juste pour aider quelqu'un. Il faut nous fabriquer un exemple complet, avec tous les fichiers et qui utilise les mêmes syntaxes, mais qui soit court.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Il faut nous fabriquer un exemple complet, avec tous les fichiers et qui utilise les mêmes syntaxes, mais qui soit court.
    Je ne voit pas comment fabriquer un petit exemple alors que je ne sais meme pas ce qu'il ce passe..

    En tt cas, d'après la notice, c'est pas sensé etre spécifique à tel ou tel parseur.
    Aussi à mon dernier test, j'ai remarqué que d'un coté, avec xsltproc les logs continuaient après la série des: "Processing <rule...", mais que de l'autre, ça s'arrétait.

    Pour faire simple voici les fichiers qui fonctionnent avec la commande xsltproc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/bin/xsltproc  --stringparam osmfile /home/data.osm /home/osmarender.xsl /home/osm-map-features.xml > out.svg

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Dans osmarender.xsl, il y a plusieurs utilisations de la fonction "document()" pour lire des fichiers xml externes. Il y a un parametre "$symbolsDir" qui désigne un répertoire de ce genre de ressources (il y a calcul dynamique ). Il faut donc que ces ressources soient accessible depuis la transformation XSL-T.
    Tu peux tenter de d'écraser sa valeur par défaut en ajoutant ce paramètre à la transformation.

    Sinon, en java, peut être que changer le répertoire d'exécution du process suffirait.
    Sinon il faut préciser une setURIResolver(URIResolver resolver) sur ton instance de "Transformer".

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    merci pour cette réponse d'expert.
    Je n'ai pas parfaitement compris ducoup mais, en ce qui concerne les ressources, il s'agit de fichiers .svg et on peut forcément s'en passer, étant donner que l'on s'en passe très bien avec xsltproc .
    À moins que cela génère une erreur avec java, mais j'ai eu beau tester avec le répertoire de symboles bien placé et cela n'a rien changé...

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    effectivement, je vien de tester avec une grosse map; Car en fait il s'agit de convertir des données xml d'une carte en une image.
    J'ai donc essayer de nouveau avec xsltproc et j'obtient de nombreux messages de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    warning: failed to load external entity "/home/stylesheets/symbols/football.svg"
    Par contre le fichier svg est bien créé, sans les symboles évidemment.
    La conversion n'est pas bloquée par le manque de ressources, donc je suppose que le problème ne viens pas de là.

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Bien, j'ai lâché l'affaire, la conversion xml est un vaste domaine, mais qui ne m'intéresse pas plus que ça.
    Je vais utiliser un autre moyen qui conviendra mieux d'ailleurs.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/10/2014, 10h43
  2. Réponses: 6
    Dernier message: 01/06/2010, 16h59
  3. Obligatoire : lisez les règles du forum : MAJ 06/08/2010
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 03/07/2008, 14h46
  4. Réponses: 3
    Dernier message: 06/09/2007, 15h31
  5. [XSLT] Règle par défaut
    Par pierrelm dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 19/04/2007, 12h50

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