El validador XML integrat

Des de que la World Wide Web Consortium va llançar la Web Accessibility Initiative, les problemàtiques de validació XML i d’accessibilitat de la Web pels deficients visuals van convergir. SPIP es va interessar ben aviat pels problemes d’accessibilitat, amb la versió 1.5, el 2002. En canvi, des de fa molt temps ha qüestionat l’XML en consideració a la raresa de les pàgines conformes: l’abundància de pàgines HTML no XHTML fa que els navegadors tinguin el seu propi analitzador, i els llenguatges basats en l’XML, com SVG, MathML i XQuery, han tingut una posada en marxa molt lenta. No obstant, la convergència de les problemàtiques d’accessibilitat i de validació d’una banda, i l’implementació en origen de SVG en diversos navegadors de l’altre, van portar a SPIP, en la seva versió 1.8.1, a oferir una interfície amb eines de validació com Tidy o el validador oficial del W3C. Aquestes eines, com indiquen contínuament les pàgines inicials del seu lloc Web, experimenten algunes limitacions, mostren divergències en els seus missatges d’error, i no són instal·lables per l’internauta mitjà [1] Són a més inoperants respecte a les noves tecnologies com Ajax, que modifiquen de manera incremental el contingut d’una pàgina Web. Més greu encara, els Document Type Definition del W3C tenen també limitacions, fins i tot la DTD XHTML 1.0 dita stricte: mentre que l’especificació oficial prohibeix l’aniuament d’etiquetes a, label o form, la definició formal de la gramàtica descrita considera com a vàlides les construccions <label for='x'><label... o <form action='.'><div><form... per exemple [2].

Enfront d’aquesta situació, SPIP 1.9.2 innova radicalment i proposa un validador extensible, integrat, incremental i opcional, basat en el Simple Analyzer for XML proporcionat en estàndard per PHP. Aquesta pluralitat d’aspectes el destina tant als webmestres com als grafistes i desenvolupadors d’extensions d’SPIP, evidentment amb manipulacions diferents.

Validació pels webmestres

Pels webmestres, posar simplement a dins del fitxer mes_options.php la instrucció $xhtml = 'sax'; provocarà un nou format del codi HTML produït per un esquelet, cada línia tindrà una sola etiqueta d’obertura i com a molt un atribut, amb reforç del marge esquerre proporcional al nombre d’etiquetes d’obertura no tancades. En cas que la pàgina sigui declarada invàlida, aquest treball serà finalment ignorat, i serà el text inicial el que s’enviarà al client HTTP. En els dos casos, la posada en cache eventual tindrà lloc evidentment després de l’acció del validador, que s’acontenta aquí amb una simple configuració de pàgina.

Algunes precisions pel que fa referència al tractament dels atributs. El seu valor serà sistemàticament envoltat d’un apòstrof, excepte si conté un apòstrof; en aquest cas, serà envoltat de cometes (i si també conté cometes, s’escriurà &quot;). A causa d’un error de concepció de SAX [3], les entitats XML seran anticipadament convertides a dins del charset del lloc excepte per &amp; &lt; &gt; i &quot; que són tractades correctament per SAX (ja que això és indispensable). La llista d’entitats i el seu valor es deduiran del DOCTYPE indicat per l’esquelet; a falta d’això SPIP agafarà un conjunt definit prèviament equivalent a la DTD del latin1 enriquit per &euro;, &oelig; i &OElig; definits a la DTD dels símbols especials.

Validació pels grafistes

Pels creadors d’esquelets, el validador es troba disponible a través del depurador introduït a SPIP 1.8. Aquesta eina només és visible pels administradors del lloc, ja que ells disposen de botons d’administració quan visiten les pàgines de l’espai públic. Un d’aquests botons s’anomena Analyse XML i executa explícitament la sol·licitud de validació de la pàgina visitada. Aquesta anàlisi es confiada primer a SAX que, també en absència de DOCTYPE, assenyala:

  • els erronis aniuaments d’etiquetes d’obertura i de tancament;
  • els atributs sense valor;
  • els atributs sense delimitador;
  • els atributs sense espai abans del següent;
  • les entitats XML mal escrites (sobretot un & literal, quan XML imposa escriure &amp;).

