🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.text.xml
Article #9261

Petite question XSLT (le casse-tete du soir)

#9261
From: jean-christophe cota
Date: Mon, 07 May 2001 16:30
87 lines
3763 bytes
Bonjour,

Imaginons que je veuille decrire la configuration d'un systeme objet
distribue.

Chaque objet a un nom d''implementation'. Ceci decrit la version du code
qu'il execute. Un objet est instancie dans un 'server'. Un 'server' est
l'execution
d'une 'application' (binaire) et tourne sur une 'machine'. On dira qu'une
'application'
doit supporter un ensemble precis d''implementations', pour pouvoir contenir
les
objets specifies.

Voici la DTD:

<!ELEMENT implementation (#PCDATA)>

<!ELEMENT object (implementation)>
<!ATTLIST object
  name            CDATA #REQUIRED
  server    CDATA #REQUIRED>

<!ELEMENT server EMPTY>
<!ATTLIST server
  name            CDATA #REQUIRED
  application           CDATA #REQUIRED
  machine            CDATA #REQUIRED>

Biensur, l'attribut 'server' de l'element 'object' correspond a l'attribut
'name' de
l'element 'server'. Par exemple, si l'on veut afficher la machine sur
laquelle tourne
le serveur qui heberge un objet, et ceci pour chaque object de notre config.
on
pourra ecrire par exemple:

<xsl:template match="//objet">
  <xsl:value-of select="@name"/> tourne sur <xsl:text/>
  <xsl:value-of select="//server[@name=current()/@server]/@machine"/>
  <xsl:text>&0xA;<xsl:text/>
</xsl:template>

Bon, ma question est:
Comment etablir la liste des implementations qu'une application doit
supporter pour
pouvoir heberger, sur une machine donnee, la liste des objets specifies
comme etant
instancies sur un serveur tournat sur cette machine ? Par liste j'entends
soit un node-set
d'elements 'implementation'. Biensur, pas de repetition: ce node-set ne
devra contenir
que des elements dont le contenu (le nom d'implementation lui-meme) sera
unique.

J'ai essaye:
<xsl:variable name="server_list"
select="//server[@name='my_host'][@application='my_appli']"/>
<xsl:variable name="impl_list"
select="//object[@server=$server_list/@name][not(preceding-sibling::implemen
tation=implementation)]/implementation"/>

Ca ne marche pas, car l'axe 'preceding-sibling' du deuxieme predicat de la
variable "impl_list"
s'applique sur l'ensemble des element 'object' freres precedents et, parmi
ceux-ci, certains
n'ayant pas passe le filtre du premier predicat.
Ce qu'il faudrait, c'est que le deuxieme predicat s'applique sur le resultat
du premier...(en
remplacant 'preceding-sibling::implementation' par le resultat de
'//object[@server=$server_list/@name]/implementation'

Au lieu d'un node-set, on pourrait se contenter d'une chaine de caracteres
ou chaque
nom d'implementation serait separe d'un espace. Ceci devrait etre faisable,
via un
template recursif. Mais pour obtenir un node-set, c'est autre chose.

Que faire (en utlisant XSLT, car de facon programmee c'est evident) ?

Merci,

JC.

PS: casse-tete est la pour attirer le chaland... car j'espere bien que ceci
se resoud de facon
    triviale ;)
Technical Details
Message-ID: <9d6imm$ps0$1@polaris.eurocontrol.fr>
Path: arc1-ca.pugleaf.net!newsfeed.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed00.sul.t-online.de!t-online.de!grolier!freenix!eurocontrol.fr!polaris.eurocontrol.fr!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: FRENCH,ASCII-7-bit
X-Google-Thread: 114f60,b28a8eccea9d31cf,start
X-Google-Attributes: gid114f60,public
X-Google-ArrivalTime: 2001-05-07 09:33:19 PST
Path: arc1-ca.pugleaf.net!newsfeed.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed00.sul.t-online.de!t-online.de!grolier!freenix!eurocontrol.fr!polaris.eurocontrol.fr!not-for-mail
From: "jean-christophe cota" <cot@eurocontrol.fr>
Newsgroups: fr.comp.text.xml
Subject: Petite question XSLT (le casse-tete du soir)
Date: Mon, 7 May 2001 18:30:38 +0200
Organization: Eurocontrol Experimental Centre, Bretigny-Sur-Orge, France
Lines: 90
Message-ID: <9d6imm$ps0$1@polaris.eurocontrol.fr>
NNTP-Posting-Host: cot.eurocontrol.fr
X-Newsreader: Microsoft Outlook Express 5.00.2919.6600
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600