Bonjour,
On Fri, 2004-10-15 at 12:00, Yann Nicolas wrote:
> Bonjour,
> je me demande comment passer par XSLT d'une structure hiérarchique :
>
> <couple>
> <maman/>
> <papa/>
> </couple>
> <couple>
> <maman/>
> <papa/>
> </couple>
>
> à une structure plus plate qui reconstituent les couples grâce à des
> attributs de type ID/IDREF (on aurait pu aussi prendre des éléments de
> type ID/IDREF) :
>
> <maman idref="pap1"/>
> <maman idref="pap2"/>
> <papa id="pap1"/>
> <papa id="pap2"/>
>
> ?
>
> D'ailleurs, cette dernière structure équivaut (pour mes besoins de
> couplage) à :
>
> <maman id="mam1"/>
> <maman id="mam2"/>
> <papa idref="mam1"/>
> <papa idref="mam2"/>
>
> (ce qui à mon sens suggère que la solution avec les ID/IDREF est peu
> adaptée à mon besoin. La solution ID/IDREF "dit" quelque chose de plus
> précis que la bonne vieille hiérarchie).
>
> Il faut non seulement générer des id (avec generate-id() je suppose)
Pas nécessairement : generate-id() va vous donner des IDs qui seront
générés plus ou moins aléatoirement, différents d'un outil à l'autre,
pourront varier d'une exécution à l'autre et seront illisibles.
Vous pouvez préférer générer vos ids "à la main", par exemple en
fonction de la position de l'élément, ainsi :
<maman id="mam{count(preceding::maman)+1}"/>
Vous donnera un id constitué du préfixe "mam" et de l'indice de
l'élément "mam" dans le document.
> et les attributs qui y renvoient, mais aussi il faut que les données
> générées soient typées au sens de XSD (types xs:ID et xs:IDREF). Là,
> il faut se mettre à XSLT 2.0... ??
Non, pourquoi? Vous pouvez générer vos id/idrefs en XSLT 1.0. Leur
intégrité ne sera pas testée, mais ce n'est pas un problème si vous
faites attention à ce que vous faites et de toute manière vous pouvez
ensuite valider le document généré.
>
> ********
>
> Enfin, mon affaire est encore plus compliquée voire immorale puisqu'en
> principe, d'après mes données, une même maman ou un même papa peut
> appartenir à plus d'un couple.
>
> <couple>
> <maman>Vénus</maman>
> <papa>Vulcain</papa>
> </couple>
> <couple>
> <maman>Nerio</maman>
> <papa>Mars</papa>
> </couple>
> <couple>
> <maman>Vénus</maman>
> <papa>Mars</papa>
> </couple>
>
> Apparemment, je dois donc utiliser des types IDREFS (au pluriel) :
>
> <maman idrefs="pap1 pap2">Vénus</maman>
> <maman idrefs="pap1">Nerio</maman>
> <papa id="pap1">Vulcain</papa>
> <papa id="pap2">Mars</papa>
>
> ou l'équivalent :
>
> <maman id="mam1">Vénus</maman>
> <maman id="mam2">Nerio</maman>
> <papa idrefs="mam1">Vulcain</papa>
> <papa idrefs="mam1 mam2">Mars</papa>
>
> ********
>
> Dernier souci : je ne vois pas comment faire en XSD pour empêcher les
> mères célibataires, c'est-à-dire obliger tout élément avec un ID à
> être référencé par au moins un IDREF(S). Un IDREF a besoin d'un ID,
> mais pas l'inverse. J'imagine une solution (très dissuasive) : chaque
> élément peut avoir un ID et un IDREF. Avec cela, papa renvoie à maman
> et maman renvoie à papa. Beaucoup beaucoup de redondance.
Avez-vous envisagé d'utiliser RDF au lieu de vos id/idrefs?
Cela me semble tout ce qu'il y a de plus adapté et vous pourriez ensuite
faire ce type de contrôles (et bien d'autres) avec le reste de la pile
des outils du web sémantique (RDF Schema et OWL)...
J'ai fait un article qui pourra peut-être vous aider sur le sujet :
http://xmlfr.org/documentations/tutoriels/011126-0001
Cordialement,
Eric van der Vlist
--
If you have a XML document, you have its schema.
http://examplotron.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 Fri Oct 15 13:46:25 2004