Documents publiés » Technologies Web »
CardsML
En tout bon Web-geek qui se respecte, j’ai crée une technologie qui va révolutionner le monde - vu que son nom finit en ML
: cardsML.
cardsML est un vocabulaire XML très simple, qui permet de décrire l’état d’un jeu de cartes à un tour donné ; son implémentation actuelle assume qu'il s'agit d’un jeu de 4 joueurs (Nord, Est, Sud, Ouest), utilisant 32 cartes, et se jouant une carte par une carte ; un exemple typique (et admettons-le, pas tout à fait choisi au hasard) serait la contrée.
Si décrire en soi l’état d’un jeu de cartes n’est pas forcément révolutionnaire, le grand bon en avant qu'autorise cardsML est de générer une représentation graphique du dit jeu, pour le plus grand plaisir des illustrateurs de site Web…
Syntaxe
Bien qu'un jour, il se peut que je m’ennuie au point de créer une DTD ou un schéma de validation pour cardsML, le lecteur me pardonnera de ne fournir qu'une description "avec les mains" de la grammaire et du vocabulaire de cardsML, compte tenu de sa grande simplicité.
Un ficher cardsML est un fichier XML, dont l’élément racine est <cards<
dans l’espace de nom http://www.nimbustier.net/2004/09/cardsml
. Cet élément peut contenir zéro, un ou plusieurs éléments hand
- typiquement pas plus de 4 -, et au maximum un élément trick
.
Chaque élément hand
décrit l’état des cartes en main pour chaque joueur, celui-ci étant identifié par l’attribut position
attaché à cet élément, prenant les valeurs de north
, east
, south
ou west
.
Un élément hand
peut contenir zéro, un ou plusieur élements card
; un élément card
décrit une carte par sa valeur donnée dans l’attribut value
(parmi 7…10, jack
,queen
,king
), et sa couleur color
(parmi spades
,hearts
,diamonds
et clubs
).
L’élément trick
décrit les cartes qui viennent d’être jouées, et contient des éléments card
comme décrit ci-dessus, annotés d’un attribut playedBy
qui fait référence au joueur ayant posé la carte et prenant ses valeurs parmi north
, east
, south
et west
.
Un fichier typique en cardsML serait le suivant:
<?xml version="1.0"?>
<cards xmlns="http://www.nimbustier.net/2004/09/cardsml">
<hand position="north">
<card color="spades" value="10"/>
<card color="spades" value="king"/>
<card color="hearts" value="1"/>
<card color="hearts" value="queen"/>
<card color="clubs" value="queen"/>
<card color="clubs" value="9"/>
</hand>
<hand position="east">
<card color="spades" value="8"/>
<card color="hearts" value="king"/>
<card color="diamonds" value="9"/>
<card color="diamonds" value="queen"/>
<card color="clubs" value="1"/>
<card color="clubs" value="king"/>
</hand>
<hand position="south">
<card color="spades" value="9"/>
<card color="hearts" value="10"/>
<card color="hearts" value="jack"/>
<card color="diamonds" value="10"/>
<card color="clubs" value="jack"/>
<card color="clubs" value="7"/>
</hand>
<hand position="west">
<card color="hearts" value="9"/>
<card color="hearts" value="8"/>
<card color="diamonds" value="1"/>
<card color="diamonds" value="8"/>
<card color="clubs" value="10"/>
<card color="clubs" value="8"/>
</hand>
<trick>
<card color="hearts" value="7" playedBy="north"/>
<card color="diamonds" value="jack" playedBy="east"/>
<card color="diamonds" value="king" playedBy="south"/>
<card color="diamonds" value="7" playedBy="west"/>
</trick>
</cards>
Outils
Le principal intérêt de ce maigre langage est la feuille de style XSLT qui l’accompagne, et qui permet de transformer un fichier cardsML en SVG 1.0 (qui lui même peut être utilisé tel quel ou transformer en à peu près nimporte quel format graphique).
Pour ce faire, cette feuille de style utilise les cartes à jouer SVG ; elle utilise par défaut celles copiées sur ce site, mais les utilisateurs sont invités à les installer localement, et à passer le paramètre svgCardsDir
correspondant à la feuille de style.
Résultats
L’exemple donné ci-dessus génère le fichier SVG suivant, qui transformé en PNG donne:
Historique
cardsML a été développé pour satisfaire la requête d’un lecteur des règles de la contrée (en utilisant une autre XSLT pour passer du XHTML à cardsML), mais avant tout pour permettre à l’auteur de jouer avec SVG, XSLT, et pour pouvoir dire "moi aussi, j’ai créé mon langage -ML"…