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.
 Commentaires et questions non techniques.Commentaires et questions techniques.

 
Cliquez ici.

From: Eric van der Vlist (vdv@dyomedea.com)
Date: 07/10/2003 - 20:49


On Sat, 2003-10-04 at 21:19, Pierre Attar wrote:
> >BTW, pourquoi déclarer l'espace de noms FO dans une transformation vers
> >html ;-) ???
>
> Voir mon exemple précédent: J'ai un même fonction qui fait des choses
> communes tout en se spécialisant, quand nécessaire, en fonction d'un
> paramètre qui donne le type de sortie attendue : html, web ou docbook.
> On pourrait le voir autrement mais en termes de maintenance c'est plus
> facile car quand il faut changer quelque chose, je le change en même temps
> sur mes trois sorties.

Effectivement.

Pour en revenir au problème de départ, la transformation suivante
supprime les espaces de noms non utilisés :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
 
 <xsl:template match="@*|text()|processing-instruction()|comment()">
  <xsl:copy/>
 </xsl:template>

 <xsl:template match="*">
  <xsl:element name="{name()}" namespace="{namespace-uri()}">
   <xsl:apply-templates select="@*"/>
   <xsl:apply-templates
select="*|text()|processing-instruction()|comment()"/>
  </xsl:element>
 </xsl:template>

</xsl:transform>

On peut la passer en "deuxième passe" d'une transformation en utilisant
éventuellement la fonction exsl:node-set si on veut les enchaîner dans
une seule transformation.

On peut aller plus loin et chercher à reporter les déclarations sur la
racine du document. Cette transformation ne traite pas tous les cas mais
gère les cas les plus courants :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
 
 <xsl:template match="@*|text()|processing-instruction()|comment()">
  <xsl:copy/>
 </xsl:template>

 <xsl:template match="/*">
  <xsl:element name="{name()}" namespace="{namespace-uri()}">
   <xsl:for-each select="//*/namespace::*">
    <xsl:if test="not(preceding::*/namespace::*[name() =
name(current())]) and //*[starts-with(name(), concat(name(current()),
':'))] or //*/@*[starts-with(name(), concat(name(current()), ':'))]">
     <xsl:copy/>
    </xsl:if>
   </xsl:for-each>
   <xsl:apply-templates select="@*"/>
   <xsl:apply-templates
select="*|text()|processing-instruction()|comment()"/>
  </xsl:element>
 </xsl:template>

 <xsl:template match="*">
  <xsl:element name="{name()}" namespace="{namespace-uri()}">
   <xsl:apply-templates select="@*"/>
   <xsl:apply-templates
select="*|text()|processing-instruction()|comment()"/>
  </xsl:element>
 </xsl:template>

</xsl:transform>

Elle fonctionne avec Saxon et Xalan mais fait exploser libxslt
(Segmentation fault). Sans prétendre traiter tous les cas, elle
transforme le document :

<foo xmlns="http://foo" xmlns:foo="http://foo" xmlns:baz="http://bat">
 <?foo bar="baz"?>
 <!-- foo -->
 <bar:bar xmlns:bar="http://bar"/>
 <baz xmlns:baz="http://baz"/>
 <bat xmlns:bat="http://bat" bat:bat="bat"/>
</foo>

en :

<foo xmlns="http://foo" xmlns:bar="http://bar" xmlns:bat="http://bat">
 <?foo bar="baz"?>
 <!-- foo -->
 <bar:bar/>
 <baz/>
 <bat bat:bat="bat"/>
</foo>

Ce qui me semble être un bon début ;-) ...

Attention tout de même, ces transformations ne gèrent pas les noms
qualifiés (QNames) dans les valeurs d'éléments ou d'attributs et on
s'exposerait à des déboires si on les appliquait sur des transformations
XSLT ou des schémas W3C XML Schema!

Eric

-- 
Don't you think all these XML schema languages should work together?
                                                         http://dsdl.org
Upcoming schema tutorial:
 - Philadelphia (7/12/2003)       http://makeashorterlink.com/?V28612FC5
Tutoriel XSLT:
 - Paris (25/11/2003)             http://makeashorterlink.com/?L2C623FC5
------------------------------------------------------------------------
Eric van der Vlist       http://xmlfr.org            http://dyomedea.com
(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
------------------------------------------------------------------------

-- Devenez redacteur <XML>fr et contribuez au developpement du xml francophone (http://xmlfr.org/infos/redacteurs/) !

Liste de diffusion "xml-tech@xmlfr.org" (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 xml-tech-request@xmlfr.org (mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)



Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC

webmaster@xmlfr.org

 

xml tech

Discussions techniques au sujet de XML.

Cette liste est à votre disposition pour discuter en français de tout sujet technique lié à XML.



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@online.fr  

Conception, réalisation et hébergement