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

De EduTech Wiki
Aller à la navigation Aller à la recherche

Instructions

Une question = 1 nouveau chapitre.

== Question .... ==

Ensuite pour la même question, utiliser des sections, sous-sections tec. .... sinon on va se perdre.

Combinaison de DTD

Est-il possible de faire référence à plus d'un DTD ?

  • C'est à dire.. Exemple pour former un fichier XHTML "hacké" :
    • Lancer une référence au DTD XHTML classique de w3c.org
    • Ajouter une référence à une DTD qui "rajoute" des balises...

En fouillant bien, genre en allant voir le contenu de http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd , on voit qu'on pourrait éventuellement le faire en créant une DTD qui va chercher le contenu d'une autre DTD. MAIS, est-ce possible à partir d'un document XML ?

Réponse

Question pas si facile.

Un document XML est toujours validé par rapport à une seule DTD, donc il faut travailler du côté des DTD.

DTDs à partir de plusieurs composantes

On peut construire des DTD qui incluent d'autres DTDs. C'est même la règle quand on fait une grande DTD. Pour cela il faut consulter la section sur les entités dans mes transparents et voir un exemple. Exemple: http://tecfa.unige.ch/guides/xml/examples/dtd-examples/ePBL11/

Ceci déclare une DTD externe

<!ENTITY % foreign-dtd SYSTEM "ibtwsh6_ePBL.dtd">

Ceci inclut le fichier

%foreign-dtd;

Ceci utilise une composante de cette DTD

<!ELEMENT introduction %struct.model;>

XHTML modulaire et extensible

Solution 1:

  • Travailler avec un mini XHTML de vôtre choix (comme ci-dessus)

Solution 2:

  • Travailler avec XHTML modulaire et inclure les modules qui vous intéressent. Je n'ai pas encore essayé et ne sais pas vraiment si c'est difficle ou facile
http://www.w3.org/TR/xhtml-modularization/

XHTML 1.1 est définit justement avec ces modules:

http://www.w3.org/TR/xhtml11/xhtml11_dtd.html

Travailler avec des namespaces

En pratique quand les gens mélangent des langages ils utilisent parfois des namespaces différents. Cela produit des documents bien formés, mais pas valides.

Sauf si qqn. écrit une DTD pour cela. W3C l'a fait pour qqs. "profiles", genere le XHTML + MathML + SVG Profile:

http://www.w3.org/TR/2002/WD-XHTMLplusMathMLplusSVG-20020430/

Résumé

  • N'essayez pas d'étendre XHTML, à mon avis c'est trop difficile
  • Faites plutôt votre DTD, mais "piquez" des modules XHTML ou encore un mini XHTML comme Itsy Bitsy Teeny Weeny Simple Hypertext DTD (ibtwsh6).
  • Intégrer un sous-ensemble de balises XHTML dans vos balises est plus simple que l'inverse.

Si vous utilisez IBTWSH6, je vous conseille vivement d'utiliser %struct.model;

Pour comprendre comment fonctionne IBTWSH6 inclu dans une DTD faite maison, il faut essayer:


Merci de votre réponse très complète, je vais essayer de trouver un peu de temps entre les travaux de groupe pour explorer tout ça (notamment la partie qui genere le XHTML + MathML + SVG Profile: je cherchais justement quelque chose du genre) !! ^_^ --Davidc 4 octobre 2007 à 13:31 (MEST)

Nouvelle question : Faire une méta-DTD :P

Je voudrais fabriquer une DTD qui crée un nombre x de balises. Je voudrais qu'à l'intérieur de certaines (voire toutes) il soit possibles d'inclure les balises XHTML, comment je fais ça ? Exemple : Mon arbre XML :

<cours>
 <description></description>
 <contenu></contenu>
 <commentaires></commentaires>
<cours>

Je voudrais être apte à mettre n'importe quel contenu XHTML à l'intérieur des balises contenu et commentaires. Histoire que ça ressemble un peu à ça :

<cours>
 <description>Cours oenologie</description>

<contenu><h1>Comment cracher le vin</contenu> <commentaires><div class="comment_david"><ul><li>En effet, il n'est pas ...afin de..</commentaires>

<cours>

