XML + XSLT e accessibilità

Nell’ambito di una commessa con un ente pubblico, mi è capitato di dover spiegare al cliente che una parte del suo sito non rispettava le norme vigenti in materia di accessibilità in quanto realizzata con XML + XSLT. I requisiti tecnici della legge “Stanca” non lasciavano spazio alle interpretazioni: elencavano i DTD accettati e di XML c’era solamente XHTML 1.0, che è di fatto l’unico “dialetto” XML utilizzato per la realizzazione di siti web (lasciamo perdere SVG che ha un ambito di applicazione decisamente diverso).

La parte di sito XML in questione è stata realizzata da una ditta che si dice “certificata” per le PPAA (che cosa voglia esattamente dire non mi è del tutto chiaro) e tramite un foglio di stile l’XML viene trasformato in HTML, il risultato finale è una pagina che, a parte banali problemi di contrasto colore e padding che ne minano comunque l’accessibilità, appare come una normale pagina HTML. Ora il cliente mi chiede i riferimenti normativi che negano la possibilità di usare XML (a meno che non sia XHTML) in un sito accessibile. Le WCAG non negano esplicitamente l’uso di XML. Del resto non negano neanche l’uso di una miriade di altri formati e dialetti, derivati o meno da SGML, per esempio non c’è scritto da nessuna parte che non posso fare una pagina web in JSON o YAML… Non c’è neanche un elenco positivo di formati accettati. L’impressione è che non si siano neanche posti il problema: i DTD accettati sono elencati nel documento del 2002: http://www.w3.org/QA/2002/04/valid-dtd-list.html. Anche se in questo caso la domanda che il cliente mi pone potrebbe essere allargata a dove sta scritto che una pagina web accessibile deve essere creata usando HTML o XHTML? L’unico reperto quasi archeologico riguardante l’accessibilità e l’XML è del 2003: http://www.w3.org/TR/xag, si tratta di una bozza, mai terminata e mai finalizzata.

I validatori alla riscossa

Niente paura: i validatori automatici possono emettere il verdetto! Purtroppo non c’è niente di più falso: i validatori sintattici digeriscono allegramente XML e (se conforme al DTD) escono senza errori, quello che non mi aspettavo è invece che i validatori per l’accessibilità, a partire dal capostipite AChecker fino al nostrano Vamolà, non solo non si rifiutano di valutare XML ma se ne escono tutti verdi dalla gioia senza intercettare neanche gli errori più macroscopici presenti nella pagina HTML trasformata, evidentemente la trasformazione non la eseguono neanche. Del resto, avendo a che fare con i validatori da tanti anni, non posso ignorare  che sono strumenti molto utili quanto imperfetti, non per imperizia dei loro creatori ma per l’intrinseca difficoltà di valutare documenti non strutturati nel marasma sintattico che domina il web.

Provare per credere

Questo è comunque il genere di cose che esige una dimostrazione pratica. Ho quindi creato tre documenti: L’XML di partenza:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<pagina>
<titolo>TEST</titolo>
</pagina>
Lo stilesheet di trasformazione:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
<xsl:output method="html" version="1.0" indent="yes"/>
<xsl:template match="/">
<html>
<style type="text/css" media="all">
h1 {
color: #eee;
}
</style>
<head>
<title>XML XSL TEST</title>
</head>
<body width='100%' style="background-color:#fff">
<h1><xsl:value-of select="pagina/titolo"></xsl:value-of></h1>
<p>Qui sopra c'è un titolo poco accessibile, lo vedi?</p>
<p>Questo è l'output di una trasformazione XML XSLT, nessun validatore automatico di 
accessibilità è in grado di analizzare XML, non vengono rilevati neanche i più banali errori.</p>
<p>Altro esempio: la seguente immagine è priva di attributo ALT:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhE...RU5ErkJggg==" />
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
… e l’HTML risultante:
<html xmlns:php="http://php.net/xsl"><head><style type="text/css" media="all">
h1 {
color: #eee;
}
</style>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>XML XSL TEST</title>
</head>
<body width="100%" style="background-color:#fff">
<h1>TEST</h1>
<p>Qui sopra c'è un titolo poco accessibile, lo vedi?</p>
<p>Questo è l'output di una trasformazione XML XSLT, nessun validatore automatico
 di accessibilità è in grado di analizzare XML, non vengono rilevati neanche i più banali errori.</p>
<p>Altro esempio: la seguente immagine è priva di attributo ALT:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...kJggg=="></p>

</body></html>
  Il tutto è visibile qui: L’XML e l’HTML appaiono uguali, vero? Diamoli in pasto a Vamolà e vediamo cosa succede (per controllare, basta copiare e incollare il primo e l’ultimo degli indirizzi qui sopra, relativi ai file XML e HTML)…. Mentre l’HTML (peraltro senza DTD) viene correttamente valutato e gli errori vengono individuati, l’XML passa indenne nel validatore e ne esce senza errori.

Conclusione principale

I più comuni validatori automatici di accessibilità non funzionano con XML (sempre che non sia XHTML, ovviamente). Non mi sarebbe mai venuto in mente di controllare, in effetti non mi sarebbe mai venuto in mente che a qualcuno potesse venire in mente, un po’ come a un imbianchino non verrebbe mai in mente di dipingere una parete con il succo d’arancia.

Corollario

Non esistono limiti alla capacità dei clienti di farti perdere tempo.