XML, XSL et les XSD sont des langages très pratiques et standardisés pour manipuler des données arborescentes, mais ils recèlent parfois quelques pièges et doivent être bien compris pour déployer toute leur puissance.

Le langage

Attributs booléens

Un attribut booléen est un attribut dont la seule présence signifie quelque chose, par exemple required. Si HTML est souple là-dessus, XML est très strict: un attribut booléen ne peut avoir comme valeur que le nom de l’attribut. C’est pour cette raison que je vous encourage à toujours écrire ces attributs sous la forme

required="required"
, même en HTML.

Attributs utiles

xml:base indique l’URI de base du document et de tous ses enfants. xml:space indique s’il faut conserver les espaces et tabulations (preserve) ou non (default). xml:lang indique la langue humaine dans laquelle le document est rédigé. Enfin, xml:standalone indique au parser d’ignorer toute éventuelle DTD (Document Type Definition, l’ancêtre de la XSD). Il existe évidemment d’autres attributs plus exotiques pour XML, mais ils sont moins intéressants que ces quatre-là.

XSD

Une XSD, pour XML Schema Definition, est un document au format XML (namespace xs:schema xmlns:xs="https://www.w3.org/2001/XMLSchema") dont le but est de définir la structure d’un autre document XML. On peut alors vérifier que ledit document XML respecte bien les règles définies par sa XSD. On dit alors qu’il est “valide”. Un énorme avantage des XSD est d’être interprétable par NetBeans: si vous indiquez que le fichier XML que vous éditez doit respecter une certaine XSD (via

xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=".../fichier.xsd"
sur le root node du XML), alors NetBeans vous fournira automatiquement l’auto-complétion associé à cette XSD pour votre document XML! Votre développement en sera grandement facilité.

Liste de XSD utiles
LangageNamespaceLien interne
(x)HTML 5https://www.w3.org/1999/xhtmlHTML 5
XLinkhttps://www.w3.org/1999/xlinkXLink
XSLhttps://www.w3.org/1999/XSL/TransformXSLT 2
SVGhttps://www.w3.org/2000/svgSVG

XSL

XSL permet de générer un autre document (souvent texte ou XML) à partir d’un document XML (ou plusieurs, en les chargeant via document(...)/my/xpath/@expression). Il s’agit donc d’un langage de template, qui peut servir à transformer le XML (d’une requête AJAX ou d’un appel de base de données) en un code HTML. La transformation est faisable côté serveur (dans un PHP par exemple) ou peut être laissée à la charge du navigateur (il suffit d’insérer <?xml-stylesheet type="text/xsl" href="fichier.xsl"?> au début du fichier XML, juste après la déclaration <xml version=... et avant le root node du XML). Néanmoins, les moteurs de recherche n’appliquent pas la transformation XSL: ils ne verront donc que votre document XML, et auront du mal à le comprendre (votre positionnement SEO va s’effondrer!). De plus, Webkit a quelques problèmes avec XSL+CORS. Evidemment, si vous exécutez cette transformation côté serveur, le problème disparait, mais vous passez à côté d’un autre atout du XSL: laisser le navigateur l’appliquer vous permet de servir différents XSL en fonction de la langue de l’utilisateur, ce qui vous permet de localiser finement votre jeu web (par exemple, en gérant correctement les accords pluriels), mais cela n’est pas forcément utile .

XMLLint

L’utilitaire XMLLint permet de manipuler du XML en ligne de commande. Il offre la possibilité de valider des documents via une XSD (attention toutefois aux XSD un peu complexes: par exemple, un xs:group ne peut être que le dernier élément d’un xs:choice) ou d’en extraire des morceaux via une XPath.

MathML

Basé sur XML, le langage MathML permet de créer des formules mathématiques complexes et poussées, en utilisant un balisage normalisé: si vous avez besoin d’afficher des formules dans votre guide de jeu ou même directement dans votre jeu web, alors écrivez-les en MathML. Le navigateur sera capable de les interpréter, et de dessiner proprement votre formule, même si celle-ci fait intervenir des intégrales, des dérivées, des matrices, etc. Ce langage est donc très puissant, mais également… très verbeux !

p prime f ( p ) = t > 1 f ( t ) d π ( t )
<math display="block">
<mrow>
	<munder>
	<mo>∑</mo>
	<mrow>
		<mi>p</mi>
		<mtext> prime</mtext>
	</mrow>
	</munder>
	<mi>f</mi>
	<mo stretchy="false">(</mo>
	<mi>p</mi>
	<mo stretchy="false">)</mo>
	<mo>=</mo>
	<msub>
	<mo stretchy="false">∫</mo>
	<mrow>
		<mi>t</mi>
		<mo>&gt;</mo>
		<mn>1</mn>
	</mrow>
	</msub>
	<mi>f</mi>
	<mo stretchy="false">(</mo>
	<mi>t</mi>
	<mo stretchy="false">)</mo>
	<mspace width="thinmathspace"></mspace>
	<mi>d</mi>
	<mi>π</mi>
	<mo stretchy="false">(</mo>
	<mi>t</mi>
	<mo stretchy="false">)</mo>
</mrow>
</math>
Un exemple de formule écrite en MathML, et son interprétation par votre navigateur.