« STIC Discussion:STIC I - exercice 2 (Nestor-Pixel) » : différence entre les versions

De EduTech Wiki
Aller à la navigation Aller à la recherche
Ligne 267 : Ligne 267 :
: 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 :) - [[Utilisateur:Daniel K. Schneider|Daniel K. Schneider]] 10 octobre 2007 à 14:13 (CEST)
: 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 :) - [[Utilisateur:Daniel K. Schneider|Daniel K. Schneider]] 10 octobre 2007 à 14:13 (CEST)


=== j'ai compris===
==== 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 ;-)
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 ;-)

Version du 10 octobre 2007 à 14:52

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)