Salut tout le monde,


j'apprend le XML, en formation mais c'est un module en libre via le net.... j'ai des exos à faire et cherche donc des tutos de base ici mais ne trouve pas.

Sinon je poste mon exo. au cas où, si quelqu'un peut me dire rapidemment si je suis dans le bon ou si je suis a coté de la plaque.

Je dois accorder ce XML par rapport à une DTD donnée, corriger d'eventuelles fautes...

Ce qui me turlupine c'est le + derriere chapter ,et le* derriere section, parcequ'il y a un autre chapter sans + et un autre chapter sans * dans la DTD.



L'exercice en question :

Est donné cette DTD :

<!ELEMENT doc (title?, chapter+)>
<!ELEMENT chapter (title, (para|note)*, section*)>
<!ELEMENT section (title, (para|note)*)>
<!ELEMENT title (#PCDATA|emph)*>
<!ELEMENT para (#PCDATA|emph)*>
<!ELEMENT note (#PCDATA|emph)*>
<!ELEMENT emph (#PCDATA|emph)*>
<!ATTLIST chapter num ID #REQUIRED visible (true | false) 'true'>




Puis est donné ce XML qui contient des "désaccords " par rapport a sa DTD.

XML:


<!ELEMENT doc (title?, chapter+)>
<!ATTLIST chapter num ID #REQUIRED visible (true | false) 'true'>
<!ELEMENT chapter (title, (para|note)*, section*)>

<?xml version="1.0" ?>
<!DOCTYPE doc SYSTEM "doc.dtd">
<doc>
<title>Document Title</title>
<chapter visible='false'>
<title>Chapter Title</title>
<section num="s1">
<title>Section Title</title>
<para>This is a test.</para>
<note>This is a note.</note>
</section>
<section num="s2">
<title>Another Section Title</title>
<para>This is <emph>another</emph> test.
This is <emph>another</emph> test.
This is <emph>another</emph> test.</para>
<note>This is another note.</note>
</section>
</chapter>
</doc>


Voila ma "correction" :

XML:

<?xml version="1.0" ?>
<!DOCTYPE doc SYSTEM "doc.dtd">
<doc>
    <title?>Document Title</title?>
    
                                       <chapter+ visible='true'>
    
<title>Chapter Title</title>
 <para>This is a test.</para>
 <note>This is a note.</note>
                                           
                                         <section>     
<title>Chapter Title</title>                                               
<para>This is a test.</para>
<note>This is a note.</note>
                                         </section>
         
                                          <section>
<title>Another Section Title</title>
 <para>This is a test.</para>
 <note>This is a note.</note>
<para>
This is <emph>another</emph>
test. This is <emph>another</emph> test.
This is  <emph>another</emph>test.
</para>
 <note>This is another note.</note>
                                          </section>
    
                                                                                         </chapter+>
</doc>

 


J'ai viré les id de section, ya pas necessité qu'ils soient là je pense.
Rajouter un ? pour le premier title dans la balise.
Mis le chapter en 'true'...ça doit etre environ a peu pres tout pour etre precis Smiley ohwell

Tant que j'y suis, j'ai lu (et relu) le livre de R.Goetter CSS2 ( Smiley smile ) et je resterais bien à cette "meme maison" je demandais donc si existe equivalent pour le PHP, car ensuite ce serons des modules sur le php que je vais suivre (mais avec un formateur...) .

A la formation on est avec XMLlight : Vous en dites quoi?
Le truc c'est qu'en tappant F4 il "parse" : j'y connais rien mais apparemment c'est une sorte de validateur d"orthographe?
Parceque là j'ai chopper Oygene et je ne trouve pas l'équivalent de la fonction.

J'arrive pas a le trouver non plus (XMLlight).

Merci de votre patience avec les "Bleus".comme moi.
Modifié par Hum (09 Mar 2006 - 16:13)
Bonjour,

Tu poses beaucoup de questions qui semblent montrer que tu n'as pas compris la syntaxe d'une DTD... Et toutes ces questions sont liées Smiley cligne

Tu peux regarder ce cours sur les DTD pour avoir une autre manière d'aborder le sujet...
Gilles a écrit :
Bonjour,

Tu poses beaucoup de questions qui semblent montrer que tu n'as pas compris la syntaxe d'une DTD... Et toutes ces questions sont liées Smiley cligne

Tu peux regarder ce cours sur les DTD pour avoir une autre manière d'aborder le sujet...


Salut !

Ben j'ai commencé le XML depuis hier, et ce sont des exos donnés alors que je n'ai eu aucun cours sur les DTD !
je ne sais pas ce qu'est la DTD, en ai jamais vu...
Je comprends evidemment rien car je sais quasis rien !

Je te remercie pour le lien, j'y vais de suite...
...et reviens te re-remercie.


Smiley cligne
Modifié par Hum (07 Mar 2006 - 18:16)
Merci Gilles,

Super ce lien.
J'ai donc compris que les * ? + étaient des occurences.

Mais il est dit que * c'est pour autant de fois que l'on veut.
Autant de fois que l'on veut ça veut dire 0 fois aussi ?

J'ai tout lu mais un truc reste flou sur le :
<!ATTLIST chapter num ID #REQUIRED visible (true | false) 'true'>


Le 'true à la fin je vois pas a quoi il sert vu qu'il y a déja true|false en choix sans occurence ?
Ducoup j'ai fait ça :
<chapter id="toto" visible='true'>


Merci Smiley smile
Exact; *, cela veut dire autant de fois qu'on le souhaite... de zéro à la capacité du disque dur Smiley cligne

Reprenons la ligne qui t'enquiquine:

<!ATTLIST chapter num ID #REQUIRED visible (true | false) 'true'>


Cela signifie que l'on définit l'attribut "num" de l'élément "chapter". Cet attribut est de type ID, autrement dit on ne peut trouver qu'une seule fois num="une_chaîne_de_caractères_donnée" dans tdon document. Il est "#REQUIRED", autrement dit obligatoire.

D'autre part, on définit ensuite un attribut "visible" de l'élément "chapter". Cet attribut peut prendre les valeurs "true" ou "false". Par défaut (c'est-à-dire quand il n'est pas présent dans l'élément), on considère qu'il vaut "true" (comme par exemple l'attribut align d'un élément <p> en HTML: par défaut il vaut "left").

Donc ce que tu as écrit est correct, mais est rigoureusement équivalent à

<chapter id="toto">
Salut Gilles,
Merci pour tout. Excellent.
Une precision : en aucun cas je dois avoir de :
<chapter num="ch1">

C'est automatiquement une id que je dois avoir (vu la DTD)?
Et je peux aussi toujours avoir des chapter sans id ?

Autre chose, j'ai Oxygen comme editeur et quand je valide ce code en interne , il me dit que c'est pas well-formed...J'arrive pas à le faire afficher dans un browser non plus. Il m'indique une erreur ligne 2 colonne 6...
C'est l'appel de l'xsl, que j'ai recopié tel quel que dans mon cours...
<?xml version='1.0'?>
<?xml:stylesheet type="text/xsl" href="XmlDocument1.xsl"?>
<menuhebdo>

<menu jour="lundi">
<entree>riz froid</entree>
<plat>frites steak</plat>
<dessert>fraises</dessert>
<extra>snickers</extra>
</menu>

<menu jour="mardi">
<entree>pates froides</entree>
<plat>bouchees a la reine</plat>
<dessert>glace a la poire</dessert>
<extra>extra surprise</extra>
</menu>

<menu jour="mercredi">
<entree>semoule</entree>
<plat>super devian des familles</plat>
<dessert>pas de dessert ce jour</dessert>
<extra>Xtra fresh</extra>
</menu>

<menu jour="jeudi">
<entree>guest</entree>
<plat>diet</plat>
<dessert>yo guy</dessert>
<extra>poirot a la courgette</extra>
</menu>

<menu jour="vendredi">
<entree>Poipiotte de legumette</entree>
<plat>taffiote de demer</plat>
<dessert>dessertissimo</dessert>
<extra>pianissimo</extra>
</menu>

<menu jour="samedi">
<entree>semoule</entree>
<plat>super devian des familles</plat>
<dessert>pas de dessert ce jour</dessert>
<extra>Xtra fresh</extra>
</menu>

<menu jour="dimanche">
<entree>semoule</entree>
<plat>super devian des familles</plat>
<dessert>pas de dessert ce jour</dessert>
<extra>Xtra fresh</extra>
</menu>

</menuhebdo>



Modifié par Hum (08 Mar 2006 - 15:32)
Hum a écrit :
Salut Gilles,
Merci pour tout. Excellent.
Une precision : en aucun cas je dois avoir de :
<chapter num="ch1">

C'est automatiquement une id que je dois avoir (vu la DTD)?


Oui. Mais cela n'empêche pas d'avoir num="ch1". Cela siginifie simplement que tu ne peux pas avoir deux attributs ayant été définis de type ID, et possédant la même valeur dans ton document/

a écrit :

Et je peux aussi toujours avoir des chapter sans id ?

Non. Tel qu'il est défini dans la DTD, l'attribut num est obligatoire.

a écrit :

Autre chose, j'ai Oxygen comme editeur et quand je valide ce code en interne , il me dit que c'est pas well-formed...J'arrive pas à le faire afficher dans un browser non plus. Il m'indique une erreur ligne 2 colonne 6...
C'est l'appel de l'xsl, que j'ai recopié tel quel que dans mon cours...
<?xml version='1.0'?>
<?xml:stylesheet type="text/xsl" href="XmlDocument1.xsl"?>
(...)


Il faut écrire un tiret et non pas deux points :

<?xml-stylesheet type="text/xsl" href="XmlDocument1.xsl"?>
Bien. Encore merci a toi.
Compris.
Mais il me trouve quand meme des erreurs ds le xsl (sur le =) :
<TD><strong><xsl:value-of-select="Entrée"/></strong></TD>
---------------------------------------^



Le XSL au complet :
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
<xsl:template match="/">                      
 <HTML>
        <xsl:aplly-templates/>
 </HTML>
</xsl:template>     
 
 <xsl:template match="menuhebdo">                
        
        <HEAD>  
        </HEAD>
            <BODY>
                
<CENTER><H2>Menu du restaurant la semaine</H2></CENTER>
 
 <CENTER>
 <TABLE border="1">
                    
                    <tr><td></td>
                           <td>Entrée</td>
                           <td>Plat</td>
                           <td>Fromage</td>
                           <td>Dessert</td>
                          <td>Extra</td>
                    </tr>
     
<xsl:for-each select="menu[@jour]">             
             <TR>
             <TD><strong><xsl:value-of-select="Entrée"/></strong></TD>
             <TD><strong><xsl:value-of-select="Plat"/></strong></TD>
             <TD><strong><xsl:value-of-select="Fromage"/></strong></TD>
             <TD><strong><xsl:value-of-select="Dessert"/></strong></TD>
             <TD><strong><xsl:value-of-select="Extra"/></strong></TD>
             </TR>
</xsl:for-each >
     
 </TABLE>
 </CENTER>                                     
</BODY>   
    
  </xsl:stylesheet>




Modifié par Hum (08 Mar 2006 - 16:43)
Hum a écrit :
Bien. Encore merci a toi.
Compris.
Mais il me trouve quand meme des erreurs ds le xsl (sur le =) :
<TD><strong><xsl:value-of-select="Entrée"/></strong></TD>
---------------------------------------^


(...)


L'élément est en fait <xsl:value-of select="Entrée" />. select est un attribut...

Petit à petit, l'oiseau fait son nid Smiley cligne
Super. Pour l'oiseau t'est dans le vrai....
Plus qu'une pauvre brindille alors :
Tout à l'air ok, mais quand ds Firefox je veux ouvrir mon xml j'ai :

 Erreur lors de la transformation XLST : Échec de transformation XSLT.


Merci !
Modifié par Hum (08 Mar 2006 - 18:06)
Je viens de survoler le code que tu as mis, et j'ai noté un <xsl:aplly-templates/> qui ne peut pas être bon: c'est <xsl:apply-templates/> qu'il faut utiliser. Si sous oxygen tu configures un scénario de transformation sur ton fichier XML en te servant de ta feuille XSL, que se passe-t-il?
Salut Gilles !

Bien vu. A trop brasser dans du code qu'on connait pas on n'y vois plus rien...
Ben ...je ne configure rien, je fais juste un appel de la feuille de style comme ça :
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="XmlDocument1.xsl"?>
    


Mais avec la correction que tu viens de m'indiquer, ça fonctionne !
Ya plein d'autres soucis mais au moins ça fonctionne.
Je me replonge dedans et met ce post en [RESOLU].
Merci beaucoup Gilles ! Smiley smile