Re: XProc avance
COUTHURES Alain <[email protected]> Thu, 12 Jul 2007 20:03:48 +0200
| Newsgroups | gmane.text.xml.french.tech |
|---|---|
| Message-ID | <[email protected]> |
La nécessité de quelque chose comme XProc est évidente mais le moins que
l'on puisse dire est que cela peine à arriver...
Aussi, avant même d'en découvrir l'existence dans Orbeon
PresentationServer, je m'étais déjà attelé à faire mon propre langage
XML pour enchainer transformations, manipulations de fichiers (CSV,
Office, ZIP) et autres traitements usuels (requêtes HTTP et captures de
pages HTML, envois automatiques d'e-mails, conversions SVG en PNG, ...).
Il en résulte un projet OpenSource (http://www.agencexml.com/txs/fr)
utilisant l'API DOM avec des fonctionnalités très similaires au
potentiel de XProc. Par contre, son approche est bien plus arborescente
et tout s'orchestre par une génération naturelle de code par
transformations XSLT successives.
Autant dire que je fais maintenant tous mes programmes avec (batchs ou
pages dynamiques) !
Alain COUTHURES
<agenceXML>
http://www.agencexml.com
Stephane Bortzmeyer a écrit :
> http://www.bortzmeyer.org/xproc.html
>
> Il est fréquent qu'un processus de traitement de données XML nécessite
> plusieurs étapes : inclure d'autres documents (parfois récupérés sur le
> réseau), transformer avec XSLT, valider, etc. Actuellement, ces étapes
> sont enchaînées par un programme écrit dans un langage impératif ou
> déclaratif. Peut-on le faire dans un langage XML ? On pourra bientôt
> avec XProc, un langage de chaîne ("pipeline") de traitement,
> actuellement à l'état de projet de norme.
>
> Deux dates importantes pour XProc : le 6 juillet, sortie d'une nouvelle
> version du projet de norme
> (http://www.w3.org/TR/2007/WD-xproc-20070706/) et, le 10 juillet,
> sortie de la première version de la première mise en oeuvre de XProc,
> "XML Pipeline Processor
> (http://norman.walsh.name/2007/07/10/xproc001)".
>
> Que fait le langage XProc ? Prenons une application qui a besoin
> d'effectuer plusieurs opérations sur des fichiers XML. Par exemple, le
> site Web www.langtag.net (http://www.langtag.net/) est écrit en XML et
> le XHTML qui est servi aux clients est produit par une transformation
> XSLT, suivie d'une validation pour s'assurer de la correction du XHTML.
> Comment enchaîner ces deux étapes ? Actuellement, c'est réalisé dans un
> Makefile :
>
> %.html: %.xml ${STYLESHEET} language-subtag-registry-version
> xsltproc --stringparam lsr-version `cat language-subtag-registry-version` \
> --output $@ ${STYLESHEET} $< && xmllint --noout --valid $@
>
> Quand on voudra créer index.html, make va
> exécuter xsltproc (le processeur XSLT) puis
> (&& signifie « si la première étape a été
> un succès, exécuter ensuite la seconde » en shell
> Unix) xmllint (le validateur). Si une des étapes échoue, make
> s'arrêtera en erreur et le site Web ne sera pas mis à jour (ce qui
> garantit que son contenu sera 100 % valide).
>
> Une autre solution, plutôt que le langage *déclaratif* de make aurait
> été d'utiliser un langage *impératif* comme Python ou Perl. Question de
> goût. Une autre solution est de sous-traiter cette tâche à un service
> en ligne comme " Yahoo Pipes", avec toutes les limitations qu'il
> présente (impossibilité de travailler sur des documents privés, par
> exemple). Mais il n'existait pas de solution tout-XML.
>
> XProc est cette solution : c'est un langage XML qui permet de décrire
> une chaîne de traitement ("pipeline" dans la norme). Cette chaîne est
> composée d'opérations dont certaines sont pré-définies dans la
> "Standard step library". L'opération ci-dessus (transformation XSLT
> puis validation) aurait pu s'écrire, en XProc :
>
>
> <proc:pipeline name="langtag.net" xmlns:p="http://www.w3.org/2007/03/xproc">
> <proc:input port="source" primary="yes"/>
> <proc:input port="schemaDoc" sequence="yes" primary="no"/>
> <proc:input port="stylesheetDoc" sequence="yes" primary="no"/>
> <proc:output port="result"/>
>
> <proc:xslt>
> <proc:input port="stylesheet">
> <proc:pipe step="langtag.net" port="stylesheetDoc"/>
> </proc:input>
> <proc:xslt>
>
> <!-- Pas de validation avec DTD dans la bibliothèque standard, donc
> on utilise la version Relax NG de XHTML -->
> <proc:validate-relax-ng>
> <proc:input port="schema">
> <proc:pipe step="langtag.net" port="schemaDoc"/>
> </proc:input>
> </proc:validate-relax-ng>
>
> </proc:pipeline>
>
>
>
> La façon dont les ports d'entrée-sortie (ici,
> source, schemaDoc et
> stylesheetDoc) sont connectés aux vraies
> ressources dépend de l'implémentation.
>
>
> Les paramètres des étapes sont nommés, par exemple stylesheet pour
> l'étape <proc:xslt> est nommée dans la déclaration de cette étape
> standard, dans la bibliothèque.
>
>
> Si une étape de la chaîne (l'exemple ci-dessus est très simple, avec
> seulement deux étapes) échoue, le traitement s'arrête. XProc a un
> mécanisme de traitement d'exceptions, qui permet de continuer en cas
> d'erreur si on le souhaite. Voici l'exemple que donne la norme, pour
> récupérer les erreurs éventuelles provoquées par un échec dans la
> récupération d'une ressource en HTTP :
>
>
> <proc:try xmlns:step="http://www.w3.org/2007/03/xproc-step">
> <proc:group>
> <proc:http-request>
> <proc:input port="source">
> <proc:inline>
> <step:http-request method="get" href="http://example.org/something"/>
> </proc:inline>
> </proc:input>
> </proc:http-request>
> </proc:group>
> <proc:catch>
> <proc:identity>
> <proc:input port="source">
> <proc:inline>
> <step:error>HTTP Request Failed</step:error>
> </proc:inline>
> </proc:input>
> </proc:identity>
> </proc:catch>
> </proc:try>
>
>
>
>
> Je n'ai pas encore testé le programme xproc (les exemples XProc
> ci-dessus sont donc livrés sans garantie) et, de toute façon, la norme
> n'est pas encore finale. Mais XProc semble susceptible de beaucoup
> aider les programmeurs qui devront effectuer des opérations sur leurs
> fichiers XML.
>
>
> --
> Devenez redacteur <XML>fr et contribuez au developpement du
> xml francophone (http://xmlfr.org/infos/redacteurs/) !
>
> Liste de diffusion "[email protected]" (http://xmlfr.org).
>
> Cette liste est a votre disposition pour discuter en francais de
> tout sujet technique lie a XML.
>
> Pour resilier votre abonnement, envoyez un message contenant
> la commande "unsubscribe" a [email protected]
> (mailto:[email protected]?Subject=unsubscribe)
>
>
>
>