STIC Discussion:STIC II - exercice 10/Archive Qwerty

De EduTech Wiki
Aller à la navigation Aller à la recherche

Voir aussi: STIC Discussion:STIC I - exercice 2 (Nestor-Pixel)

QUESTION 1 - saut de ligne dans fichier xml

Bonjour. J'ai quelques problèmes avec mon CV que je voulais juste finir avant de commencer l'exercice. D'abord la première question: Est-ce que je peux donner mon CV comme exercice, parce qu'il contient une grande partie des contraintes exigées. Je vais de toute façon refaire quelque chose de plus "Tecfa", mais je n'aurais peut-être pas le temps d'aller aussi loin. Ensuite, et cela pourrait être très agréable pour la rédaction des rapports, mais pour bien d'autres choses, j'avais cru comprendre qu'il existait un moyen pour que les retours à la lignes du contenu xml soient pris en compte dans la mise en page html: l'attribut preserve-space (<xsl:preserve-space elements="list-of-element-names"/>). J'ai essayé de mettre en haut du document, après la ligne <xsl:stylsheet...

<xsl:preserve-space elements="root"/>

ou des éléments plus spécifiques

<xsl:preserve-space elements="objectifs difficultes"/>,

mais ça ne marche pas. Il est pourtant dit que preserve-space est l'attribut par défaut, mais en aucun cas les espaces sont préservés dans mes rapports travaux. Comment faut-il faire pour mettre cela en place?

Re: QUESTION 1 - saut de ligne dans fichier xml -- Daniel K. Schneider 25 février 2011 à 16:08 (CET)

Non, preserve space fait just que cela dit et cela n'a aucun impact sur la mise en page.

Il est possible de faire ce que voulez, mais je déconseille. Il est plus rationnel et plus rapide de "paragrapher" votre text et cela ne demande qu'une modification mineure: (a) a mettre des balises "para" autour de chaque paragraphe et (b) changer la DTD.

Sinon, va falloir apprendre nettement plus de XSLT et aussi savoir gérer 2 sortes de retours de ligne. Suivant la machine que vous utilisez, une nouvelle ligne est soit un ctrl-J (LF) ou un LF plus un CR (ctrl-M). Vous pouvez googler des solutions, par exemple

Re: Re: QUESTION 1 - saut de ligne dans fichier xml -- Daniel K. Schneider 25 février 2011 à 16:19 (CET)

Oui vous pouvez soumettre votre CV ... c'est un peu limite (donc sur ce point cela comptera un peu moins, mais c'est une facteur sur 10 seulement ...)

Re: Re: Re: QUESTION 1 - saut de ligne dans fichier xml -- Lucie.Marchon 25 février 2011 à 21:59 (CET)
Y a des tas d'attributs possibles! Ça me dit bien d'en apprendre un peu plus.. : )
Re: Re: Re: Re: QUESTION 1 - saut de ligne dans fichier xml -- Daniel K. Schneider 25 février 2011 à 23:13 (CET)

Je vous ai montré à peu près 5-10% de XSLT :)

Ceci dit, j'insiste, vous devez modifier le XML du CV pour y mettre des balises de paragraphe ou à limite des breaks. Utiliser les fonctions string de XSLT/XPATH ne fait que du sens si vous avez quelques milliers de lignes de "legacy" text à transformer. Dans HTML insérer des lignes blanches n'a pas non plus aucun effect ....

QUESTION 2 - plusieurs formes pour le contenu xml -- Lucie.Marchon 27 février 2011 à 16:22 (CET)

J'aimerais bien faire deux choses, et cela me semble un peu plus difficile que j'imaginais... 1) Simplement avoir deux feuilles de styles pour un même doc .xml (pour avoir une organisation différente des contenus). Par où il faut aller pour arriver à faire cela? 2)Dans un même document, réutiliser les contenus (pour un résumé, par exemple, ou un menu) avec des templates différents. Est-ce possible et comment il faut réfléchir pour faire ça?

Merci d'avance!

Re: QUESTION 2 - plusieurs formes pour le contenu xml -- Lucie.Marchon 27 février 2011 à 21:16 (CET)

Je commence à m'en sortir, pour la question 2), il faut mettre mode="" et on peut spécifier un autre type de template. : )

Re: QUESTION 2 - plusieurs formes pour le contenu xml -- Lucie.Marchon 27 février 2011 à 21:16 (CET)

Mais ensuite, je me demande comment on peut intégrer du contenu xml comme ancre. Est-ce que c'est seulement possible, parce que ce que je vois sur les forums m'a l'air compliqué!

Re: Re: QUESTION 2 - plusieurs formes pour le contenu xml -- Lucie.Marchon 27 février 2011 à 22:07 (CET)

C'est bon, j'ai réussi: pour la cible

<a href="#{nom-xml}"></a>

(avec le texte du lien entre les ><)

pour l'ancre:

<a name="{nom-xml}"/>

QUESTION 3 - deux questions qui restent -- Lucie.Marchon 27 février 2011 à 22:28 (CET)

Bon, comme je persiste souvent au-delà de la demi-heure, je me réponds la plupart du temps à moi-même... Qu'à cela ne tienne, je pose tout de même mes questions, au cas où je ne trouverais aucune réponse malgré mes efforts.

