Le mercredi 22 décembre 2004 à 19:32 +0100, Benoit Lefevre a écrit :
> Salut.
>
> Je ne penses pas que tu puisses resoudre ton probleme
> en une seule formule XPath. A confiermer ...
C'est d'autant plus difficile que l'égalité de noeuds est une notion
plus floue qu'il n'y parait.
Egalité de noeuds peut se comprendre dans le sens de "ces noeuds sont le
mêmes dans le document" mais aussi (comme c'est le cas ici) comme "ces
noeuds ont le même contenu".
Cette deuxième "identité" est elle-même dépendante de l'application
puisque suivant les applications on va pouvoir considérer que les
variations suivantes sont "identiques" ou non :
<foo xmlns="http://exemple.com/ns1/" bar="1" baz="2004-12-23T09:56:25Z">
<foo1>texte</foo1>
<foo2>autre texte</foo2>
</foo>
<foo xmlns="http://exemple.com/ns1/" baz="2004-12-23T09:56:25Z" bar="1">
<foo1>texte</foo1>
<foo2>autre texte</foo2>
</foo>
<x:foo xmlns:x="http://exemple.com/ns1/" bar="1"
baz="2004-12-23T09:56:25Z">
<x:foo1>texte</x:foo1>
<x:foo2>autre texte</x:foo2>
</x:foo>
<foo xmlns="http://exemple.com/ns1/" bar="1" baz="2004-12-23T09:56:25Z">
<foo1 xmlns="http://exemple.com/ns1/">texte</foo1>
<foo2 xmlns="http://exemple.com/ns1/">autre texte</foo2>
</foo>
<foo xmlns="http://exemple.com/ns1/" bar="1" baz="2004-12-23T09:56:25Z">
<x:foo1 xmlns:x="http://exemple.com/ns1/">texte<x:/foo1>
<y:foo2 xmlns:y="http://exemple.com/ns1/">autre texte</y:foo2>
</foo>
<foo xmlns="http://exemple.com/ns1/" xmlns:ns2="http://exemple.com/ns2/"
baz="2004-12-23T09:56:25Z" bar="1">
<foo1>texte</foo1>
<foo2>autre texte</foo2>
</foo>
<foo xmlns="http://exemple.com/ns1/" bar="1"
baz="2004-12-23T09:56:25Z"><foo1>texte</foo1><foo2>autre
texte</foo2></foo>
<foo xmlns="http://exemple.com/ns1/" bar="1" baz="2004-12-23T09:56:25Z">
<foo1>
texte
</foo1>
<foo2>
autre texte
</foo2>
</foo>
<foo xmlns="http://exemple.com/ns1/" bar="1" baz="2004-12-23T09:56:25Z">
<foo2>autre texte</foo2>
<foo1>texte</foo1>
</foo>
<foo xmlns="http://exemple.com/ns1/" bar="1" baz="2004-12-23T09:56:25Z">
<!-- commentaire -->
<foo1>texte</foo1>
<foo2>autre texte</foo2>
</foo>
<foo xmlns="http://exemple.com/ns1/" bar="1" baz="2004-12-23T09:56:25Z">
<?ma-pi valeur="x"?>
<foo1>texte</foo1>
<foo2>autre texte</foo2>
</foo>
<foo xmlns="http://exemple.com/ns1/" bar="1" baz="2004-12-23T09:56:25Z">
<foo1><![CDATA[texte]]></foo1>
<foo2>autre texte</foo2>
</foo>
<foo xmlns="http://exemple.com/ns1/" bar="1" baz="2004-12-23T09:56:25Z">
<foo1>&texte;</foo1>
<foo2>autre texte</foo2>
</foo>
<foo xmlns="http://exemple.com/ns1/" bar="1" baz="2004-12-23T09:56:25Z">
&foo1;
<foo2>autre texte</foo2>
</foo>
<foo xmlns="http://exemple.com/ns1/" bar="01.0"
baz="2004-12-23T09:56:25T+00:00">
<foo1>texte</foo1>
<foo2>autre texte</foo2>
</foo>
<foo xmlns="http://exemple.com/ns1/" bar="0001"
baz="2004-12-23T11:56:25T+02:00">
<foo1>texte</foo1>
<foo2>autre texte</foo2>
</foo>
etc...
Certaines de ces variations ne sont pas détectables en XPath. D'autres
sont détectables mais généralement ignorée. D'autres enfin s'appuient
sur les types W3C XML Schema.
Dans chacun des cas, certaines applications ont de bonnes raisons
d'ignorer ces différences et d'autres ont d'aussi bonnes raisons de ne
pas le faire :-) ...
En ce qui concerne les variations détectables en XSLT, on peut écrire
des templates permettant d'effectuer ces comparaisons en ignorant ou non
certaines d'entre elles. C'est assez pénible à écrire, mais malgré tout
possible. Vous trouverez un exemple dans la transformation qui
implémente XSLTUnit : http://xsltunit.org/xsltunit.xsl (utiliser "save
as" ou "view source" pour accéder au source).
Cordialement,
Eric van der Vlist
--
Have you ever thought about unit testing XSLT templates?
http://xsltunit.org
------------------------------------------------------------------------
Eric van der Vlist http://xmlfr.org http://dyomedea.com
(ISO) RELAX NG ISBN:0-596-00421-4 http://oreilly.com/catalog/relax
(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)
Received on Thu Dec 23 10:11:46 2004