You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-fr@cocoon.apache.org by Julien Barnier <ju...@ens-lsh.fr> on 2006/02/01 11:30:36 UTC
Transformations "en serie"
Bonjour,
Je viens de développer une petite application Cocoon très simple qui
me permet de générér des notices bibliographiques dans différents
formats à partir de documents XML.
Je souhaiterais maintenant faire la même chose pour une série
d'articles, issus par exemple d'un résultat de recherche plein
texte. A priori je pensais faire un truc du genre "j'envoie la liste
des identifiants d'articles en POST à mon appli Cocoon, celle-ci
effectue toutes les transformations et soient concatène tous les
résultats dans un fichier texte, doit les regroupe dans un zip".
Ça c'est la théorie, mais en pratique ça ne me semble pas si
simple. je me pose donc un certain nombre de questions :
- est-ce qu'on peut récupérer le contenu de la méthode POST autrement
qu'en XSP, juste avec le sitemap ?
- comment concaténer le résultat de plusieurs transformations XSLT
dans un même fichier ?
Merci d'avance si vous avez tout élément d'information...
Cordialement,
Julien
---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org
Re: Transformations "en serie" [SOLVED]
Posted by Julien Barnier <ju...@ens-lsh.fr>.
> Argh, ça m'ennui vraiment de multiplier les messages sur un point de
> détail comme celui-là, mais je n'arrive pas à résoudre ce problème.
Bon, cette fois je crois que c'est bon. Je vais m'en tenir à la
méthode "set-header", en rajoutant ceci dans mon sitemap :
<map:act type="set-header">
<map:parameter name="Content-Disposition" value='attachment ; filename="export.zip"' />
</map:act>
Merci encore pour votre aide !
--
Julien
---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org
Re: Transformations "en serie"
Posted by Julien Barnier <ju...@ens-lsh.fr>.
> Tu pourrais faire un redirect depuis le pipeline qui fait le POST, sur
> le bon nom de fichier, c'est la solution la plus propre à mon avis.
Argh, ça m'ennui vraiment de multiplier les messages sur un point de
détail comme celui-là, mais je n'arrive pas à résoudre ce problème.
Cocoon est appelé depuis une simple page HTML contenant un formulaire
en POST avec comme action mon installation de Cocoon.
Le problème est que je ne vois pas comment faire cette redirection
pour changer le nom du fichier. Si je fais une redirection sur une uri
de type cocoon://toto.zip, c'est évidemment transparent pour le client
et ça ne change pas le nom du fichier sauvegardé. Si je fais une
redirection sur une uri de type toto.zip simple, je perds mes données
transmises par POST et la transformation n'est donc pas bonne. Et avec
une uri de type context://, je ne récupère aucun résultat.
Du coup je suis un peu perdu sur ce coup-là...
Si vous avez une idée supplémentaire, n'hésitez pas.
Merci encore,
Julien
---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org
Re: Transformations "en serie"
Posted by Bertrand Delacretaz <bd...@apache.org>.
Le 2 févr. 06, à 17:02, Julien Barnier a écrit :
>> Pourquoi pas <map:match="toto.zip"> ???
>
> Parce qu'en fait le pipeline est appelé depuis un formulaire. Et le
> type de fichier renvoyé dépend des options choisies dans le
> formulaire.
Tu pourrais faire un redirect depuis le pipeline qui fait le POST, sur
le bon nom de fichier, c'est la solution la plus propre à mon avis.
Sinon, le header HTTP Content-Disposition peut aider à définir le nom
du fichier qui sera sauvé, mais ça dépend du browser.
-Bertrand
Re: Transformations "en serie"
Posted by Julien Barnier <ju...@ens-lsh.fr>.
> Pourquoi pas <map:match="toto.zip"> ???
Parce qu'en fait le pipeline est appelé depuis un formulaire. Et le
type de fichier renvoyé dépend des options choisies dans le
formulaire.
Actuellement, le contenu du formulaire est envoyé sur un <map:match
pattern="post-request"> mais le résultat peut être un fichier zip, un
fichier texte ou un fichier xml. J'aurais donc voulu modifier le nom
du fichier renvoyé en fonction.
Mais peut-être est-ce mon pipeline qui n'est pas bien conçu...
---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org
Re: Transformations "en serie"
Posted by Sylvain Wallez <sy...@apache.org>.
Julien Barnier wrote:
> Bonjour,
>
>
>> Oui, tout à fait, c'est la meilleure solution si le nombre de
>> paramètres est variable (sinon on peut aussi les récupérer dans la
>> sitemap avec l'input module request-param).
>>
>
> Merci pour l'info, effectivement, le request-param est plus pratique
> pour la gestion de paramètres non répétés.
>
> Par contre il me reste une petite question bête en suspens, mais je ne
> trouve pas la réponse (quoi que je vais sans doute la trouver juste
> après avoir posté ce message, mais tant pis :-) ).
>
> Le problème est le suivant : quand j'effectue une requête sur cocoon
> et que celle-ci est "matchée", le nom du fichier renvoyé est celui
> effectivement "matché". Par exemple, si j'ai l'élément de pipeline
> suivant qui renvoit un fichier zip :
>
> <map:match pattern="create-zip">
> <map:generate src="cocoon://zip_archive.xml" />
> <map:serialize type="zip" />
> </map:match>
>
> Alors le fichier renvoyé va être nommé "create-zip". Or j'aimerais
> pouvoir le renommer en "toto.zip" ou quelque chose de ce genre.
>
> Y'a-t-il une option quelque part qui permet de faire ce genre de
> choses ?
>
Pourquoi pas <map:match="toto.zip"> ???
Sylvain
--
Sylvain Wallez Anyware Technologies
http://bluxte.net http://www.anyware-tech.com
Apache Software Foundation Member Research & Technology Director
---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org
Re: Transformations "en serie"
Posted by Julien Barnier <ju...@ens-lsh.fr>.
Bonjour,
> Oui, tout à fait, c'est la meilleure solution si le nombre de
> paramètres est variable (sinon on peut aussi les récupérer dans la
> sitemap avec l'input module request-param).
Merci pour l'info, effectivement, le request-param est plus pratique
pour la gestion de paramètres non répétés.
Par contre il me reste une petite question bête en suspens, mais je ne
trouve pas la réponse (quoi que je vais sans doute la trouver juste
après avoir posté ce message, mais tant pis :-) ).
Le problème est le suivant : quand j'effectue une requête sur cocoon
et que celle-ci est "matchée", le nom du fichier renvoyé est celui
effectivement "matché". Par exemple, si j'ai l'élément de pipeline
suivant qui renvoit un fichier zip :
<map:match pattern="create-zip">
<map:generate src="cocoon://zip_archive.xml" />
<map:serialize type="zip" />
</map:match>
Alors le fichier renvoyé va être nommé "create-zip". Or j'aimerais
pouvoir le renommer en "toto.zip" ou quelque chose de ce genre.
Y'a-t-il une option quelque part qui permet de faire ce genre de
choses ?
Merci encore d'avance,
Julien
---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org
Re: Transformations "en serie"
Posted by Bertrand Delacretaz <bd...@apache.org>.
Le 1 févr. 06, à 15:03, Julien Barnier a écrit :
> ...Il me semble qu'en utilisant un RequestGenerator, ça devrait très
> bien
> fonctionner...
Oui, tout à fait, c'est la meilleure solution si le nombre de
paramètres est variable (sinon on peut aussi les récupérer dans la
sitemap avec l'input module request-param).
-Bertrand
Re: Transformations "en serie"
Posted by Julien Barnier <ju...@ens-lsh.fr>.
> Est-ce possible avec le sitemap, sans devoir passer par les XSP ?
> (J'espère être à peu près clair...)
Excusez-moi, je me réponds à moi-même, mais je pense avoir trouvé
comment faire juste après avoir posté ma question (un grand classique
!).
Il me semble qu'en utilisant un RequestGenerator, ça devrait très bien
fonctionner...
N'hésitez pas à me signaler s'il y a une meilleure solution !
Merci encore,
Julien
---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org
Re: Transformations "en serie"
Posted by Julien Barnier <ju...@ens-lsh.fr>.
Bonjour,
> Oui, avec le StreamGenerator, <map:generate type="stream"/>.
> Avec CInclude - à partir de ton POST tu génères (par XSLT) un document
> pour cinclude, genre
>
> <cinclude:include src="cocoon://data1.xml"/>
> <cinclude:include src="cocoon://data2.xml"/>
> ...
>
> ensuite tu passes ça dans le CIncludeTransformer, qui appellera les
> URL indiquées pour générer les documents, et fera l'agrégation du tout.
Effectivement, cette partie là fonctionne très bien et le caching
fonctionne aussi. Je m'oriente donc vers quelque chose du genre :
<map:match pattern="cinclude.xml">
<map:generate ... />
<map:serialize />
</map:match>
<map:match pattern="pattern_à_matcher">
<map:generate src="cocoon://cinclude.xml" />
<map:transform type="cinclude" />
<map:serialize />
</map:match>
Pa contre, ce qui me manque, c'est la partie permettant de générer le
fichier cinclude.xml (le premier <map:match>).
Je ne suis pas sûr de pouvoir utiliser le StreamGenerator car celui-ci
me semble plutôt servir à récupérer directement des données au format
XML envoyées par POST. Or ce que je voudrais plutôt faire c'est
récupérer par POST une liste d'identifiants de documents de type
"id001", "id002", etc., et générer le fichier cinclude.xml suivant :
<?xml version="1.0" encoding="utf-8"?>
<page xmlns:cinclude="http://apache.org/cocoon/include/1.0">
<cinclude:include src="cocoon://id001.xml" />
<cinclude:include src="cocoon://id002.xml" />
</page>
Est-ce possible avec le sitemap, sans devoir passer par les XSP ?
(J'espère être à peu près clair...)
En tous cas, merci beaucoup pour ces éléments de réponse très
intéressants.
Cordialement,
Julien
---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org
Re: Transformations "en serie"
Posted by Bertrand Delacretaz <bd...@apache.org>.
Le 1 févr. 06, à 11:30, Julien Barnier a écrit :
> ...- est-ce qu'on peut récupérer le contenu de la méthode POST
> autrement
> qu'en XSP, juste avec le sitemap ?..
Oui, avec le StreamGenerator, <map:generate type="stream"/>.
> ...- comment concaténer le résultat de plusieurs transformations XSLT
> dans un même fichier ?..
Avec CInclude - à partir de ton POST tu génères (par XSLT) un document
pour cinclude, genre
<cinclude:include src="cocoon://data1.xml"/>
<cinclude:include src="cocoon://data2.xml"/>
...
ensuite tu passes ça dans le CIncludeTransformer, qui appellera les URL
indiquées pour générer les documents, et fera l'agrégation du tout.
Je pense que ça sera plus efficace si tu ne mets pas de transformer
XSLT après le CInclude, car les transformers XSLT actuels chargent le
document complet en mémoire - idéalement les dataN.xml devraient être
"terminés", et on ne fera que l'agrégation avec CInclude.
Ca va marcher si tes données ne sont pas trop énormes, sinon je te
conseille de faire l'agrégation à l'extérieur de Cocoon, avec wget par
exemple.
-Bertrand