Les questions qui me restent: 1) est-ce qu'on peut appliquer deux fichiers (xslt) à un même contenu xml? cela me paraît difficile, car la référence au fichier xslt est contenue dans le fichier xml, et non le contraire (Évidemment, puisque le navigateur lit d'abord le fichier xml..). Mais alors comment faire, par exemple, pour utiliser le même contenu dans une mise en page tout à fait différente, en tableau, en résumé, etc.

2) Peut-on faire référence à un fichier xml autre que le fichier principal (mon exemple, c'est le cas d'un menu déroulant, où j'aimerais pouvoir dans une seconde page avoir les références de la première pour que le menu en arborescence puisse être actualisé comme il faut.) et comment faire?

Merci : )

Re: QUESTION 3 - deux questions qui restent -- Lucie.Marchon 27 février 2011 à 23:17 (CET)

ce que j'arrive maintenant à faire, c'est à récupérer tout le contenu d'un autre document avec:

<xsl:apply-templates select="document('autre_document.xml')"/>

mais comment sélectionner les noeuds qui m'intéressent?

Re: Re: QUESTION 3 - deux questions qui restent -- Lucie.Marchon 27 février 2011 à 23:26 (CET)

Bon, je m'en sors de mieux en mieux:

<xsl:apply-templates select="document('autre_document.xml')/noeud1/noeud2/nom_rubrique"/>

Je regarde si j'arrive à faire ce que je veux...

... mais non je n'y arrive pas. Je sollicite de l'aide.

Sur ma page travaux, j'ai réussi à faire en sorte que le menu soit lié à au fichier xml, c'est-à-dire que si l'on rajoute un cours, il se rajoute automatiquement sur le menu, et une ancre se met à côté de l'intitulé du cours. C'est déjà pas mal.. : ) Sur la page currriculum, je voudrais qu'il y ait les mêmes liens sur le menu déroulant, mais il y a uniquement les noms des cours qui s'affichent à la suite sans espace, et je ne sais pas comment faire le lien sur une autre page (comment en quelque sorte concaténer une ancre #{document('../welcome.xml')/student/courses/course/title} avec le lien vers l'autre page. voilà le fichier .xsl ainsi que le .css (est-ce qu'on les appelle les deux des feuilles de styles?) Est-ce que vous arrivez à voir rapidement comment je devrais réfléchir pour m'en sortir? Merci!

Re: Re: Re: QUESTION 3 - deux questions qui restent -- Lucie.Marchon 28 février 2011 à 10:10 (CET)

ok, c'est bon: il faut appliquer les mêmes templates que sur la page initiale avec

 
href="http://tecfaetu.unige.ch/etu-maltt/qwerty/marchonl/welcome.xml#{title}"

pour définir l'ancre... (sachant que l'on est déjà dans le fichier externe dans le template)

Merci Lucie ; )

Re: QUESTION 3 - deux questions qui restent -- Lucie.Marchon 27 février 2011 à 23:17 (CET)

Donc, la question qui me reste est la première: 1) est-ce qu'on peut appliquer deux fichiers (xslt) à un même contenu xml? cela me paraît difficile, car la référence au fichier xslt est contenue dans le fichier xml, et non le contraire (Évidemment, puisque le navigateur lit d'abord le fichier xml..). Mais alors comment faire, par exemple, pour utiliser le même contenu dans une mise en page tout à fait différente, en tableau, en résumé, voire en pdf, etc.

Est-ce que quelqu'un peut m'aider à y répondre? Merci!

Re: Re: QUESTION 3 - deux questions qui restent -- Daniel K. Schneider 28 février 2011 à 12:42 (CET)

Difficile à répondre. On peut le faire, mais c'est très difficile car cela implique de la programmation DOM avec JavaScript. Ceci dit, pour se faciliter la tâche on peut utiliser une librairie JS comme JQUERY. Par exemple http://www.kelvinluck.com/2009/07/jquery-styleswitch-now-with-toggle/

Il reste 2 solutions simples:

1) Duplifier le XML et attacher un XSLT différent pour chaque fichier. Évidemment pas pratique, car il faudra toujours éditer les deux fichiers. Ceci dit, il est possible d'inclure un fichier XML dans un autre en utilisant une entité XML. Donc le fichier à inclure contiendra le vrai contenu et les 2 autres fichiers juste la feuille de style.

Cela implique que chaque version a un URL different.

2) Le faire server-side avec PHP. Sans doute la solution la plus simple. MAIS: XSLT n'est pas installé comme module PHP sur les serveurs tecfaetu et tecfa. Vais voir, si on peut faire qc. (mais pas aujourd'hui). Correction, cela marche maintenant sur le serveur TECFA. Pour la machine étudiant(e)s, je vais voir avec Stéphane car c'est lui qui installé cette machine.... http://tecfa.unige.ch/guides/php/examples/xslt/php-xslt-select.phps (et lire le code source)

Cela implique un parametre à passer dans l'URL.

Re: Re: Re: QUESTION 3 - deux questions qui restent -- Lucie.Marchon 28 février 2011 à 23:02 (CET)

Je suis trop impressionnée par le php pour me lancer dans le temps qui me reste. J'ai pris la première solution. Je garde ce fil sous le coude pour plus tard. Merci!