STIC Discussion:STIC I - exercice 2 (Nestor-Pixel)
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
XHTML 1.1 est définit justement avec ces modules:
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:
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:
- Téléchargez les fichiers dans http://tecfa.unige.ch/guides/xml/examples/dtd-examples/ePBL11/
- Editez ePBLpaper11.xml
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:
- Téléchargez les fichiers dans http://tecfa.unige.ch/guides/xml/examples/dtd-examples/ePBL11/
- Editez ePBLpaper11.xml pour avoir une idée comment des balises XHTML peuvent s'insérer
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)
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)
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