[PHP] XML adapté au LDVH interactif ?
Bonjour,
Imaginez un livre dont vous êtes le héros [LDVH] (vous vous déplacez de paragraphe en paragraphe à l'aide de numéros).
Prenons un exemple :
Vous pianotez tranquillement sur votre clavier quand soudain un message d'alerte s'annonce :
Vous vous cachez sous la table, allez au 5
Vous ne souhaitez pas lire le message d'erreur, allez au 7
Vous prenez le temps de comprendre, allez au 10
Transformons le tout en XML :
Une structure possible pourrait être :
Code:
1 2 3 4 5 6
| <station id="1">
<text> Vous pianotez tranquillement sur votre clavier quand soudain un message d'alerte s'annonce : </text>
<choice station="5"> Vous vous cachez sous la table </choice>
<choice station="7">Vous ne souhaitez pas lire le message d'erreur</choice>
<choice station="10"> Vous prenez le temps de comprendre </choice>
</station> |
Je m'inspire ici de QML(Quest Markup Language).
Le XML semble parfait, sauf que imaginons que le mot clavier doive être réactif (un lien sur le mot clavier va faire apparaître une image… Un clavier trafiqué !) Passons… Le "text" devient :
Code:
<text> Vous pianotez tranquillement sur votre <choice station="8">clavier</choice> quand soudain un message d'alerte s'annonce : </text>
Mais, là, c'est – selon moi – pas terrible. Que faire du texte entre <text> et <choice> et entre </choice> et </text>. C'est du texte, mais pas du "XML" pur, mais du XML "trafiqué". Par exemple, il faudra légérement dévier l'utilisation de simplexml pour arriver à ses fins…
La question :
Est-ce que XML est adapté dans cette situation (pour le web) [Mot en valeur à l'intérieur d'un texte...] ? Si oui, y-a-t-il une meilleure solution ? Si non, que faire ?
Merci pour vos suggestions, Jacques
Défaire des paquets de nœuds
Merci au grand père pour l’aide.
En effet, il y a pas mal d’erreur dans l'exemple (un peu moins dans mon code !)
En grattant un peu (et dormant très peu :( ), j'ai trouvé des choses ! 8-)
Voici l'état actuel du XSL :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <xsl:template match="verse" mode="body">
<xsl:param name="cn" />
<span class="verse">
<xsl:attribute name="name">
<xsl:value-of select="@nb"/>
</xsl:attribute>
</span>
<xsl:apply-templates select=".//keyword|./text()" mode="body"/>
</xsl:template>
<xsl:template match="keyword" mode="body">
<a>
<xsl:attribute name="href">
<xsl:text>monGlossaire/index.php/</xsl:text>
<xsl:value-of select="@entry"/>
</xsl:attribute>
<xsl:value-of select="."/>
</a>
</xsl:template>
<xsl:template match="text()" mode="body">
<xsl:value-of select="." />
</xsl:template> |
Mais effectivement le
<xsl:apply-templates mode="body"/>
et
<xsl:template match="verse/text()"/>
ça fait plus propre...
@ doustij :
On sue un peu au début, mais le xsl vaut le coup pour traiter de l'XML. J'ai différentes sorties à produire à partir un même XML (dont un <mediawiki/> pour alimenter un wiki, un <html/>, un <index/> maison, une sortie sql...). XSL est (assez, jamais suffisamment ) rapide pour produire ces traitements. Et puis on trouve une bonne aide ici ;)
Merci encore et bon courage à doustij.