Al primer error trobat, el depurador d’SPIP provarà immediatament de trobar de quin esquelet prové l’error (n’hi pot haver diversos en cas d’inclusió) i en quina línia, donant els enllaços cap als fitxers font (aquesta resolució no sempre pot reeixir, es necessari tenir en compte un marge d’error).

Si aquesta primera anàlisi és correcta, aquesta nova versió d’SPIP va més enllà tenint en consideració el DOCTYPE de la pàgina. Pot ser del tipus PUBLIC o SYSTEM, i en el primer cas la DTD es posarà en cache per tal d’accelerar les anàlisis posteriors. Cada DTD en pot incloure altres, que seran carregades de la mateixa manera. Per tal d’evitar les redundàncies de càlcul tot tenint en compte el sistema d’inclusió condicional dels DTD, SPIP posa també en cache una estructura de dades específica que dedueix de la lectura de totes les definicions d’elements, d’atributs i d’entitats que provenen del DOCTYPE indicat. Recolzant-se en aquesta estructura, SPIP valida la pàgina, dit d’una altra manera verifica que:

  • tots els noms d’atributs utilitzats en una etiqueta siguin acceptats per la DTD;
  • tots els atributs obligatoris d’una etiqueta hi siguin presents;
  • tots els valors d’atributs siguin conformes al motiu indicat eventualment a la DTD;
  • tots els atributs del tipus ID tinguin un valor compost de lletres, xifres, subratllat, guionet i dos punts;
  • tots els atributs del tipus IDREF o IDREFS facin referència de les ID realment presents a la pàgina;
  • totes les entitats XML utilitzades estiguin definides a la DTD;
  • tots els noms d’etiquetes utilitzats estiguin definits a la DTD;
  • tota etiqueta no buida estigui autoritzada a ser-ho per la DTD (per exemple un img no buit serà denunciat) ;
  • tota etiqueta buida està autoritzada a ser-ho per la DTD (per exemple un tr buit serà denunciat) ;
  • tota etiqueta utilitzada és filla d’una etiqueta que l’admet com a tal a la DTD;
  • tota etiqueta que ha d’aparèixer abans d’una de les seves germanes aparegui realment d’aquesta manera (per exemple head abans de body)
  • tota etiqueta que tingui d’aparèixer un nombre fix de vegades aparegui realment així (per exemple title només una vegada a head).

Si es detecten errors, el validador mostrarà una taula amb tots els errors, amb el seu número d’ocasions, els enllaços cap a les línies incriminades i suggeriments de correccions deduïdes automàticament a partir de les construccions autoritzades per la DTD. Si no hi ha error, el depurador mostrarà el codi segons la configuració de la pàgina descrita prèviament.

Validació pels desenvolupadors

Les pàgines Web amb accés restringit tenen particular necessitat d’un validador integrat per ser preparades per l’edició, ja que les eines de validació externes no tenen per definició accés a aquestes pàgines. En allò que fa referència als scripts de l’espai de redacció d’SPIP, siguin estàndards o d’aquells que provenen d’extensions, se’ls aplica el validador XML situant $GLOBALS['transformer_xml'] = 'valider_xml'; a dins del fitxer mes_options.php. L’espai privat d’SPIP 1.9.2 s’ha tornat conforme amb XHTML 1.0 gràcies a aquest mecanisme. Canviar aquesta variable global amb 'indenter_xml' provocarà l’indentació de la font HTML, si aquesta és conforme a l’XML, sense buscar validar-la.

També és possible llançar, amb el ratolí, l’anàlisi XML del resultat d’un script Ajax activat a l’espai de redacció. Si aquest script no retorna una pàgina HTML completa sinó només un fragment, el validador integrat fabricarà una pàgina amb el DOCTYPE actual, un encapçalament reduït de l’etiqueta Title, i una etiqueta Body composta d’aquest fragment. S’obrirà una finestra amb el resultat de l’anàlisi, com una pàgina normal, mentre que la finestra inicial rebrà el resultat del script Ajax com habitualment. Per raó d’una especificació del W3C inservible pel que fa al model d’esdeveniments [4], aquest llançament del validador no es fa mitjançant un botó específic del ratolí, sinó per mitjà d’un clic durant el qual cal prémer al menys alguna de les dues tecles Alt o Meta.

