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!

Re: Re: Re: Re: QUESTION 3 - deux questions qui restent -- Jaboulay 4 mars 2011 à 14:04 (CET)

J'ai eu le même problème, car j'ai fabriqué un menu déroulant qui offre le choix entre trois rapports. Mais bon, l'idéal, c'est de faire du server-side scripting, surtout que en ce qui me concerne, je suis contre l'utilisation des fichier xml comme source de donnée originelle. Les données réutilisables devraient toujours être stockées dans une base de donnée relationnelle et les xml être générés dynamiquement. Le seul cas où je suis pour stocker le xml dans des fichiers, c'est lorsqu'il y a un contexte d'utilisation en offline.

Par ailleurs, j'ai découvert un problème avec un tag incompatible dans le xslt: la génération de la page ne donne rien (plantage?) si le tag « selected » est inclu dans une des options de la liste déroulante de type "select". J'ai donc retiré ce tag de la première option et tout fonctionne.

=Re: Re: Re: Re: Re: QUESTION 3 - deux questions qui restent -- Daniel K. Schneider 4 mars 2011 à 14:42 (CET)=

En ce qui concerne XML comme source je ne suis pas du tout d'accord. Une base de données et figée et cela marche surtout pour tout ce qui est données inintéressantes ... genre liste de CDs, blogs, fiches de produits, fiches de paye etc. Faire une base de données relationnelle pour un XML même très banal est assez complexe (une table pour chaque élément). En fait, il y a très peu d'applications BD qui ont des contenus autres que des simples listes reliées. Word, e-pub, SVG, e-learning ... tout cela reste en XML ! On peut aussi constater qu'il n'y a presque pas de bases de données "riches" sur le web, car la plupart des contenus riches sont non-structurées. La solution pour stocker du XML complexe est une base de données XML. Elles existent, mais sont peu utilisés. A mon avis en grande partie parce que toute nouveauté en informatique met au moins ans à se mettre en place. Ensuite, faut ajouter 10 ans pour que les informaticiens acceptent et apprennent. SQL c'est 1970 et c'est pour cela que les gens l'aiment ;=) Cf. en:XML database, en:XQuery tutorial - basics, etc.

Puis, faudrait me montrer l'exemple avec le select ... à mon avis vous avez du faire une erreur genre oublié de coder la sortie en format compatible XML (ou alternativement ne pas avoir utilisé un xsl:text si vous faites du HTML à l'ancienne).

<option value="xxx" selected="selected">YYYY</option>

ou alors: <option value="xxx" <xsl:text>selected</xsl:text>YYYY</option>

Un fichier XSLT doit être XML, c-a-d. bien formé (chaque attibut doit avoir une valeur) !

Y a pas des bugs aussi simples dans les processeurs XSLT, c'est une technologie vielle de 15 ans ou presque :)

Contribution wiki -- Nancy 12 mars 2011 à 18:10 (CET)

J'ai une question par rapport à la contribution Wiki pour l'exercice 10. Est-ce qu'il faut faire son propre homepage avec comme contenu ses propres contributions Wiki ou faudrait-il faire comme avant, c'est-à-dire compléter des pages wiki existantes qui sont proposées dans les consignes ?

Re: Contribution wiki -- Daniel K. Schneider 12 mars 2011 à 20:12 (CET)

Il faut compléter (ou créer) des pages qui sont en rapport avec la thématique de l'exercice, donc si vous pouvez compléter les propositions c'est bien, mais ce n'est pas une obligation. La logique est la même que pour STIC-I, écrire vous (a) permet d'apprendre qc. et/ou (b) de partager qc. que vous avez appris et/ou (c) de corriger mes tutoriels.

Ensuite il ne faut pas oublier de mentionner ce que vous avez fait dans votre rapport et dans la page travaux.

Finalement, il faudrait aussi essayer d'apprendre un peu la syntaxe wiki. Par exemple, une page discussion est une page wiki tout à fait normale et on peut donc l'éditer (par exemple corriger un intitulé qui ne fait pas de sens ....)

Re: Re: Contribution wiki -- Nancy 13 mars 2011 à 10:30 (CET)

