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: Pierre Attar (pat@tireme.fr)
Date: 14/11/2003 - 21:19


Il faut donc "enrober" le key pour être sur d'être dans le bon document
quand on charge la clé (les clés ne sont chargées qu'à leur première
utilisation) :

<xsl:for-each select="document('extraDoc.xml')">
         <xsl:apply-templates select="key('Indexes',$Name)"/>
</xsl:for-each>

Pour les explications, voir
http://www.biglist.com/lists/xsl-list/archives/200101/msg00217.html

Après, il restera une erreur dans la déclaration de la clé ou il manquait
le préfix d'espace de nom a:

         <xsl:key name="Indexes" match="c:Indexes" use="../a:Name"/>

Bon courage pur la suite,

Pierre

At 18:03 14/11/2003, you wrote:

> > Oui mais voilà, on a pas les fichiers car pas d'attachement pour éviter les
> > virus.
> >
> > En fait, c'est mieux car ca oblige à être un peu synthétique dans la
> > question ;-)
> >
>
>Oups ... desole.
>
> Comme j'avais deja degraisse au maximum les trois fichiers
> en question tout en rajoutant des commentaires un peu partout,
> je me permet de les recopier tel que a la fin de mon mail au cas ou ;)
>
> Au passage, j'ai eu l'occasion depuis tout a l'heure de tester deux
> autres processeurs.
>
> Xalan4J V2 et Xalan4C++ 1.6.
>
> Ca n'a pas resolut mon probleme, voir pire, ca l'a complique.
>
> Maintenant je me retrouve avec 3 sortie differentes :))
>
>Benoit.
>
>-------- keyProblemInput.xml : --------
><?xml version="1.0"?>
><?xml-stylesheet href="./keyProblem.xsl" type="Text/xsl"?>
><DBModel>
> <Class Name="Country">
> <Attribute Name="Id">
> <Type>OID</Type>
> <Null>False</Null>
> <Key>True</Key>
> <SQLType>binary(12)</SQLType>
> </Attribute>
> <Attribute Name="ShortName">
> <Type>Char(16)</Type>
> <Null>False</Null>
> <Key>False</Key>
> <SQLType>varchar(16)</SQLType>
> </Attribute>
> <Attribute Name="Name">
> <Type>Char(50)</Type>
> <Null>False</Null>
> <Key>False</Key>
> <SQLType>varchar(50)</SQLType>
> </Attribute>
> <Attribute Name="CurrencyId">
> <Type>OID</Type>
> <Null>True</Null>
> <Key>False</Key>
> <SQLType>binary(12)</SQLType>
> </Attribute>
> </Class>
></DBModel>
>
>
>-------- keyProblem.xsl : --------
><?xml version="1.0" encoding="UTF-8"?>
><!--
> Cette stylesheet copie le document sur lequel elle travail tout en
> y ajoutant des parites du fichier "extraDoc.xml". Celui-ci est charge
> grace a la fonction XSL "document"
> Le probleme : Seul un des deux indexes suivants semble fonctionner
> Question : Pourquoi ?
>-->
>
>
><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
> media-type="xml"/>
>
> <!-- Cette clef sert a indexer des noeuds en provenance du fichier
> extraDoc.xml.
> Ceux ayant un espace de nomage "object", un attribut "Id" et un
> fils "Name".
> Ces noeud sont index par rapport a leur attribut Id -->
> <xsl:key name="Objects" match="o:*[@Id][a:Name]" use="@Id" />
>
> <!-- Cette clef sert a indexer des noeuds en provenance du fichier
> extraDoc.xml.
> Ce sont les noeuds c:Indexes et ils sont indexe par rapport a la
> valeur du
> noeud "Name" de leur noeud parent -->
> <xsl:key name="Indexes" match="c:Indexes" use="../Name" />
>\
> <!-- Cette variable contiend l'arbre representant le fichier XML
> "extraDoc.xml" -->
> <xsl:variable name="ExtraDoc" select="document( 'extraDoc.xml' )" />
>
> <!-- Le premier template est le template identite.
> C'est lui qui fait la majeur partie du travail de recopie -->
> <xsl:template match="/ | @* | * | comment() | processing-instruction()
> | text()">
> <xsl:copy>
> <xsl:apply-templates select="@* | * | comment() |
> processing-instruction() | text()" />
> </xsl:copy>
> </xsl:template>
>
> <!-- Ce template reagie lorsqu'un noeud "Class" est lu dans le document
> principale.
> Afin qu'il prime sur le template identite, sa priorite a ete
> augmente -->
> <xsl:template match="Class" priority="1">
> <!-- 1) on stock dans un la variable Name le nom de la class -->
> <xsl:variable name="Name" select="@Name" />
> <!-- 2) on recopie le noeud courant -->
> <xsl:copy>
> <!-- 3) afin de poursuivre la copie on appel a nouveau le template
> identite -->
> <xsl:apply-templates select="@* | * | comment() |
> processing-instruction() | text()" />
> <xsl:element name="SelectVariable">
> <!-- 4) on appel le template identite sur une partie du
> document "extraDoc.xml" -->
> <xsl:apply-templates
> select="$ExtraDoc//o:Table[a:Name=$Name]/c:Indexes" />
> </xsl:element>
> <xsl:element name="SelectKey">
> <!-- 5) on fait la meme chose que precedement mais via la clef
> "Indexes" -->
> <xsl:apply-templates select="key('Indexes',$Name)" />
> </xsl:element>
> </xsl:copy>
> </xsl:template>
>
> <!-- Ce template reagit sur les noeuds definits dans le namespace
> "object" qui ont
> un atribut Ref. Ce type de noeud n'existe que dans le fichier
> "extraDoc.xml" -->
> <xsl:template match="o:*[@Ref]" priority="2">
> <!-- 1) on recopie le noeud -->
> <xsl:copy>
> <!-- 2) on complete la copie en appelant a nouveau le template
> identite -->
> <xsl:apply-templates select="@* | * | comment() |
> processing-instruction() | text()" />
> <!-- 3) on y ajoute un attribut "Name" ayant le nom de l'objet
> reference par @Ref -->
> <xsl:attribute name="Name">
> <xsl:value-of select="key('Objects',@Ref)/a:Name" />
> </xsl:attribute>
> </xsl:copy>
> </xsl:template>
></xsl:stylesheet>
>
>
>-------- extraDoc.xml : --------
><?xml version="1.0" encoding="UTF-8"?>
><!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by Lefevre
>(Reuters) -->
><Model xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
> <o:Model Id="o2">
> <c:Tables>
> <o:Table Id="o1616">
> <a:Name>Country</a:Name>
> <c:Columns>
> <o:Column Id="o2473">
> <a:Name>Id</a:Name>
> <a:DataType>binary(12)</a:DataType>
> <a:Length>12</a:Length>
> <a:Mandatory>1</a:Mandatory>
> </o:Column>
> <o:Column Id="o2475">
> <a:Name>Name</a:Name>
> <a:DataType>varchar(40)</a:DataType>
> <a:Length>40</a:Length>
> <a:Mandatory>1</a:Mandatory>
> </o:Column>
> </c:Columns>
> <c:Indexes>
> <o:Index Id="o2485">
> <a:Name>CountryIdx1</a:Name>
> <a:Unique>1</a:Unique>
> <c:IndexColumns>
> <o:IndexColumn Id="o2486">
> <c:Column>
> <o:Column Ref="o2473"/>
> </c:Column>
> </o:IndexColumn>
> </c:IndexColumns>
> </o:Index>
> </c:Indexes>
> </o:Table>
> </c:Tables>
> </o:Model>
></Model>
>
>
>-------------------
>
>
>
>
>
>
>--------------------------------------------------------------- -
> Visit our Internet site at http://www.reuters.com
>
>Get closer to the financial markets with Reuters Messaging - for more
>information and to register, visit http://www.reuters.com/messaging
>
>Any views expressed in this message are those of the individual
>sender, except where the sender specifically states them to be
>the views of Reuters Ltd.
>
>--
>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)

--
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