Je tombe sur un problème que malheureusement je n'arrive pas à résoudre, pour mon évaluation XML ( cours ) je doit créer une dvdtheque ( DTD + XML + XSL(T) )
Mon problème est que je n'arrive pas à récupérer un élément par rapport à son id, hummmmm pas très clair peut-être
Voici ma DTD
dvdtheque.dtd
<!ELEMENT dvdtheque (films*,genre*,acteurs*,realisateurs*,nationalite*,disponibilite*)>
<!-- Noeud des films -->
<!ELEMENT films(titre,genre*,acteur*,realisateur*,dispo*,synopsis)>
<!ATTLIST films idfilm CDATA #REQUIRED>
<!ELEMENT titre (#PCDATA) #REQUIRED>
<!ATTLIST titre annee CDATA #REQUIRED>
<!ATTLIST titre duree CDATA #REQUIRED>
<!ELEMENT genre EMPTY>
<!ATTLIST genre idgenre IDREF #REQUIRED>
<!ELEMENT acteur EMPTY>
<!ATTLIST acteur idact IDREF #REQUIRED>
<!ELEMENT realisateur EMPTY>
<!ATTLIST realisateur idreal IDREF #REQUIRED>
<!ELEMENT dispo EMPTY>
<!ATTLIST dispo iddispo IDREF #REQUIRED>
<!ELEMENT synopsis (#PCDATA) #REQUIRED>
<!-- Noeud des genres -->
<!ELEMENT genres (nomg)>
<!ATTLIST genres idrefgenre ID #REQUIRED>
<!ELEMENT nomg (#PCDATA) #REQUIRED>
<!-- Noeud des acteurs -->
<!ELEMENT acteurs (noma)>
<!ATTLIST acteurs idrefact ID #REQUIRED>
<!ELEMENT noma (#PCDATA) #REQUIRED>
<!-- Noeud des realisateurs -->
<!ELEMENT realisateurs (nomr)>
<!ATTLIST realisateurs idrefreal ID #REQUIRED>
<!ELEMENT nomr (#PCDATA) #REQUIRED>
<!-- Noeud des nationalités -->
<!ELEMENT nationalites (nomn)>
<!ATTLIST nationalites idrefnat ID #REQUIRED>
<!ELEMENT nomn (#PCDATA) #REQUIRED>
<!-- Noeud des nationalité -->
<!ELEMENT disponibilites (nomd)>
<!ATTLIST disponibilites idrefdispo ID #REQUIRED>
<!ELEMENT nomd (#PCDATA) #REQUIRED>
jusque là je pense que ma DTD est correct je définit bien les ID et les IDREF ?
Vous remarquerez aucune mise en page je cherche juste à l'afficher, dans ce XSL le titre s'affiche correctement ( normale je fait la boucle sur les films )
ensuite j'effectue une boucle sur acteur en lui demandant de m'envoyer l'element noma de l'identifiant a1
mais rien impossible d'afficher l'acteur
Si quelqu'un à du temps à me consacrer pour comprendre ou est mon erreur, car je suppose que c'est une erreur de ma part
Je n'utilise malheureusement pas les DTD, et de plus IE7 ne semble pas accepter le DTD que tu fourni.
Mais je me demande si ici :
<xsl:value-of select="id(./@idact)/noma"/>
tu ne devrais peut-être pas indiquer que l'ID est celui d'un element dvdtheque/acteur. Parce que dans ta boucle, tu es quand-même dans le contexte de l'élément dvdtheque/films, et dvdtheque/acteur n'est évidement pas dans dvdtheque/films.
En dehors de ça, l'usage que tu fais de la fonction id semble correcte (vu les définitions de la DTD).
Avec quoi teste-tu ton système ? Parce que chez moi avec IE7, c'est KO (il m'indique des erreurs dans la DTD).
Je suis curieux de voir la suite de cette affaire, ... ça m'interesse.
XMLwriter me dit que tout est wel formed et XML est valid
j'ouvre mon fichier dans IE7 et houraaaa il affiche bien l'acteur en fonction de l'ID, mais FF lui ne veux pas il m'affiche juste le titre
et pour ce qui concerne
select="id(./@ida)/noma"/>
on spécifie qu'il doit nous retouner l'élément noma qui porte l'ID fourni par l'IDREF de ida
Donc IE7 ca marche nikel
FF ca plante
Donc voilà, maintenant je cherche à l'afficher correctement dans IE7 ( ca c'est bon ) et dans FF qui lui ne m'affiche pas le nom des acteurs
Probablement tout simplement un problème de compatibilité entre navigateurs. Je sais que par exemple IE6 accepte certaines constructions XSLT, que mon XSLTProc n'accepte pas (à vrai dire, IE6 accepte des constructions bien pratiques, mais malheureusement non-standards).
Pour résoudre ton problème sous FireFox, ouvre ton document, puis ensuite dans le menu "Tools", ouvre "Error Console". Là tu trouvera certainement des indications de ce qui a empéché ton document d'être affiché normalement.
FireFox n'ouvre pas de boite de message d'erreur par défaut quand il rencontre une erreur dans un document (contrairement à Opera pas exemple). Pour cette raison, il te faut aller explicitement de renseigner sur les erreurs éventuelles en ouvrant la console d'erreur.
alors les sources sont donc dans le post plus haut, elle n'ont pas changer
j'ai tester sous
- IE7 ( ok c'est bon )
- FireFox 2.0.0.13 ( passe pas )
- FireFox 3 beta 5 ( idem que pour la 2 )
- Safari 3.1 ( ok c'est bon )
- Opera 8.54 ( Aucune transformation XSL, il m'affiche tout les contenu du XML sans les balise )
Voilà les test de navigateur que j'ai éffectuer
ui mon prof est compréhensible, mais c'est un peut énervant, j'aime pas rester sur un probleme, à l'heure ou on nous parle d'un XML compatible avec la majorité des programme :s on à déjà du mal à le transformer dans tout les navigateur alors les autre programmes ....
Spliffer dit : à l'heure ou on nous parle d'un XML compatible avec la majorité des programme
Oui, mais il y a plusieurs niveau à XML. Il y a le niveau contenu du document (niveau physique, encodage des caractère, structure XML), et le niveau interprétation (sémantique, modèle de document, interprétation du contenu). Le niveau interprétation n'est pas compatible avec toutes les applications. Là, il s'agit d'un problème de DTD, qui ne concern pas XML.
Au niveau contenu du document et validation de la structure, la portabilité est assez bien garantie (sauf bug, ou problème de version XML - 1.0 vs 1.1). Je ne connais aucune application XML qui accèpte un document XML mal formé, ni aucune qui rejète un document XML bien formé.
Le support de la validation vis-à-vis d'un modèle de document est un autre sujet. Il existe d'ailleurs plusieurs solutions dans ce domaine : Schematron (celui qui ressemble le plus à mon idéal en la matière), XMLSchema, DTD, etc (il y en a d'autres), et même des systèmes spécfiques à certaines applications (c'est la solution pour laquelle j'ai opté personellement).
En ce qui concerne la validation d'un modèle de document, et donc l'interprétation, il n'y a de garantie que lorsque l'on utilise une application spécifique. Par exemple sitemap n'est généralement correctement interprété que par les applications que cible ce modèle de document (les robots d'exploration web), le support des DTD est généralement restreint dans les navigateurs, à ce qui est nécéssaire pour une interprétation de HTML/XHTML. Voir même parfois, les navigateurs n'accèdent même pas à la DTD, mais elle codée en dure dans le navigateur, et l'interprétation de la DTD est assez limité (et encore, dans le meilleur des cas).
Un navigateur web n'est une application XML, que dans une mesure limitée.
D'un point de vue pédagogique, tu peux l'interpréter comme une prise de conscience de la différence entre le théorie et la pratique. Au début ça peut sembler ennuyeux, mais on comprend vite pourquoi il est souvent préférable pour des raisons d'efficacité, que les applications supportant telle ou telle norme, n'en supporte en fait qu'une partie, qui est généralement choisie en vertu de l'usage prévu de l'application en question.
Si tu ne travaillait pas avec des navigateurs, mais avec des applications plus orientées XML et validation XML, alors il y a de bonnes chances que les testes que tu as tenté aurait pris une autre tournure : des applications plus ciblées auraient probablement mieux interprété ta DTD.