Per altra part, el validador d’SPIP es pot aplicar a qualsevol pàgina que es trobi a la Web. Qualsevol lloc SPIP insta·lat al URL http://u conté la pàgina http://uecrire/valider_xml que els autors del lloc poden cridar explícitament per validar pàgines no limitades a la del lloc. No obstant, aquest validador només s’aplica a documents XML; en absència de DOCTYPE, s’agafarà la DTD XHTML1.0 transitionnal.

Tal i com suggereixen les línies que hi ha més amunt, el validador s’aplica a qualsevol DOCTYPE, fins i tot a aquells que fan referència a les DTD residents al lloc Web. Tornar accessibles pàgines Web, és ser més rigorós en l’ús dels atributs i les etiquetes, per tant hom pot fàcilment construir-se una eina de validació d’accessibilitat escrivint les DTD menys permissives que la XHTML 1.0 anomenada stricte. Substituir #IMPLIED per #REQUIRED a dins dels atributs considerats indispensables és immediat. Imposar input, select, textarea i button a ser exclusivament filles de l’etiqueta label no és gaire més difícil. A més, el validador accepta qualsevol motiu (en el sentit de PCRE) com a tipus d’atribut, per tant s’aplicarà a cada ocurrència d’aquest atribut a la pàgina analitzada.

Finalment, és possible definir les pròpies regles de validació associades a un atribut. Els tipus habituals ID, IDREF et IDREFS són implementats per les funcions validerAttribut_ID, validerAttribut_IDREF, validerAttribut_IDREFS. N’hi ha prou introduint de nou tipus S1 ... Sn a la DTD, i definint les funcions associades a dins del fitxer mes_options per provocar controls personalitzats. Al final de l’anàlisi, es cridarà la funció recarregable inc_valider_passe2, per tal d’efectuar els controls retrospectius (és aquí on els atributs IDREF són verificats com referents dels atributs efectivament presents). Aquesta interfície de programació té encara algunes deficiències i es revisarà després de la seva experimentació. Però permet des d’ara posar en marxa més ràpidament noves especificacions d’accessibilitat.

Notes

[1El validador del W3C es presenta en forma d’un arxiu de més d’1MB, comportant essencialment un script CGI en Perl, necessitant diversos mòduls d’aquest llenguatge i la seva interfície amb el servidor HTTP. A més, l’anàlisi sintàctic i la validació no es fan amb aquest programa, sinó que ho deleguen a l’analitzador onsgmls programat en C++ i que necessita, per tant, ser compilat després de carregar les fonts del projecte OpenSP igualment d’1MB (no obstant, alguns sistemes d’explotació inclouen ja el consegüent executable de 128kB). Aquesta dificultat explica, sens dubte, la raresa de les seves instal·lacions, que amb freqüència es troben saturades.

[2Aquesta deficiència està justificada per aquest pas de la recomanació XHTML que afirma: The HTML 4 Strict DTD forbids the nesting of an ’a’ element within another ’a’ element to any descendant depth. It is not possible to spell out such prohibitions in XML. Aquesta afirmació no està recolzada per cap demostració o referència científica. Els teoremes que estableixen els poders de l’anàlisi sintàctic automàtic han estat anunciats i demostrats ja als anys 50, i contradiuen aquesta afirmació. W3C, go to school?

[3A l’encontre del que ell considera com un lexema, SAX crida un prenedor d’esdeveniments. Donat que considera els atributs com a lexemes, provocarà la mateixa seqüència de crida pels 3 texts següents:

&eolig;&EOlig;<a ...


&eolig;<a title='&EOlig;' ...


<a title='&eolig;' href='&EOlig;' ....


Per tant, el prenedor d’esdeveniments Entité XML no sabrà si l’entitat que el crida forma part de l’element del text que precedeix la pròxima etiqueta, o si forma part d’un dels atributs d’aquesta etiqueta, i quin. L’ambigüitat tampoc es pot resoldre amb l’ajuda de números de línia i de columna (o de caràcter del flux), que en tots els casos indiquen l’emplaçament que precedeix l’etiqueta.

[4Mentre que el sistema de funcionament més generalitzat al món segueix per un cop sàviament les lliçons d’Unix i més concretament de X-Window, representant un botó de ratolí amb una màscara de bits, el W3C ha cregut més adient produir una especificació incompatible i mal ideada, que no segueix pràcticament cap navegador.

Autor merce Publié le : Mis à jour : 26/10/12

Traductions : عربي, català, English, Español, français, italiano