Merci beaucoup pour votre réponse. J'ai un problème à associer mes fichiers livre.css et livre.xsl à mon fichier livre.xml. J'ai mis les liens des différents fichiers sur ma page http://tecfaetu.unige.ch/etu-maltt/qwerty/schuwen0/stic2/ex10/ rubrique Résultats. Merci d'avance pour votre aide.

Re: Re: Re: Contribution wiki -- Daniel K. Schneider 13 mars 2011 à 13:29 (CET)

SVP commencez un nouveau sujet lorsque vous posez une autre question (c.f. message précédant). Il faut s'habituer à utiliser wikis et forums comme il faut.

En ce qui concerne votre question:

(1) Je vous conseille d'abord de produire un XML correct. Pas nécessaire pour que la feuille de style marche, mais pour obtenir une note correcte pour l'exercice. Votre XML ne valide absolument pas, c.a.d la DTD ne correspond pas au fichier XML.

En particulier:

  • Se décider si vous voulez travailler avec des éléments ou des attributs (Votre DTD contient des attributs, alors que votre XML ne contient que des éléments....)

Exemples:

<!ELEMENT auteur EMPTY>
 n'est pas du tout empty selon votre XML ! Faudrait qc. comme
<!ELEMENT auteur (nom, prenom) >
  • Utilisez un bon éditer XML et validez (!) .... ne jamais taper les balises à la main !

(2) Faites du XSLT simple: une règle pour chaque balise comme je vous l'ai montré, n'utilisez pas de boucles. Autrement dit, évitez de lire des livres fait par de gens qui ne comprennent pas bien la logique de XSLT.

Votre XSLT contient une erreur et s'est pour cela que la transformation ne joue pas. Mais cela ne sert à rien de chercher à la réparer, car comme je l'ai dit: Il faut faire simple et repenser le tout. Par ailleurs, un bon éditeur XSLT comme Exchanger valide le XSLT et affiche les erreurs ....

(3) Regardez un example et essayez de comprendre comment il marche. Je conseille:

http://tecfa.unige.ch/guides/xml/examples/dtd-examples/cuisine.xml
http://tecfa.unige.ch/guides/xml/examples/dtd-examples/cuisine.xsl
Re: Re: Re: Re: Contribution wiki -- Nancy 13 mars 2011 à 17:30 (CET)

J'ai modifié mes fichiers livre.xml, livre.dtd, livre.xsl, livre.xslt mais je n'arrive pas toujours à faire afficher les auteurs malgré que j'ai modifié le DTD comme vous avez mentionné ci-dessus ni à énumérer le Titre, Section, Chapitre, Paragraphe l'un en dessous de l'autre.

Re: Re: Re: Re: Contribution wiki -- Daniel K. Schneider 13 mars 2011 à 20:20 (CET)

Je vous conseille 2 choses:

  1. N'utilisez que des éléments (pas des attributs) dans votre DTD. Par ailleurs votre XML ne valide toujours pas.
  2. Utilisez des templates simples dans votre XSLT, donc comme j'ai écrit dans mon message précédant: une simple règle pour chaque balise XML. Je ne vais pas vous aider à faire des boucles car c'est inutilement compliqué et en plus trop difficile pour une débutante....

J'ajoute un 3ème conseil (enfin c'est plus compliqué):

  • Installez l'éditeur XML que j'ai conseillé (Exchanger), ensuite utilisez le debugger pour voir comment votre code XSLT est exécuté. (c.f. en:Exchanger XML Editor
  • Au moins, vous devez examiner le résultat produit par XSLT (donc pas le debugger). Vous verrez que votre code XSLT ne produit pas du HTML. Pour finir: Pourquoi simplement regarder l'exemple indiqué ci-dessus ?
=Re: Re: Re: Re: Re: Contribution wiki -- Nancy 18 mars 2011 à 00:26 (CET)=

J'ai modifié mon DTD en ne mettant que des éléments. J'ai également modifié mon XML en n'utilisant pas d'attributs mais quand je fais un lien "lien vers mon fichier xml" dans ma page d'accueil Welcome, je n'arrive plus à afficher ma page XML si bien que j'ai dû taper le code XML dans mon rapport. J'ai utilisé le debugger pour voir comment mon code XSLT est exécuté mais je n'ai aucune information dans Exchanger XSLT debugger. J'avoue que je suis un peu perdue...