Cliquez ici.
Cliquez ici.
Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.

 
Cliquez ici.

dev@xmlfr.org : liste de discussion des développeurs du site XMLfr

[dev@xmlfr.org] Re: XMLfr et Lucene : phase 2bis - tests avec Orbeon Presentation Server

[dev@xmlfr.org] Re: XMLfr et Lucene : phase 2bis - tests avec Orbeon Presentation Server

Auteur: Sylvain Wallez <sylvain.wallez@anyware-tech.com>
Date: 28/09/2004 - 08:18

Erik Bruchez wrote:

>Sylvain Wallez wrote:
>
> > Oui, le "transform-output-1" est effectivement exécuté 2 fois.
>
>(Ceci est discute plus loin dans cette thread, donc je ne commente pas
>ici.)
>
> > J'ai lu la doc de Orbeon Presentation Server (OPS?), et ce qui me
> > manque vraiment (outre le flowscript), c'est la notion de
> > serializer, indépendant du support de sortie. D'après ce que j'ai
> > compris, un serializer OPS est un processor sans outputs. Le
> > problème est qu'il définit non seulement *comment* le document XML
> > est sérialisé, mais aussi *où* on l'envoie (fichier, réponse http,
> > etc).
> >
> > A mon sens, ces notions doivent être séparées. C'est le cas dans
> > Cocoon et c'est ce qui permet de prendre la sortie d'une URL
> > "cocoon:" pour en faire ce que bon nous semble.
>
>J'essaie de comprendre un peu les implications, surtout negatives pour
>Presentation Server, de ceci. Avec XPL, il n'y a pas de standard pour
>definir comment on peut implementer un serialiseur. On a juste un
>processeur qui n'a pas de sortie XML (SAX), comme correctement note.
>
>Mais je ne vois pas vraiment de probleme. On a un serialiseur par type
>de sortie, e.g. HTTP, File, etc. Si on veut reutiliser un pipeline, on
>definit juste un pipeline avec une sortie, sans serialiseur, et on
>appelle ce pipeline depuis d'autres pipelines. Il n'y a alors pas de
>concept de serialisation necessaire lors de l'appel du premier
>pipeline, puisque la sortie du pipeline est un stream d'evenements SAX
>(je devrais peut-etre plutot dire un infoset XML puisque SAX est un
>detail d'implementation).
>
>

Je pense avoir mal exprimé ma remarque : les serializers dans Cocoon
définissent la nature du flux binaire qui va représenter le document XML
final. Cela peut être aussi simple que du texte ou aussi compliqué que
du JPEG (à partir de SVG), du PDF (XSL-FO) ou de la musique au format
Midi (si, si, à partir d'un document XMidi).

Le serializer ne s'occupe que de produire le flux binaire, sans
s'occuper de ce qu'est réllement ce flux binaire. Cette préoccupation
est celle de l'environnement. Cela peut être aussi bien la réponse http,
un fichier, un blob en base de données, un document CVS, un repository
WebDAV, le contenu d'un mail, etc (tout ceci existe actuellement dans
Cocoon).

Cette séparation permet ensuite d'explorer toute la combinatoire : on
peut parfaitement envoyer un mail dont le contenu est un pipeline
produisant du HTML, avec des attachements PDF et Midi produits
dynamiquement.

C'est parce que OPS n'a pas cette distinction serializer/environnement
que ses serializers sont classés par flux de sortie (cf
http://www.orbeon.com/ois/doc/processors-serializers) et non pas par
fonctionnalité. Par exemple, le serializer PDF n'existe qu'en version
réponse http et on ne peut donc pas produire un fichier PDF sur disque,
contrairement à Cocoon où le résultat d'un "cocoon:" peut être envoyé
n'importe où.

Petit détail pratique : cette distinction permet à un pipeline interne
(une URL appelée uniquement via "cocoon:" dans un scenario nominal)
d'être appelée depuis un navigateur, ce qui est très utile en phase de
développement.

>Je comprends certains use cases lies au protocol "cocoon:", et j'y
>pense encore, mais il faut voir qu'avec XPL, on a cet autre moyen (et
>qui est le moyen unique en principe) de referer aux sorties d'un
>pipeline qui ne requiert pas du tout la serialisation en stream et/ou
>l'utilisation d'un URL.
>
>

Allons un peu plus loin sur un élément essentiel de l'architecture de
Cocoon : toute URL se résoud en un objet "source", qui définit une
méthode d'accès à un contenu, et n'est pas liée à la nature de ce
contenu. Dans sa forme la plus basique, une source ne donne accès qu'à
un InputStream. Mais cette interface de base a des extensions
(optionnelles) supportant l'écriture (cf blob, fichier, CVS et autres
mentionnés ci-dessus) et... l'accès à un flux XML pour les systèmes
fournissant un accès XML natif. C'est le cas d'une base xmldb (protocole
"xmldb:") et de "cocoon:".

