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:

Exemple d'une table de jeu de cartes généré d'après un fichier cardsML

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"...