Ou même, pour aller plus loin, être apte à déterminer quelles balises peuvent ou ne peuvent pas(c'est peut-être plus simple?) être mises à l'intérieur de x. --Davidc 5 octobre 2007 à 03:30 (MEST)

Y a pas de miracle

Faut définir ces balises exactement de la même façon. XML ne "connait" PAS HTML, donc il faut définir CHAQUE balise HTML que vous voulez utiliser. Evidémment faudrait simplifier le travail et travailler avec des entités paramétriques et/ou profiter d'un travail déjà fait. Donc je répète mon conseil ci-dessus:

REGARDER ensuite comment c'est fait.

  • On charge une DTD qui contient une sorte de XHTML modulaire:
<!ENTITY % foreign-dtd SYSTEM "ibtwsh6_ePBL.dtd">
%foreign-dtd;

La plupart des balises ePLpaper11.dtd ou encore eProject11.dtd sont simplement construits comme cela:

<!ELEMENT description %struct.model;>

%struct.model est définit dans l'autre DTD et contient en gros

(address | blockquote | div | dl | h1 | h2 | h3 | ol | p | pre | table | ul)* 

.... plus évidémment les définitions pour ces balises et leurs enfants

Merci

OK, je vais regarder tout ça!! Comme on dit, faut mettre les mains dans le cambouis de temps en temps.. Mais moi, je veux croire au miracle en info :P --Davidc 5 octobre 2007 à 13:34 (CEST)Répondre[répondre]

hummm.. en fait, je me demande.. Est-ce que, si on reprend mon 2eme exemple (celui avec des balises à l'intérieur). Si ces balises ne sont PAS défini, est-ce que ça crée une erreur de validation ? Ou est-ce qu'elles ne seront pas interpréter comme des balises et rendus comme telle (traités comme du texte)?


Pas valide

Un fichier XML est tjrs validé par rapport à un schéma (DTD, XML Schema, Relax, etc.). Mais la doctrine est unanime: Un schéma définit les éléments ainsi que leur imbrication. Donc forcément ce sera pas valide. HTML n'a AUCUN statut spécial dans le monde XML. XML ne connait pas HTML, c'est juste un schéma par d'autres ....

Maintenant, il existe des situtations où un fichier XML bien formé suffit. Mais moi je demande un XML valide, donc vous avez pas le choix :)

XSLT par exemple ne fait pas de validation. IE valide, Firefox ne sait pas valider. Donc il est possible de travailler avec des documents XML non valides, mais juste bien formés. Mais pas pour cet exercice. Daniel K. Schneider 6 octobre 2007 à 23:42 (CEST)Répondre[répondre]

OK, merci de vos réponses
J'ai trouvé une combine pour valider les balises XHTML dans une DTD (enfin, plutôt les appeler)
<!ENTITY % xhtml PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
%xhtml;
Si ça peut servir à d'autres --Davidc 9 octobre 2007 à 19:34 (CEST)Répondre[répondre]
oui c'est la bonne solution, enfin le mini XHMTL ci-dessus aurait suffit largement je pense, car le danger avec votre tactique est que certains éléments XHTML sont très riches et il va falloir gérer cela côté feuille de style. Donc allez-y car vous avez sans doute la capacité pour gérer le résultat. Mais je déconseille franchement aux autres.... Daniel K. Schneider 9 octobre 2007 à 20:59 (CEST)Répondre[répondre]

Un pas après l'autre

Est-il possible de vous soumettre une DTD avant de passer à l'étape suivante ? Je ne suis pas très sûre de moi et vu le peu de temps que l'on a (et le temps que j'ai passé sur l'exo 1 à buter sur des détails incompréhensibles) je préfèrerais procéder par étapes. Si ma DTD est ok, je passe au fichier XSLT. Il y aussi autre chose que je voudrais demander : comment faites-vous la barre verticale ? (pour l'instant je fais du copier-coller faute de mieux) ? merci pour les réponses. Sylviane 9/10 00:55

déclaration des éléments

Est-il necessaire de répéter "elements intitules" et "elements description" lorsque ceux-ci sont utilisables sous deux rubriques ? Faut-il les nommer differemment pour chaque rubrique sachant qu'ils designent le même type de données ?


<!ELEMENT contenus (pedagogiques, organisationnels)>

<!ELEMENT pedagogiques (intitule, description)> <!ELEMENT intitule (#PCDATA)> <!ELEMENT description (#PCDATA)>

<!ELEMENT organisationnels (intitule, description)> <!ELEMENT intitule (#PCDATA)> <!ELEMENT description (#PCDATA)>

Sylviane 9/10 08:59

Salut Sylviane! A mon avis, si tu utilises les mêmes noms, l'éditeur risque de ne pas savoir de quel "intitule" tu parles quand tu utilises "intitule" (il va se demander: "est-ce celui de la rubrique "pédagogique" ou de la rubrique "organisationnels?", mais ne saura pas répondre). Il ne peut pas les distinguer, donc il va considérer que c'est le même. Pour les distinguer, tu peux nommer p_intitule et o_intitule, par exemple! (et de la même façon pour "description"!) Louiselle

indicateurs d'occurence

J'ai du mal à comprendre s'ils designent une option au sein d'une catégorie ou pour plusieurs catégories. Par exemple : si je rajoute un + après "intitule", est-ce que ça signifie : "un ou plusieurs intitulés possibles pour un même élément" ou "un ou plusieurs intitulés car plusieurs élements possibles"

Sylviane 9/10 09:05

Réponses

(1) oui vous pouvez me montrer un travail partiel (mais il faut le déposer qq. part et faire un lien ici)

(2) un élément ne se définit qu'une fois, forcément sinon c'est plus une grammaire mais une structure de données longue. Donc votre logique est presque bonne, faut juste éliminer les doubles définitions. En plus un élément est défini par son contexte (donc Louiselle a tort ici, il n'y a pas de pb., c.f. par exemple HTML avec tous ses éléments imbricables.).

<!ELEMENT contenus (pedagogiques, organisationnels)>

<!ELEMENT pedagogiques (intitule, description)>
<!ELEMENT organisationnels (intitule, description)>
<!ELEMENT intitule (#PCDATA)>
<!ELEMENT description (#PCDATA)>

(3) Le + indique que l'expression précédante peut être présente plusieurs fois, mais doit l'être au moins une fois. Expression = un élément ou encore un groupe "(A ...... B)". Exemple:

bla+

indique qu'il faut au moins

 
 <bla> ...</bla>

ou encore

 <bla> ... </bla> <bla>....</bla>

- Daniel K. Schneider 9 octobre 2007 à 12:03 (CEST)Répondre[répondre]

Liens

Merci pour ces eclaircissements. Voici le lien vers le .xml et le lien vers le .dtd

Sylviane 9 octobre 2007 à 18:28 (CEST)Répondre[répondre]

Critique

  • D'abord vous n'avez pas écrit votre fichier XML avec la DTD. Cela vous rend la vie plus difficile. Faut vraiment prendre un éditer XML sinon il n'y a pas de lien...

Dans la DTD il faut:

  • Virer la liste et ses sous-elements. Cela ne sert à rien puisque les outils viennent toutes les façons après
  • Ajouter un element nom à l'élément outil
  • Virer tous les doublons (par ex. fiche-signalectique, contenus, interfaces, etc sont défini 2 fois
  • Ensuite il y a un probleme avec l'élément contenus. Je ne sais pas très bien ce que vous voulez en faire. Je pense qu'il faudrait intercaler par exemple un élément cours sinon vous allez avoir plus de difficulté pour la mise en page avec XSLT.

En résumé:

  • Vous n'avez pas tout à fait compris comment les éléments s'imbriquent (répétitions !)
  • Essayez de hierarchiser un max. Ce sera plus facile après
  • Vous êtes sur la bonne voie, la DTD est ambitieuse ;)

Dans le XML il faudrait corriger:

  • La déclaration:
* Corriger le DOCTYPE (c'est pas student!)
 <!DOCTYPE boite-outils SYSTEM "outils.dtd">

Je vous ai corrigé la DTD jusqu'à l'élément cours:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!ELEMENT boite-outils (outil+)>

<!ELEMENT outil (nom, fiche-signaletique, contenus+, interfaces+, commentaires)>
<!ELEMENT nom (#PCDATA)>

<!ELEMENT fiche-signaletique (quoi, qui+, ou, comment)>
<!ELEMENT quoi (#PCDATA)>
<!ELEMENT qui (#PCDATA)>
<!ELEMENT ou (#PCDATA)>
<!ELEMENT comment (#PCDATA)>

<!ELEMENT contenus (cours+, elements-pedagogiques, elements-organisationnels, interface?)>
<!ELEMENT cours (intitule, responsable)>
<!ELEMENT responsable (#PCDATA)>
<!ELEMENT elements-pedagogiques (intitule+, description)>
<!ELEMENT elements-organisationnels (intitule+, description)>
<!ELEMENT interface (intitule+, description)>

<!ELEMENT commentaires (les-plus, les-moins)>
<!ELEMENT les-plus (#PCDATA)>
<!ELEMENT les-moins (#PCDATA)>

<!ATTLIST intitule type (wiki | chat | forum | tableau-blanc | messagerie | discussion | nouvelles | blog | pageflakes ) "wiki">

<!--Elements communs-->
<!ELEMENT intitule (#PCDATA)>
<!ELEMENT description (#PCDATA)>

Je vous laisse avec cela pour le moment .... me recontacter une fois que vous avez une version avec laquelle vous avez édité votre XML. Votre démarche de ne pas utiliser la DTD est un peu couteuse je pense, enfin l'essentiel c'est quand-meme d'avoir avancé pas mal :)

- Daniel K. Schneider 9 octobre 2007 à 21:00 (CEST)Répondre[répondre]

une dernière précision, svp

Ouf ! j'ai compris certaines choses même pas mal de choses dans votre réponse :-) Il y a juste quelque chose d'essentiel qui m'échappe, vous dites :"Faut vraiment prendre un éditer XML sinon il n'y a pas de lien...". "me recontacter une fois que vous avez une version avec laquelle vous avez édité votre XML", ça veut dire une fois que ce sera visible dans un navigateur, autrement dit quand j'aurai fait le traducteur, le XSL ? "éditer" c'est ça ?

Sinon, j'expliquerai dans mon rapport pourquoi j'ai choisi de faire la DTD. Je ferai probablement l'impasse sur la CSS faute de temps.

Sylviane 9 octobre 2007 à 21:39 (CEST)Répondre[répondre]

non, c'était pas très clair. Pour votre dernière version vous avez édité un XML "à la main" et fait une DTD à part. Il y avait pas de rapport entre les deux. Ce que je vous demande est d'éditer votre fichier XML avec un éditeur XML et qui sait lire votre DTD. Donc ne JAMAIS taper une seule balise XML, vous les insérez en cliquant dessus avec l'éditeur (sauf pour corriger). Votre éditer XML - en lisant la DTD - vous indiquera à quel endroit vous pouvez insérer quelles balises et le résultat sera nettement plus valide et en plus vous allez tout-de-suite voir ce qui coince avec votre DTD. Si à un endroit l'éditer ne veut pas insérer une balise et encore vous force à insérer une que vous ne voulez pas, veut dire qu'il faut modifer la DTD. Ce que veux c'est simplement que vous acceptez l'idée qu'une DTD sert aussi à éditer et pas juste à valider :) - Daniel K. Schneider 10 octobre 2007 à 14:13 (CEST)Répondre[répondre]

j'ai compris

ah oui c'est très clair. C'est vrai que je n'avais pas percuté là-dessus, j'ai tout fait à la main tout en me disant "ce truc est mal fait on devrait pouvoir trouver les "elements" quelque part" :-))) (vous savez comment ça marche dans ces cas là, c'est toujours la faute du prof ou du logiciel ;-)

je viens de regarder dans Exchanger, lorsque j'ouvre une nouvelle page xml et après avoir écrit l'en-tête correctement ("boite-outil" et pas "student") ainsi que refermé puis rouvert avec le rajout de l'extension au fichier, il ne me montre quand même pas les élements en bas à droite. Est-ce parce que ma dtd est mal faite ? Sylviane 10 octobre 2007 à 14:50 (CEST)

Difficile à dire sans la voir. Il faudrait déjà la valider (dans Exchanger: Charger la DTD, ensuite Menu Schema->Validate DTD). Ensuite bien regarder les messages dans la fenêtre XML, dans le panel des erreurs. Sinon, les éléments sont affichés à gauche normalement (cliquer sur l'onglet <+>)... pas à droite. - DS

genial

ça marche ! j'avais complètement oublié qu'il fallait valider la DTD ! C'est trop bien quand ça marche :-) J'espère que mes errements serviront à d'autres...

Vous avez mis un "?" à coté de "interfaces" ce qui signifie (j'ai repris votre cours): "eventuellement une interface" or il y aura *toujours* une interface, non ?

Ps : je parlais bien du menu à gauche, j'ai confondu

Sylviane 10 octobre 2007 à 18:18 (CEST)

nouvelle version xml

Voici le lien vers le .xml et le lien vers le .dtd

Les noms de fichiers sont provisoires, c'est juste pour que je m'y retrouve dans les versions (chez moi je classe dans des repertoires-jours)

Il me dit que le xml ets bien formé et valide et pour autant le bouton viewer ne veut pas fonctionner. Bon enfin je peux le regarder dans un navigateur en passant par le code source.

Je viens de comprendre : le viewer est fonctionnel à partir du moment où on a commencé à entrer du texte

Sylviane 10 octobre 2007 à 19:04 (CEST)

L'éditeur oui. C'est vrai qu'il y a un petit problème. Il faut effectivement rentrer manuellement la balise root (j'avais oublié tout à l'heure). Sinon cela a l'air tout bon. Du côté plus conceptuel, il faut maintenant simplement voir si vous arrivez à exprimer ce que voulez "dire" avec votre DTD. Si jamais il y a un problème, il faut réviser la DTD. Aussi faut-il décider quelle information est vraiement obligatoire. Parfois il est plus sympa pour les utilisateurs de mettre qqs. éléments à option, donc avec un "?". C'est à vous de décider. - Daniel K. Schneider 10 octobre 2007 à 19:44 (CEST)Répondre[répondre]

je ne trouve pas la solution

Il me sort toujours que : Ln 31 Col 13 - The content of element type "contenus" must match "(nom+,responsable+,elements-pedagogiques+,elements-organisationnels+)". 1 Errors

dans mon document, il doit y avoir plusieurs lignes "noms", plusieurs lignes "responsables", 1 seule ligne "elements peda" mais avec plusieurs "intitulé", plusieurs "description" idem pour "elements organisationnels". Je comprends que ça doit être une question de déclaration "+", "?" et pas de symbole. mais ça fait 3 jours que j'essaie différentes combinaisons sans succes.

Voici le lien vers le .xml et le lien vers le .dtd

merci pour vos explications

PS : si vous en avez marre de mes questions, je laisse comme ça (si je mets un seul élément à chaque fois, ça sort nickel chrome), je m'occupe de la xsl et on y regardera quand je viendrai. J'aimerais bien y arriver quand même. C'est frustrant.

Sylviane 12 octobre 2007 à 07:56 (CEST)

Réponse

Votre problème est simple, donc c'est vite répondu :)

La ligne suivante:

<!ELEMENT contenus (nom+, responsable+, elements-pedagogiques+, elements-organisationnels+)>

indique qu'il faut

nom,nom,... responsable, responsable, ... etc. 

Autrement dit, une virgule sépare des éléments qui doivent se suivre dans l'ordre. En informatique presque tout est TRES mécanique.

Maintenant pour obtenir une solution qui colle à votre XML, la solution est:

<!ELEMENT contenus ((nom, responsable)+, elements-pedagogiques+, elements-organisationnels+)>

Ceci dit j'aime pas trop, je préfère une organisation hiérachique, c'est plus simple à comprendre. Genre:

<!ELEMENT outil (nom+, fiche-signaletique+, contenus+, interfaces, commentaires)>
<!ELEMENT contenus (nom, responsable, elements-pedagogiques, elements-organisationnels)>

(voyez le PLUS (+) pour contenus, donc je pars de l'idée que vos devez rentrer ces éléments pour chaque cours)

Ou encore, si plusieurs cours partagent les mêmes éléments pédagogiques et organisationnels vous faites:

<!ELEMENT outil (nom+, fiche-signaletique+, contenus, interfaces, commentaires)>
<!ELEMENT contenus (cours+, elements-pedagogiques+, elements-organisationnels+)>
<!ELEMENT cours (nom, responsable)>

etc...

- Daniel K. Schneider 12 octobre 2007 à 16:49 (CEST)Répondre[répondre]

XSLT

  • 1er problème :

Impossible de pondre un tableau dans la xslt. je comprends rien. Pour moi la logique, enfin ce que j'ai compris, c'est : le fichier xml appelle le fichier xsl (le "traducteur", gardons ce mot puisque ça au moins je comprends) qui lui même appelle la css. Donc aucun texte de fond ne devrait être entré dans la xsl, juste des balises genre <xsl:template match="xxx"> eh bien pour les tableaux, ça paraît impossible sans mettre le texte directement dans la xsl. Or c'est pas logique car quand ensuite je souhaiterai modifier les données de la page web correspondante, je serai obligée d'aller modifier à la fois dans le fichier xsl et dans le fichier xml ! alors qu'il me semble que seul le fichier xml devrait l'être.

Voici le lien vers le .xml et le lien vers le .xsl c'est un immense bazar, j'ai essayé l'autre combinaison possible (un élément différent par ligne) sans plus de succès !

Et voici en gros ce que je voudrais faire

  • 2eme problème

Pour la deuxième xslt, j'ai dû modifier ma DTD pour pouvoir créer le css, mettre un style aux différents éléments. Et ça non plus ça ne me paraît pas rationnel.

Sylviane 14 octobre 2007 à 13:31(CEST)

Salut Sylviane, ça n'est qu'une proposition, mais si tu tiens à faire un tableau de ta XML, tu devrais la construire en conséquence, ça pourrait t'aider à organiser la structure de ton tableau.. Peut-être que tu devrais rajouter une balise <cellule> qui est parente de chacun des éléments que tu veux mettre dans ton tableau.
De cette façon, tu pourrais mettre dans ta XSLT quelque chose du genre :
< xsl:template match="cellule">
<xsl:le code pour balancer le contenu de la balise />

</xsl:template>

ça n'est pas une solution franchement propre, mais si ça peut t'aider.. Sinon, je crois qu'il va falloir que tu utilises des fonctions plus avancées que celles qu'on a touché dans la semaine présentielle, du genre template if, copy for, et toute la panoplie pour réussir à faire des tableaux bien organisé. --Davidc 14 octobre 2007 à 18:03 (CEST)Répondre[répondre]
merci David

je crois que vais abandonner cette idée car ça me paraît maintenant trop compliqué (en fait je me disais qu'un tableau en xml ça doit être aussi lisible dans Excel, non ? ou l'inverse). Je vais envoyer ma première xsl, le prof va être tellement horrifié qu'il va regretter de nous avoir donné ça à faire :-))) La deuxième est un peu mieux mais bon il y a du boulot ! Il me faudrait gratter tout ça pendant un mois ou 2 encore. J'ai vu ton joli site, on voit que tu es un pro ! En particulier ce que j'aime bien dans ton site c'est les 2 points lumineux en bas à droite, dans le vert de la page c'est génial. Je me demande bien comment tu as fait ça ! Sylviane 14 octobre 2007 à 20:32 (CEST)Répondre[répondre]

t'inquiète pas trop, quand il va nous apprendre le SimpleXML, tu vas trouver tout ça tout d'un coup extrêmement simple :P Sinon, pour le fond, oui, un XML, ça doit être lisible via Excel, c'est juste un petit casse-tête pour interpréter la structure (les tables, c'est toujours compliqué...)
Tiens!! une idée qui opurrait te simplifier la vie, c'est d'utiliser des DIV avec un style="float:left OU right" au lieu de TD... Comme ça, tu crée un DIV pour chaque TR et tu mets ton contenu..
Merci c'et gentil comme commentaire.. c'est juste une question d'habitude, à force d'en faire et d'en refaire :P Pour le fond, c'est assez simple, j'ai mis un background à body qui est (une couleur +) une image PNG à 95% transparente (faite avec GIMP). Après l'image est juste un dégradé de transparence qui tire vers le blanc. Le problème de cette méthode, c'est que même une (relative) petite image prend beaucoup d'espace (+ de 30ko), j'avais essayé de faire la même chose avec une image SVG (- de 1ko), mais la gestion du SVG (ou de la balise object?) est tellement lourde que ça rendait tout les effets javascript nul (pas de transition, juste des sauts). Bref, c'est juste une Bref, c'est juste une petite image ;) Davidc 15 octobre 2007 à 06:40 (CEST)Répondre[répondre]
ton idée des div flottantes : j'ai fait exactement ça pour ma deuxième xsl et j'ai eu qqs problèmes de positionnement lorsque je changeais de resolution, sans compter que ça m'oblige à nommer différemment tous les éléments semblables dans la DTD (ou alors j'ai pas tout compris ce qui est farouchement possible)Sylviane 15 octobre 2007 à 09:15 (CEST)Répondre[répondre]

Réponses

Bon, finalement je ne sais pas si vous avez tjrs besoin d'une réponse. Faites-moi savoir et je vous aiderai.

A part cela je trouve étrange qqs. préoccupations. Y a aucun raison de penser à Excel. Ensuite SimpleXML n'est pas plus simple (sauf pour les informaticiens qui n'ont jamais vu la programmation par règles). Finalement, je ne vois pas trop pourquoi il faut penser au CSS quand vous faites du XSLT. Il faut simplement traduire en XHTML, ensuite réfléchir à la mise en page. Votre XSLT ci-dessus ne peux pas marcher. Vous auriez peut-etre simplement du suivre mon conseil et écrire une règle pour chaque balise... Pous réparer ce que vous avez eu l'intention de faire, faudrait utiliser des boucles, mais je ne suis pas favorable à cette solution.

merci pour votre aide, en fait j'ai abandonné mon idée de tableau et je suis partie sur autre chose qui ets d'ailleurs bien plus amusant. Sinon, non bien sûr je ne pense pas à Excel, c'est déjà bien assez compliqué comme ça ! C'est juste que j'avais lu ou entendu qq chose autour de ça. Je crois qu'au final j'ai suivi votre conseil mais je suis pas sûre :-)

Sylviane 15 octobre 2007 à 21:21 (CEST)Répondre[répondre]

encoding

J'aimerais pouvoir utiliser des accents dans mon fichier DTD. Tous les fichiers que j'ai consultés qui sont donnés en exemple sont en anglais. Le problème ne se pose donc pas. Faut-il utiliser les entités générales? Si oui, et que je souhaite mettre un accent aigu à la lettre e, par exemple, où faut-il ajouter la balise <!ENTITY acute "´">? Faut-il la mettre avant la déclaration des éléments, ou après? et à quel endroit faut-il inclure les balises <para>? Exemple: j'aimerais écrire <!ELEMENT Caractéristiques(Information+)> Merci pour votre aide. Denise

Réponses

(1) Pour l'encodage: NON il ne faut rien faire de spécial, XML parle même chinois et arabe par exemple. Evitez de penser HTML. XML est par défaut en UTF-8, donc il faut simplement taper les caractères tel quel. Si par hasard vous utilisez un autre éditeur et qui ne sait pas faire UTF-8, il faut déclarer le jeu de caractères à la fois dans la DTD et dans le fichier XML.

Dans votre cas si vous avez fait la DTD avec un outil comme le notepad, je vous conseille d'ouvrir la DTD dans Exchanger lite et réparer les accents français.

Sinon, vous pouvez essayer d'utiliser une déclaration iso-latin dans les deux

 <?xml version="1.0" encoding="iso-8859-1"?>

Mais je le déconseille! Utilisez simplement (le défaut UTF-8):

  <?xml version="1.0" ?>

Les entités de caractères n'existent pas en XML. Oubliez-les aussi pour HTML. Il n'y a plus aucun besoin. C'est du HTML de grand-mère ! - Daniel K. Schneider 15 octobre 2007 à 15:30 (CEST)Répondre[répondre]

(2) XML n'a aucune balise prédéfini. C'est vous qui devez définir vos balises. Donc il n'y a pas de conseil abstrait à donner pour une balise "para".

Note: Pour ceux/celles qui veullent en savoir un petit peu plus sur l'encodage: Encodage de caractères (une petite notice dans ce wiki).

fichier xml à partir du fichier dtd

J'ai le même problème que Sylviane il y a quelques jours. Je n'arrive pas à faire afficher la liste des "éléments" dans le fichier xls que j'ai créé. Il n'y a pas de message d'erreur et j'ai validé le fichier dtd. J'ai également cliqué dans le menu de gauche sur <+> mais rien n'y fait. Je ne comprends pas. Rien ne s'affiche. J'ai aussi déjà noté manuellement le nom de la racine. Sans effet. J'ai remarqué que dans le fichier "cuisine.xml" une fenêtre est ouverte en bas à gauche qui est intitulée Document properties. Sous "completion" apparaît: cuisineDS.dtd (le fichier que j'avais modifié en cours). Par contre, dans mon fichier "grilleTIC.xml", au même endroit est noté: Inferred from Document. Par ailleurs, quand je change le nom du fichier .dtd sous <!DOCTYPE caracteristiques_TIC SYSTEM "grilleTIC.dtd">, en mettant un nom bidon, il me signale qu'il ne le trouve pas, ce qui signifie que mon fichier "grilleTIC.dtd" est bien repéré.

Mon fichier "grilleTIC.xml" contient pour l'instant les informations suivantes.

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE caracteristiques_TIC SYSTEM "grilleTIC.dtd">

Fichiers SVP

Sans voir les fichiers je ne peux pas vous aider. Il faut les mettre en ligne. - Daniel K. Schneider 15 octobre 2007 à 15:30 (CEST).Répondre[répondre]

Mes deux fichiers .dtd et .xml sont placés maintenant sous http://tecfa.unige.ch/etu-maltt/nestor/sutterw5/stic/ex2/ . J'ai également ouvert cette après-midi les fichiers welcome.xlm (ainsi renommé ) et travaux.dtd de l'exercice dans l'Exchanger XML et là, à nouveau, les éléments ne s'affichent pas dans le fichier welcome.xml. Par contre, ils s'affichent dans les exemples tirés de la page STIC:STIC I - exercice 2. Qu'est-ce que j'oublie de faire?

Il faut juste taper l'élément racine, puis fermer le fichier, puis ouvrir de nouveau. C'est un petit bug (ou absence de feature) de l'éditeur Exchanger.
Sinon, c'est tout bon. J'ai testé avec une copie des fichiers: http://tecfa.unige.ch/etu-maltt/nestor/sutterw5/stic/ex2/ *-DKS.xml et *-DKS-dtd

Je vous conseille également de virer la déclaration ISO-latin ... UTF-8 c'est l'avenir. - Daniel K. Schneider 15 octobre 2007 à 16:19 (CEST)Répondre[répondre]

Je me demandais, par ailleurs, si tous les fichiers de l'exercice 2 pouvaient se trouver sous le répertoire http://tecfa.unige.ch/etu-maltt/nestor/sutterw5/stic/ex2/ ou s'il faut y placer uniquement le rapport et les autres fichiers à un autre endroit.

Non vous pouvez tout mettre dans ce répertoire ... - DKS

Enfin pour l'exercice 3, vous notez qu'il faut placer le rapport sous .../ex2/. Est-ce correct, ou faudrait-il créer un dossier ../ex3 ?

Une erreur, j'ai corrigé cela. Merci :)

Enfin, quand vous écrivez qu'il faut réparer les accents, cela signifie-t-il qu'il faut que je les ajoute ou que je les enlève dans le fichier dtd?

Cela dépend. Si les accents sont déjà en UTF-8 pas de problème. Mais s'ils s'affichent "bizzarement" il faut corriger. Dans le panel en bas à droite (Document Properties), l'encodage est indiquée. Si c'est UTF-8 et si vous caractères s'affichent bien c'est tout bon. - Daniel K. Schneider 15 octobre 2007 à 16:19 (CEST)Répondre[répondre]

MERCI!!! Quand je pense que j'ai fermé et rouvert au moins quinze fois ce fichier et que j'ai mis puis enlevé une dizaine de fois la racine mais je n'ai visiblement jamais essayé de fermer le fichier avec la racine puis de le rouvrir ensuite. Cela marche enfin!

Désolé on l'a vu en classe, mais j'aurais du mettre cela qq. part en rouge et je l'ai fait ci-dessus :)

URL

je n'arrive pas à mettre des url. J'ai créé 3 lignes supplémentaires dans ma DTD

<!ELEMENT link (url, nom-url?)>
<!ELEMENT nom-url (#PCDATA)>
<!ELEMENT url (#PCDATA)>

et j'ai inséré l'élément link avec un "?" dans chaque boite d'élements, exemple :

<!ELEMENT fiche-un (quoi, qui, ou, comment, cours, image, link?)>

Faut-il que je rajoute link ensuite dans chaque sous-éléments, ce qui donnerait

<!ELEMENT ou (link?)>
<!ELEMENT ou (#PCDATA)>

Ensuite dans la xslt, j'essaye d'insérer ici l'élement <link>

<xsl:template match="ou">
	<div id="ou">
		<p><h4>Où ça se trouve ?</h4></p>	
	 </div>
   <xsl:apply-templates/> 
</xsl:template>

Je n'y arrive pas. J'ai pourtant regardé la procédure décrite en page 23 de votre cours. J'ai vu aussi vos exemples ici[[ http://tecfa.unige.ch/guides/xml/examples/xsl-links-to-url/links.xml]] mais c'est au niveau de la DTD que ça me pose problème, je ne sais pas comment les déclarer. Faut-il simplement déclarer chaque élément

<!ELEMENT adresse #pcdata> <!ELEMENT url #pcdata> 

etc ou faut-il écrire un ATTLIST ? et dans ce cas comment ?

Merci pour votre aide Sylviane 16 octobre 2007 à 10:18(CEST)

Voici la solution

Donc je pars de l'élément "link" défini au début et qu'il faut traduire en lien HTML. J'interprète les éléments de la façon suivante:

url = addresse web
nom-url = Text cliquable 
 <!ELEMENT link (url, nom-url?)>

Cela donne:

<xsl:template match="link">
 <a href="{url}"> <xsl:value-of select="nom-url"/> </a>
</xsl:template>

"url" et nom-url sont des enfants directs de link. Donc il suffit d'utiliser {url} et <xsl:value-of select=....> pour les identifier. Donc il faut aussi laisser tomber l'élément "ou", car l'info est déjà dans link. Ensuite, faut rendre le nom-url obligatoire, sinon le code XSLT à écrire devient plus compliqué. En gros, exactement ce qu'il y avait dans la page 25 (de la version en ligne). Peut-etre avez-vous simplement interverti url et nom-url ??

Autre solution: tuer les éléments url et nom-url et faire qc comme:

 <!ELEMENT link (#PCDATA)>
 <xsl:template match="link">
  <a href="{.}">lien </a>
 </xsl:template>

... Enfin y a toute sortes de solutions. De nouveau (pour les autres qui lisent cela). XSLT est un simple engin de traduction qui ne connait pas les liens ni HTML ni rien du tout. On peut fabriquer des a href = .... avec tout ce que voulez. Mais effectivement y a des des structures qui sont plus simples à traduire.

Wââ

trop cool ! ça marche merci! j'aime trop quand ça marche :-) j'ai juste une dernière erreur :

Ln 17 Col 81 - The content of element type "ou" must match "null".
1 Errors

ça doit avoir un rapport avec l'option "?" non ? (? = 0 ou 1 élement)

Fichiers ?
Mhh je ne connais pas les messages d'erreur par coeur, donc faut remontrer le truc. A priori je dirai plutôt que vous avez défini "ou" comme élément vide (EMPTY). Si j'ai raision il faudrait qc. comme:
<ou/>

mais pas:

<ou>....</ou>

Si c'est pas cela, faut me montrer ... - Daniel K. Schneider 16 octobre 2007 à 21:47 (CEST)Répondre[répondre]


non j'ai vérifié, c'est pas ça. J'ai tout déposé dans mon dossier, c'est là

Merci, j'espère que tout n'est pas à modifier, je suis épuisée :-) Sylviane 17 octobre 2007 à 00:47 (CEST)Répondre[répondre]

corrections à faire
<!ELEMENT fiche-un (quoi, qui, ou, comment, cours, image)>
<!ELEMENT ou (#PCDATA|link)*>

link est bien à l'intérieur de la balise "ou". Aussi "ou" est une balise avec texte et élément link mélangé.

... à part cela vous retombez dans votre erreur précédante. Ne faut jamais taper des balises XML à la main. D'abord faire la DTD et ensuite remplir .... Ainsi vous verrez tout-de-suite la logique de votre grammaire.

il faudra que vous me montriez ça quand je viendrai car je n'ai rien tapé à la main dans le xml : je positionne le curseur là où je veux mettre une balise, je fais un "<" et Exchanger me montre toutes les balises (et seulement celles-ci) qu'il est possible d'insérer. Donc si celle que je veux en mettre une qui n'y est pas, c'est que ce n'est pas possible !
Si malheureusement, car il faut aussi respecter l'ordre. Puis je suis sûr que vous avez du faire manuellement qc. pour insérer des éléments dans l'élément "ou" qui était défini sans enfants ... On peut voir cela plus tard. - Daniel K. Schneider 17 octobre 2007 à 12:36 (CEST)Répondre[répondre]
ok je sais pourquoi : c'est parce que parfois j'ai fait des copier-coller d'anciennes DTD que j'avais faites plutôt que de tout refaire. OK, pour la deuxième DTD et XSLT qu'on doit faire je reprends tout et j'abandonne les copier-coller, et je fais comme vous dites.Sylviane

A part cela, je trouve totalement inutile de multiplier des balises de type outil-un, outil-deux etc. Pourquoi pas "outil" simplement.

ça me posait trop de problèmes de mise en page, enfin je n'y arrivais pas. Ce qui me serait utile, quand on aura tout rendu, c'est une correction complète de la DTD pour que par comparaison je puisse mieux comprendre. Dans ce domaine, je ne sais pas imaginer ce qui doit être donc forcément je ne peux pas vraiment le réaliser. C'est comme si vous demandiez à quelqu'un de fabriquer un meuble alors qu'il n'en n'a vu que quelques uns et de très loin et il n'imagine pas, par exemple, à quoi sert une charnière parce qu'il n'a jamais ouvert la porte d'un meuble. Je ne sais pas si l'image est parlante mais je me sens exactement dans ce cas. - Sylviane 17 octobre 2007 à 09:28 (CEST)Répondre[répondre]
Clair, vous êtes en train d'apprendre et c'est pour cela que je vous conseille de laisser à l'état. Et effectivement, je devrais prendre votre exemple et montrer comment faire une version courte .... XML n'est pas encore terminé :) - Daniel K. Schneider 17 octobre 2007 à 12:36 (CEST)Répondre[répondre]
oui ça, ça m'aiderait beaucoup ! Il y a un truc que j'aimerais bien arriver à faire mais plus tard : dans la rubrique "commentaires", je voudrais insérer un formulaire pour que les gens entrent leurs propres commentaires sur les outils Tecfa (dans la version sérieuse). Vous me montrerez un jour ? bon pas maintenant parce que c'est surement hyper compliqué et j'ai la tête pleine comme une coucourde.Sylviane


Sinon votre grammaire ne peut que décrire une seule situation, exactement à l'opposé de ce que doit être une grammaire. Ensuite faut 4 fois plus de règles XSLT. Enfin, vous pouvez laisser ... c'est une erreur de débutante de ne pas vouloir profiter du principe de grammaire et comme je l'ai déjà dit: le concept de grammaire est absente de notre culture (cela a été inventé en 1956 seulement et n'est pas encore enseigné à l'école).

- Daniel K. Schneider 17 octobre 2007 à 01:12 (CEST)Répondre[répondre]

"no protocol"

Lorsque je tente de valider mon fichier xml, Exchanger me dit gentiment: "no protocol: rapport.dtd" J'ai vérifié l'orthographe du fichier et son emplacement, mais je ne vois pas du tout à quoi fait référence cette erreur... Vous trouverez les documents xml, xsl et dtd ici. Louiselle, 16 octobre

Mhh non c'est bon

Je n'arrive pas à reproduire l'erreur. Pour moi cela a l'air parfait. Etes-vous sûre d'avoir testé les mêmes fichiers et dans un seul répertoire ?

Note: vous auriez pu simplement taper les apostrophes et les guillemets ... Aucune raison d'utiliser des entitiés. Enfin cela ne gène pas. Le seul symbol qui ne passe pas est le "&" et qu'il faut effectivement remplacer par le "&amp;" - Daniel K. Schneider 16 octobre 2007 à 21:48 (CEST)Répondre[répondre]


ATTLIST

Pour l'exercice 2, dans ma DTD, j'ai l'attribut ATTLIST suivant:

    <!ELEMENT caractéristiques (item, description)>
    <!ELEMENT item (#PCDATA)>    
    <!ATTLIST caractéristiques degre (faible|moyen|élevé) #REQUIRED>
    <!ELEMENT description (#PCDATA)> 

Dans le fichier xml, il apparaît ainsi:

     <grille>
			<caractéristiques degre="moyen">
				<item/>
				<description/>
			</caractéristiques>
		</grille>

Les deux fichiers sont validés mais je n'arrive pas à intégrer l'attribut ATTLIST dans le fichier xls J'ai essayé différentes choses comme:

<xsl:template match="grille">
		<h3 align="center">Caractéristiques TIC</h3>
		<ul><xsl:apply-templates/></ul>
	</xsl:template>

<xsl:template match="caractéristiques">
    <xsl:apply-templates/>

	</xsl:template>
	
<xsl:template match="caractéristiques degre">
		<p align="center">
			<xsl:apply-templates/>
		</p>
</xsl:template>

	<xsl:template match="item">
	<li><strong>
           <xsl:apply-templates/>
	</strong></li>

mais l'élément "degre" n'apparaît jamais dans le fichier HTML alors que j'ai mis différentes données ou informations dans le fichier xml. J'espère que je suis suffisamment claire. Merci d'avance. Denise

Insertion d'un attribut

Il faut aller chercher des attributs avec xsl:value-of. Donc juste écrire une règle pour l'élément comme vous l'avez fait. Ensuite qc. comme ci-dessous. @degre veut dire l'attribut degre de l'élément courant (donc caractéristiques)


<xsl:template match="caractéristiques">
    <li>
      <xsl:apply-templates select="item"/> - Degré: <xsl:value-of select="@degre"/> <br/>
      <xsl:apply-templates select="description"/>
  </li>
</xsl:template>

<xsl:template match="item">
  <strong> <xsl:apply-templates/></strong>
</xsl:template>

<xsl:template match="description">
  <xsl:apply-templates/>
  </xsl:template>

J'ai mis un exemple complet ici (grille.xml et grille.xsl) http://tecfa.unige.ch/guides/xml/examples/xsl-simple/

Evidémment, il y a d'autres solutions, mais le principe reste le même, par ex (grille3.xml et grille3.xsl). ../@degre veut dire l'attribut degre de l'élément parent de item (item est enfant de caractéristiques).

<xsl:template match="caractéristiques">
    <li>
      <xsl:apply-templates />
  </li>
</xsl:template>

<xsl:template match="item">
  <strong> <xsl:apply-templates/> - Degré: <xsl:value-of select="../@degre"/></strong>
</xsl:template>

<xsl:template match="description">
  <p><xsl:apply-templates/></p>
  </xsl:template>


- Daniel K. Schneider 20 octobre 2007 à 15:58 (CEST)Répondre[répondre]

Quelle belle surprise de voir qu'au retour des courses mon problème est résolu! Merci aussi pour les exemples qui "marchent" et "ne marchent pas", ils m'ont aidé à mieux comprendre comment insérer des attributs dans un fichier xls. Denise

Problème de validation à propos des caractères -- Benoit Gogniat 23 octobre 2008 à 11:23 (CEST)

Sur la page que j'ai créée dans le cadre de l'exercice 2, lorsque je tente de valider par "Valid XHTML" en bas de cette même page, il y a un problème annoncé avec les caractères. Je ne comprends pas pourquoi?

page ex2

Merci d'avance pour un conseil ...

Re: Problème de validation à propos des caractères -- Daniel K. Schneider 24 octobre 2008 à 01:52 (CEST)

Ce valideur ne valide pas XML en fait, et c'est cela qu'il voit (pas le HTML qui en résulte). Maintenant:

  • pour valider le XML: il suffit de le faire dans un éditeur
  • pour valider le XHTML: c'est plus compliqué, il faudrait transformer le XML en XHTML d'abord. Ensuite le sauver et valider.

Résumé: le valideur W3C ne fait pas ce travail - donc vous ne devez pas vous inquiéter (plutôt enlever ces liens).

-- Syllack1 10 novembre 2008 à 22:57 (CET)

Bonjour Schneider

Voila enfin ce que j'ai fait, je pense que cela est bien structuré. vous pouvez me confirmer cela, je dois avancer sur les autres exercices dès demain.

voici le url: http://tecfa.unige.ch/etu-maltt/nestor/syllach2/stic/ex2/


le DTD, xml, xsl de ma page travaux sont bien validés

merci bonne nuit

Re: Du progrès mais reste 2-3 détails à peaufiner -- Daniel K. Schneider 11 novembre 2008 à 15:51 (CET)

(1) Voici un extrait de votre DTD

<!ELEMENT Centre (Formation, Objectif, Cours, Dispositif, Lieu, Date, contact)*>
<!ELEMENT Formation (#PCDATA)>  
<!ELEMENT Objectif (#PCDATA)>
<!ELEMENT Cours (Cour,  Contenu, Exercice)*>

Elle permet effectivement de définir plusieurs cours. Donc vous devriez dans votre exemple au moins en définir 2-3 cours pour voir ce que cela donne. La structure n'est pas très logique. Par exemple, je suggère de séparer l'information concernant les cours de celle qui concerne le centre. Avec votre DTD on peut mettre plusieurs Cour-Contenu-Exercice dans un cours, mais Lieu-Date est au niveau supérieur, ce qui ne fait pas de sens.

donc plutot adopter qc comme:

<!ELEMENT Centre (Formation, Cours*, contact)>
<!ELEMENT Cours (Objectif, Cour, Contenu, Exercice, Lieu, Date)>

ou encore (plus facile à gérer avec XSLT):

 <!ELEMENT Centre (Formation, Liste_Cours*, contact)>
 <!ELEMENT List_Cours (Cours)*>
 <!ELEMENT Cours (Objectif, Cour, Contenu, Exercice*, Lieu, Date)>

(2) L'URL pointe sur le fichier XML alors qu'il faut afficher la page d'acceuil (le rapport).

(3) Il faut se demander s'il ne faudrait pas structurer plus certains sous-éléments (enfin cela vous concerne si vous visez une très bonne note).