Le choix entre les deux facettes du protocole "cocoon:" (binaire et XML)
dépend de l'environnement d'utilisation. Lorsqu'une URL "cocoon:" est
utilisée dans un contexte XML (comme l'aggrégation ou le générateur
"file"), sa production est le flux SAX qui entre dans le serializer du
pipeline. On a donc dans ce cas un vrai chaînage SAX des pipelines.

Cette notion de source et de protocole étendu permet d'avoir des
architectures très souples, puisque qu'on accède aux sources de données
uniquement avec des URLs. Si le système doit évoluer par exemple d'un
stockage en filesystem vers un stockage en blob, les changements
consistent seulement en une mise à jour des URLs (on peut aussi avoir un
protocole virtuel de type "mount-table" rendant l'application totalement
étanche à ces changements).

Ces URLs étendues sont utilisées *partout* dans Cocoon, à chaque fois
qu'on a besoin d'accéder à un flux de données. C'est valable pour le
générateur "file" (bien mal nommé, puisqu'il s'agit en fait d'une URL),
les XSL, le source des XSP et même celui des sitemaps ou des flowscripts
(code javascript).

>Admettons qu'on ait un document XHTML, et qu'on veuille l'envoyer a un
>browser soit en XHTML, soit en HTML. On ecrit un pipeline qui genere
>le document en question, puis on appelle ce pipeline depuis deux
>courts pipelines, l'un qui serialise selon la methode HTML vers HTTP,
>l'autre selon la methode XML vers HTTP, avec les parametres de
>configuration (DOCTYPE, etc.) necessaires dans chaque cas.
>
>

D'après ce que j'ai compris, l'exécution d'un XPL passe par un "chaînage
arrière", en partant des serializers (sans output) et en remontant les
relations input -href/output-id jusqu'au(x) générateur(s).

Comment (question de newbie) peut-on dans ce cas choisir le type de
production en fonction de l'entête http user-agent ?

Voici comment on ferait avec Cocoon :

<map:match src="{1}.hml">
  <map:generate src="{1}.xml"/>
  <map:transform src="doc2html.xsl"/>
  <map:select type="browser">
    <map:when test="xhtml-compliant">
      <map:serialize type="xhtml"/>
    </map:when>
    <map:otherwise>
      <map:serialize type="html"/>
    </map:otherwise>
  </map:select>
</map:match>

Le selecteur "browser" permet d'associer des patterns sur l'entête
user-agent à des noms symboliques comme ici "xhtml-compliant".

>Le nom des serialiseurs est peut etre un probleme (XML Serializer,
>HTML Serialiser). Il s'agit en fait dans tous ces cas du HTTP
>Serializer. Ce serializer permet d'etre configure pour serialiser en
>un stream XML, HTML ou texte. Comme raccourci, on a cree des
>sous-classes du HTTP serializer qui automatiquement met le serialiseur
>en mode XML, HTML ou texte. On a donc principalement un serialiseur
>par destination:
>
>o File Serializer pour des fichiers
>
>o HTTP Serializer pour servlet / portlet (qui inclut les serialiseurs
> XML, HTML et texte)
>
>o URL Serializer pour les destinations URL ecrivables ("file:",
> "oxf:")
>
>o Etc.
>
>

Ah. Voici la confirmation de ce que j'exprimais précédemment.

Sylvain

-- 
Sylvain Wallez                                  Anyware Technologies
http://www.apache.org/~sylvain           http://www.anyware-tech.com
{ XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects }
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "dev@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de 
tout sujet technique lie au developpement du site XMLfr.
Pour resilier votre abonnement, envoyez un message contenant 
la commande "unsubscribe" a dev-request@xmlfr.org
(mailto:dev-request@xmlfr.org?Subject=unsubscribe)
Received on Tue Sep 28 10:18:19 2004

Archive générée par hypermail 2.1.8 le 04/10/2004 - 20:25 UTC

webmaster@xmlfr.org

 

dev@xmlfr.org

Liste de discussion de la communauté des développeurs de XMLfr.

Cette liste publique est dédiée aux discussions concernant la conception et le développement technique du site XMLfr.



Cliquez ici.
Cliquez ici.

Devenez rédacteur <XML>fr et contribuez au développement du xml francophone !
Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot  

Conception, réalisation et hébergement
Questions ou commentaires
  redacteurs@xmlfr.org