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

Format d'échange (XML, JSON...) Java Discussion :

Transformation XML Xquery via saxon9 [SAX]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut Transformation XML Xquery via saxon9
    Bonjour,

    je cherche à faire une transformation XML -> XML par xquery/saxon9. L'idée est juste ici de mapper des données du XML d'entrée vers le XML de sortie. Le problème que je rencontre est qu'en sortie, j'obtiens le document XML souhaité (la xquery a bien été executé) sauf que les fonctions xquery n'ont pas été executées.

    Le code java :
    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
     
    public static void main(String[] args) {
    	try {
     
                Configuration config = new Configuration();
                StaticQueryContext staticContext = new StaticQueryContext(config);
     
                InputStream queryStream = new FileInputStream("xqueries\\Prototype.xq");
                XQueryExpression exp = staticContext.compileQuery(queryStream, null);
                DynamicQueryContext dynamicContext = new DynamicQueryContext(config);
     
                DocumentInfo d = staticContext.buildDocument(new StreamSource(new File("D:\\workspace\\saxon9\\Tests\\xml\\livre.xml"))).getDocumentRoot();
     
                dynamicContext.setContextItem(d);
     
                StringWriter wr = new StringWriter();
     
                exp.run(dynamicContext,new StreamResult(wr),null);
     
                System.out.println(wr.getBuffer().toString());
            }
            catch (Exception e) {
                throw new RuntimeException(e);
            }
    }
    La xquery (prend un document de type livre en entrée et construit un document de type auteur) :
    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
     
    declare namespace xf = "http://test.bidon/Prototype/";
    declare namespace kiyo = "java:rdg.ReglesGestion";
    declare namespace liv = "http://test.bidon/livre";
    declare namespace aut = "http://test.bidon/auteur";
     
    declare function xf:Prototype($input as element(liv:livre))
        as element(aut:auteur) {
        	<aut:auteur>
        		<aut:nom>data($input/liv:nomAuteur)</aut:nom>
        		<aut:prenom>data($input/liv:prenomAuteur)</aut:prenom>
        		<aut:commentaire>kiyo:rdgTestParam(kiyo:new(), data($input/liv:nomAuteur), data($input/liv:prenomAuteur))</aut:commentaire>
        	</aut:auteur>
    };
     
    declare variable $input as element(liv:livre) external;
     
    xf:Prototype($input)
    Le document de type livre en entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <livre xmlns:liv="http://test.bidon/livre">
        <titre xmlns:liv="http://test.bidon/livre">Au clair de mars</titre>
        <editeur xmlns:liv="http://test.bidon/livre">Les Editions</editeur>
        <nomAuteur xmlns:liv="http://test.bidon/livre">Dupont</nomAuteur>
        <prenomAuteur xmlns:liv="http://test.bidon/livre">Jean</prenomAuteur>
    </livre>
    Le document de type auteur en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="UTF-8"?>
    <aut:auteur xmlns:aut="http://test.bidon/auteur">
       <aut:nom>data($input/liv:nomAuteur)</aut:nom>
       <aut:prenom>data($input/liv:prenomAuteur)</aut:prenom>
       <aut:commentaire>kiyo:rdgTestParam(kiyo:new(), data($input/liv:nomAuteur), data($input/liv:prenomAuteur))</aut:commentaire>
    </aut:auteur>
    Come on le voit, data($input/liv:nomAuteur) et consors n'ont pas été executées...

    Merci de votre aide.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut
    Je viens de me rendre compte que j'avais oublié de mettre les accolades pour délimiter les appels aux fonctions dans la xquery :

    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
    declare namespace xf = "http://test.bidon/Prototype/";
    declare namespace kiyo = "java:rdg.ReglesGestion";
    declare namespace liv = "http://test.bidon/livre";
    declare namespace aut = "http://test.bidon/auteur";
    
    declare function xf:Prototype($input as element(liv:livre))
        as element(aut:auteur) {
        	<aut:auteur>
        		<aut:nom>{data($input/liv:nomAuteur){</aut:nom>
        		<aut:prenom>{data($input/liv:prenomAuteur){</aut:prenom>
        		<aut:commentaire>{kiyo:rdgTestParam(kiyo:new(), data($input/liv:nomAuteur), data($input/liv:prenomAuteur)){</aut:commentaire>
        	</aut:auteur>
    };
    
    declare variable $input as element(liv:livre) external;
    
    xf:Prototype($input)
    Par contre, j'ai maintenant l'erreur suivante :

    Error at external variable declaration on line 15 of *module with no systemId*:
    XPDY0002: No value supplied for required parameter $input
    Exception in thread "main" java.lang.RuntimeException: net.sf.saxon.trans.XPathException: No value supplied for required parameter $input
    at TestSimple.main(TestSimple.java:54)
    Caused by: net.sf.saxon.trans.XPathException: No value supplied for required parameter $input
    at net.sf.saxon.instruct.GlobalParam.evaluateVariable(GlobalParam.java:49)
    at net.sf.saxon.expr.VariableReference.evaluateVariable(VariableReference.java:443)
    at net.sf.saxon.expr.ExpressionTool.evaluate(ExpressionTool.java:271)
    at net.sf.saxon.expr.UserFunctionCall.evaluateArguments(UserFunctionCall.java:452)
    at net.sf.saxon.expr.UserFunctionCall.process(UserFunctionCall.java:409)
    at net.sf.saxon.query.XQueryExpression.run(XQueryExpression.java:336)
    at TestSimple.main(TestSimple.java:48)

    C'est quoi ce "systemId" ?

    Merci.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut
    Je continue à avancer petit à petit : il suffit de faire une staticContext.setBaseURI pour régler le pb précédent.

    Maintenant, il semble que ce soit le document que je passe en entrée de la xquery qui pose problème ou la xquery car j'ai l'erreur suivante :

    XPDY0002: No value supplied for required parameter $input
    Exception in thread "main" java.lang.RuntimeException: net.sf.saxon.trans.XPathException: No value supplied for required parameter $input
    at TestSimple.main(TestSimple.java:65)

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

Discussions similaires

  1. [ABAP] Transformation XML - ABAP via XSLT
    Par Pat_lyon dans le forum SAP
    Réponses: 5
    Dernier message: 06/12/2007, 11h46
  2. transformation XML->TXT via XSLT
    Par manumanien dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 07/06/2005, 20h30
  3. transformation xml via xslt
    Par ronnie dans le forum XSL/XSLT/XPATH
    Réponses: 17
    Dernier message: 10/05/2005, 10h58
  4. [XSLT] [XML->HTML] transformation XML -> HTML via XSL
    Par Great Sayaman dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/12/2004, 22h12
  5. Transformation xml + xsl -> HTML via PHP
    Par petit-ourson dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/10/2003, 22h42

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