1

Je fais du XML avec des DTD's ces temps-ci. J'essaie d'utiliser des entités définies dans le DTD (externe), mais pour je ne sais quelle raison, cela ne fonctionne pas ni avec Fx 3.6, Safari 4.0.4, Chrome 3.0 et 4.0, Opera 10.10, mais sous IE 8, pas de problèmes (!). Je joins mon code pour que vous puissiez l'analyser, et si vous trouvez quelque chose de tangible autre que "Utilise IE©™", ça me permettra de savoir si je n'y suis pour rien.
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE Ecole SYSTEM "ecole.dtd"> <Ecole> <Section> <NomSection>&MS;</NomSection> <Enseignant> <Nom>Benzonana</Nom> <Classe>STI3a</Classe> </Enseignant> </Section> </Ecole><?xml version="1.0" encoding="utf-8"?> <!ENTITY MS "Maggie Sciendoz"> <!ENTITY SectionI "Section informatique avec comme maître principal &MS;"> <!ENTITY MP "&MS;, maître principal de section &SectionI;"> <!ELEMENT Ecole (Section)> <!ELEMENT Section (NmoSection+, Enseignant+)> <!ELEMENT Enseignant (Nom, Classe+)> <!ELEMENT NomSection (#PCDATA)> <!ELEMENT Nom (#PCDATA)> <!ELEMENT Classe (#PCDATA)>
P.S. : je vois venir ceux qui me diront "Mais ton entité, c'est MS, donc c'est normal que ça fonctionne avec IE" embarrassed
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

2

Hmm, essaye de rajouter standalone="no" dans le header xml, et vire le header xml dans le DTD (ce n'est pas du xml !) ça devrait marcher.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

3

Ben, pour le header xml dans le DTD, c'est pas gênant apparemment, mais c'est vrai que ça n'a rien à y faire grin.
Rajouter standalone="no" ne résout rien, l'entité reste indéfinie.
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

4

Arf oui… Dans ce cas ça veut juste dire que le navigateur ignore tout simplement le DTD externe sad
Je pensais que ça ne se faisait plus, mais faut croire que si… La seule solution est donc de copier les définitions d'entités dans un DTD inline dans le fichier XML sorry
(Oui bien d'utiliser IE, banane !)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

5

C'est quand-même étrange que TOUS les navigateurs cités (sauf IE, donc) réagissent ainsi… Je regardais le DTD du XHTML1 strict ainsi que la définition du doctype dans une page html, c'est presque pareil, à part SYSTEM qui devient PUBLIC (j'ai essayé de changer l'un en l'autre, ça ne change rien) et une chaîne apparemment descriptive (peut-être pas, mais ça n'a pas l'air d'une URL)
Est-ce que ça veut dire que seul IE utilise encore les déclarations <!DOCTYPE […] > ?
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

6

IE est basé sur MSXML qui est une des meilleures API XML, donc ils n'ont pas beaucoup de trucs à ajouter pour que ça fonctionne.
Pour les autres ça peut être soit que leur API XML (enfin, celui qu'ils utilisent), ne soit pas capable de lire les DTD externes, soit qu'ils n'ont pas pris la peine d'implémenter cette fonctionnalité dans le navigateur. Ça peut aussi être un choix. Charger un DTD externe alourdit le chargement du document en temps normal, mais c'est parfois nécéssaire (par exemple avec des entités).
Pour les DTD HTML, XHTML & co ne te fais pas de films: ils ne sont jamais vérifiés par le navigateur. Les navigateurs connaissent déjà les formats et en font leur propre gestion (en fonction du DTD) mais ils ne vont jamais aller télécharger le DTD indiqué smile (Au pire, le navigateur possède une version locale du DTD)
Et donc non, IE n'est pas le seul à utiliser les doctype. C'est juste celui qui semble suivre le mieux le standard tongue
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

7

j'ai déja utilisé des DTD perso avec firefox, pas tout récemment en plus.

a la place de SYSTEM on peut pas essayer PUBLIC ?

8

./7 : J'ai déjà essayé, c'est ce que je voulais dire en ./5, mais c'est pas trop clair, apparemment => edit. Donc, ça ne marche pas.
./6 : Génial. Ça veut dire que plus on va avoir de "standards" différents sur le web, plus nos navigateurs seront gros, mais pas que de peu… Et ça ferme drôlement les possibilités du XML comme langage web personnalisé.
• Ymox s'en va chercher un site en XML, pour voir…
[edit] Bon, je n'ai pas réussi à en trouver.
[Edit2] Il semblerai que le site de Starcraft II soit en XML + XSLT, pour ceux qui ont envie d'aller voir… Mais j'imagine qu'ils n'ont pas utilisé d'entités spéciales
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

9

Bon, je n'en suis plus là, maintenant je travaille à autre chose. <?xml version="1.0" encoding="ISO-8859-1" ?> <?xml-stylesheet type="text/xsl" href="PCShop.xsl"?> <PCShop> <Nom>Magasin PC Shop</Nom> <Vendeur ID="Abbondio"> <NomVendeur>Abbondio</NomVendeur> <AdresseVendeur>Nyon</AdresseVendeur> <DateNaissance>1966</DateNaissance> <Client> <Nom>Cuendet</Nom> <Prenom>Michel</Prenom> <Adresse>Lausanne</Adresse> <Credit>3600</Credit> <Titre> <NoTitre>211</NoTitre> <LibelleTitre>CDRW 8x</LibelleTitre> </Titre> </Client> <Client> <Nom>Leresche</Nom> <Prenom>Karl</Prenom> <Adresse>Geneve</Adresse> <Credit>2400</Credit> <Titre> <NoTitre>220</NoTitre> <LibelleTitre>PIV 1.8G</LibelleTitre> </Titre> <Titre> <NoTitre>221</NoTitre> <LibelleTitre>PIV 1.8G</LibelleTitre> </Titre> </Client> </Vendeur> <Vendeur ID="Bolomey"> <NomVendeur>Bolomey</NomVendeur> <AdresseVendeur>Lausanne</AdresseVendeur> <DateNaissance>1955</DateNaissance> <Client> <Nom>Pittier</Nom> <Prenom>Jean</Prenom> <Adresse>Lausanne</Adresse> <Credit>6000</Credit> <Titre> <NoTitre>210</NoTitre> <LibelleTitre>RAM 256M</LibelleTitre> </Titre> <Titre> <NoTitre>210</NoTitre> <LibelleTitre>RAM 512M</LibelleTitre> </Titre> <Titre> <NoTitre>210</NoTitre> <LibelleTitre>RAM 128M</LibelleTitre> </Titre> </Client> <Client> <Nom>Buzzi</Nom> <Prenom>Paul</Prenom> <Adresse>Lausanne</Adresse> <Credit>4800</Credit> <Titre> <NoTitre>210</NoTitre> <LibelleTitre>CDRW 12x</LibelleTitre> </Titre> </Client> </Vendeur> <Vendeur ID="Dubois"> <NomVendeur>Dubois</NomVendeur> <AdresseVendeur>Vevey</AdresseVendeur> <DateNaissance>1977</DateNaissance> <Client> <Nom>Gasser</Nom> <Prenom>Claude</Prenom> <Adresse>Nyon</Adresse> <Credit>2400</Credit> <Titre> <NoTitre>300</NoTitre> <LibelleTitre>HD 40G IDE</LibelleTitre> </Titre> </Client> </Vendeur> <Vendeur> <NomVendeur>Tartempion</NomVendeur> <AdresseVendeur>Lausanne</AdresseVendeur> <DateNaissance>1966</DateNaissance> <Client> <Nom>Leresche</Nom> <Prenom>Karl</Prenom> <Adresse>Geneve</Adresse> <Credit>2400</Credit> <Titre> <NoTitre>220</NoTitre> <LibelleTitre>PIV 1.8G</LibelleTitre> </Titre> <Titre> <NoTitre>221</NoTitre> <LibelleTitre>PIV 1.8G</LibelleTitre> </Titre> </Client> </Vendeur> </PCShop>
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>Statistiques des vendeurs du <xsl:value-of select="PCShop/Nom"/></title> <basefont face="Arial"/> </head> <body text="blue"> <xsl:for-each select="PCShop/Vendeur"><!-- ici --> <table bgcolor="lightblue" border="1" bordercolor="blue" width="100%"> <td valign="middle" align="center"><H1><xsl:value-of select="NomVendeur"/></H1></td> </table> <blockquote> <table width="500"> <xsl:for-each select="*[count(Titre)=1]"> <tr> <td colspn="2"><b><xsl:value-of select="Nom"/></b><xsl:text> </xsl:text><xsl:apply-templates select="Prenom"/></td> <td><xsl:apply-templates select="Adresse"/></td> <td><xsl:apply-templates select="Credit"/></td> </tr> <xsl:for-each select="Titre"> <tr> <td colspan="1" align="right"><xsl:value-of select="NoTitre"/></td> <td colspan="3"><xsl:apply-templates select="LibelleTitre"/></td> </tr> </xsl:for-each> </xsl:for-each> </table> </blockquote> <hr /> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
Je souhaiterais n'afficher que les vendeurs qui ont un (ou plusieurs) client(s), le(s)quel(s) n'a (n'ont) qu'un titre, et n'afficher que ces clients. Les vendeurs n'en ayant pas n'ont pas a être affichés. Avec ce code, Tartempion s'affiche encore. J'ai essayé avec [count(Client/Titre)=1] comme prédicat à l'endroit marqué (le commentaire "ici"), mais là seul Dubois s'affiche…
Any idea?
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

10

Déjà il vaut mieux utiliser des apply-templates plutôt que des for-each c'est plus efficace pour le parser et plus rapide, sinon tu y étais presque je pense que tu y serais arrivé tout seul sans les for-each
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="/"> <html> <head> <title>Statistiques des vendeurs du <xsl:value-of select="PCShop/Nom"/> </title> <basefont face="Arial"/> </head> <body text="blue"> <xsl:apply-templates select="/PCShop/Vendeur"/> </body> </html> </xsl:template> <xsl:template match="Vendeur"> <xsl:variable name="TESTTITRE"> <xsl:choose> <xsl:when test="Client[count(Titre)=1]">true</xsl:when> <xsl:otherwise>false</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:if test="$TESTTITRE='true'"> <table bgcolor="lightblue" border="1" bordercolor="blue" width="100%"> <td valign="middle" align="center"> <H1> <xsl:value-of select="NomVendeur"/> </H1> </td> </table> <xsl:apply-templates select="Client"/> </xsl:if> </xsl:template> <xsl:template match="Client"> <xsl:variable name="NBTITRECLIENT"> <xsl:value-of select="count(Titre)"/> </xsl:variable> <xsl:if test="$NBTITRECLIENT='1'"> <blockquote> <table width="500"> <tr> <td colspn="2"> <b> <xsl:value-of select="Nom"/> </b> <xsl:text> </xsl:text> <xsl:apply-templates select="Prenom"/> </td> <td> <xsl:apply-templates select="Adresse"/> </td> <td> <xsl:apply-templates select="Credit"/> </td> </tr> <xsl:apply-templates select="Titre"/> </table> </blockquote> <hr/> </xsl:if> </xsl:template> <xsl:template match="Titre"> <tr> <td colspan="1" align="right"> <xsl:value-of select="NoTitre"/> </td> <td colspan="3"> <xsl:apply-templates select="LibelleTitre"/> </td> </tr> </xsl:template> </xsl:stylesheet>

11

Ah, je me demandais si on allait me répondre, même si c'était pour me dire "Non, je ne sais pas comment on fait". Merci grincheux.

Et pour les apply-template's, je sais, mais on apprenait d'abord en mode procédural avant de passer à l'équivalent de l'orienté objet.

Je tiens à préciser que ce n'était pas pour un cours, donc je ne vous ai pas demandé de résoudre un exercice, mais en fait de répondre à une question à laquelle notre prof n'a pas pu répondre non-plus.
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?