# Validació XML

La Validació XML (eXtensible Markup Language) és la comprovació que un document en llenguatge XML està ben format i s'ajusta a una estructura definida. Un document ben format segueix les regles bàsiques de XML establertes per al disseny de fitxers. Un document vàlid, a més, respecta les normes dictades per la seva DTD o esquema utilitzat. A més, les eines estan disponibles esteses com a OASIS i CAM, especificació estàndard que proporciona una validació contextual del contingut i l'estructura que és més flexible que no pas l'esquema de validació de base.
Per exemple 'xmllint' és una eina de línia d'ordres XML que pot realitzar la validació XML. Es pot trobar en entorns UNIX / Linux. Un exemple amb l'ús d'aquest programa per a la validació d'un arxiu anomenat example.xml és 'xmllint --valid --noout example.xml '

## Introducció

En primer lloc, els documents XML s'han de basar en la sintaxi definida en l'especificació XML per ser correctes (documents ben formats). Aquesta sintaxi imposa coses com la coincidència de majúscules/minúscules en els noms d'etiqueta, cometes obligatòries per als valors d'atribut, etc. Tanmateix, per a tenir un control més precís sobre el contingut dels documents és necessari un procés d'anàlisi més exhaustiu.
La validació és la part més important dins d'aquesta anàlisi, ja que determina si un document creat se cenyeix a les restriccions descrites en l'esquema utilitzat per a la seva construcció. Controlar el disseny de documents a través d'esquemes augmenta el seu grau de fiabilitat, consistència i precisió, facilitant l'intercanvi entre aplicacions i usuaris. Quan creem documents XML vàlids augmentem la seva funcionalitat i utilitat.

## Necessitat de Validació

La validació s'encarrega de verificar:
   * La correcció de les dades: encara que validar contra un esquema no garanteix al 100% que les dades són correctes, ens permet detectar formats nuls o valors fora de rang i, per tant, incorrectes.
   * La integritat de les dades: en validar, es comprova que tota la informació obligatòria està present al document.
   * L'enteniment compartit de les dades: a través de la validació es comprova que l'emissor i receptor perceben el document de la mateixa manera, que ho interpreten igual.
L'èxit de la validació dependrà de factors com a:
   * On s'originen els documents: si són fonts confiables o no.
   * Qui els crea: si són creats per una aplicació automàticament o per un usuari de forma manual. (veure Eines)
   * Qui els manipula: també és possible introduir errors involuntàriament durant la manipulació de les dades i documents.
   * La qualitat de les dades: si els documents es generen directament d'una base de dades d'herència, poden no estar complets o correctes al 100%.
   * El rendiment: el processament no és immediat, necessita el seu temps. Si el rendiment és crític, es poden aplicar diverses alternatives per reduir el cost computacional, com limitar la validació a alguns aspectes o crear un codi específic per a l'aplicació particular que l'utilitza i s'executi de forma més eficaç. (veure Processament)

## Tipus de documents
### Document Ben Format

El llenguatge estàndard XML especifica unes normes bàsiques de sintaxi, a complir per tots aquells documents amb intenció de denominar-se XML. Les característiques bàsiques exigides són:
   * Incloure una declaració XML : proporciona fins tres informacions clau sobre el document que la conté:
      * Informació de la versió XML (obligatòria): la versió més utilitzada és 1.0, encara que ja està disponible la versió 1.1 de l'XML.
      * Codificació de caràcters utilitzada (opcional): fa referència a la manera en la qual es representen internament els caràcters, normalment UTF-8 o UTF-16.
      * Declaració independent (opcional): indica al processador l'XML si un document és independent (standalone="no) o es basa en informació de fonts externes, és a dir, si depèn de declaracions de marca externes com una DTD externa (standalone="yes).
       Exemple:
       <?xml version="1.0" encoding="UTF-8" standalone="no"?>
   * Només existeix un únic element arrel per a cada document: és un sol element en el qual tots els altres elements i continguts es troben niats i correctament tancats. Es basa en una estructura jeràrquica i la seva funció és la mateixa que l'element arrel d'un document HTML <HTML>Contingut</HTML>
   * Totes les entitats utilitzades a l'interior es declaren la DTD interna.
   * Tots els elements, atributs i entitats que s'utilitzen han d'escriure's amb una sintaxi correcta: No hem d'oblidar que:
      * Tots els elements han d'estar delimitats per una etiqueta inicial i una final amb el mateix nom. <element></element>
      * Els valors dels atributs en XML han d'anar entre cometes simples o dobles.
      * Els elements buits han d'acabar amb '/' (autotancament) o afegint una etiqueta de fi, no poden haver etiquetes aïllades.
      * XML és sensible a majúscules i minúscules i els noms de les etiquetes poden ser alfanumérics, però sempre començant per una lletra.
       Exemple:
És possible treballar amb documents no associats a cap DTD i que en conseqüència mai no podran ser validats. En aquest cas, els documents només hauran d'estar ben formats, encara que sempre necessitaran la definició interna de les entitats utilitzades.

### Document Vàlid

Són aquells documents que a més d'estar ben formats, compleixen les especificacions de la DTD (Document Type Definition) i segueixen les pautes marcades pels seus models de contingut. No hi ha esquemes de documents idèntics, per això és difícil concretar les regles que han de complir.
Perquè un document XML també sigui vàlid, durant el procés de validació es comprova:
   * Quins elements o atributs es permeten en un document del tipus definit en l'esquema.
   * L'estructura dels elements i atributs (elements niats, atributs obligatoris o opcionals, etc.)
   * L'ordre dels elements.
   * Els valors de les dades d'atributs i elements (segons enumeracions, rangs de valors delimitats, tipus de dada correcta (p. ex. format correcte d'una data, utilitzar un enter per expressar un nombre), etc.
   * La unicitat de valors dins d'un document (pàg. ex. Referències de productes que no poden repetir-se).
Exemple que compleix les especificacions de DTD:
* Exemple.xml
* <?xml version="1.0" encoding="UTF-8" standalone="no"?>
* <!DOCTYPE nota SYSTEM "NotaInterna.dtd">
* <nota importancia="alta">
* <remitent>Miquel</remitent>
* <destinatari>Jordi</destinatari>
* <títol>Recordatori</títol>
* <missatge>Recull-me aquest cap de setmana</missatge>
* </nota>
* NotaInterna.dtd
* <?xml encoding="UTF-8"?>
* <!ELEMENT nota (remitent, destinatari, títol, missatge?)>
* <!ATTLIST nota importancia (alta|normal) normal)>
* <!ELEMENT remitent (#PCDATA)>
* <!ELEMENT destinatari (#PCDATA)>
* <!ELEMENT títol (#PCDATA)>
* <!ELEMENT missatge (#PCDATA)>

## Mètodes de validació

Existeixen diversos mètodes per validar els documents XML. Els mètodes més usats són el DTD d'XML versió 1.0, el XML Schema de W3C, RELAX NG d'Oasi i Schematron de l'Acadèmia Sinica Compuntig Centre.

### Ús de DTD

La DTD és el format d'esquema natiu (i el més antic) per validar documents XML, heretat de SGML. Utilitza una sintaxi no-XML per definir l'estructura o model de contingut d'un document XML vàlid:
   * Defineix tots els elements.
   * Defineix les relacions entre els diferents elements.
   * Proporciona informació addicional que pot ser inclosa al document (atributs, entitats, notacions).
   * Aporta comentaris i instruccions per al seu processament i representació dels formats de dades.
És el mètode més senzill usat per validar, i per aquesta raó presenta diverses limitacions, ja que no suporta noves ampliacions de l'XML i no és capaç de descriure certs aspectes formals d'un document a nivell expressiu.
Les DTD poden ser internes o externes a un document XML, o ambdues coses alhora.

### Ús de XML Schema

XML Schema és l'evolució de la DTD descrita pel W3C, també anomenat de forma més informal XSD (XML Schema Definition). És un llenguatge d'esquema més complex i més potent, basat en la gramàtica per proporcionar una potència expressiva major que la DTD. Utilitza sintaxi XML, cosa que li permet especificar de forma més detallada un extens sistema de tipus de dades. A diferència de les DTDs, suporta l'extensió del document sense problemes.
A l'hora de validar, la utilització de XSD suposa un gran consum en recursos i temps a causa de la seva gran especificació i complexitat en la sintaxi (esquemes més difícils de llegir i escriure). Després de validar el document amb XML Schema, és possible expressar la seva estructura i contingut en termes del model de dades usat per l'esquema de validació. Aquesta funcionalitat, coneguda com a postSchema-Validation Infoset (PSVI), es pot utilitzar per transformar el document en una jerarquia d'objectes, als quals es pot accedir a través d'un llenguatge de programació orientat a objectes (OOP). El model de dades d'XML Schema inclou:
   * el vocabulari (noms d'element i atribut)
   * el contingut model (relacions i estructura)
   * i tipus de dades.

### Ús de RELAX NG

RELAX NG és també un llenguatge d'esquema basat en la gramàtica, molt intuïtiu i més fàcil d'entendre que l'XML Schema. D'allà la seva popularitat. Té un alt poder expressiu, per exemple permet validar elements intercalats que poden aparèixer en qualsevol ordre.
Les aplicacions de definició de documents i validació per a RELAX NG són més senzilles que a XML Schema, fent-ho més fàcil d'utilitzar i implementar. També té la capacitat d'usar plug-ins de definicions de tipus de dada d'XML Schema, combinant així els avantatges d'ambdós llenguatges. RELAX NG s'ha convertit recentment en un estàndard ISO com la part 2 de DSDL (Document Schema Definition Language).

### Ús de Schematron

Schematron, a diferència dels anteriors llenguatges, es basa en afirmacions en comptes d'en la gramàtica. En basar-se en una sèrie de regles, utilitza expressions d'accés en lloc de gramaticals per definir el que es permet en un document l'XML. Si el document compleix aquestes regles, llavors és vàlid.
Aquest mètode de validació aporta una gran flexibilitat en la descripció d'estructures relacionals. En canvi, és un llenguatge molt limitat a l'hora d'especificar l'estructura bàsica del document, problema que se soluciona combinant Schematron amb altres llenguatges d'esquema.
Junt amb RELAX NG, Schematron s'està estandarditzant com a part del DSDL de ISO.

## Eines

La creació manual de documents XML i fins i tot la seva manipulació poden introduir tot tipus d'errors, tipogràfics, sintàctics i de contingut. Existeixen editors de l'XML que faciliten la tasca de crear documents vàlids i ben formats, ja que poden advertir dels errors bàsics comesos i fins i tot escriure automàticament la sintaxi més senzilla necessària.
Quan necessitem obtenir un document vàlid, l'editor XML ha de ser capaç de:
   * Llegir la DTD del document i presentar-li una llista desplegable amb els elements disponibles enumerats en la DTD, evitant així la inclusió d'algun element no definit en l'esquema.
   * Advertir l'oblit d'una etiqueta obligatòria i fins i tot no permetre aquest tipus de distraccions, no donant per finalitzat el document si existeixen errors d'aquest tipus.
Editors:
* XML Pro de Vervet Logic (diuen que la llicència és open source perquè deixen veure el codi font però la web concreta poc i la llicència inclosa a l'arxiu que et pots baixar no compleix la definició de programari lliure de la FSF, ni la de l'OSI, ni les DFSG, no ofereix les mateixes possibilitats a diferents usuaris, no permet la còpia, la modificació, la redistribució ni l'ús en múltiples ordinadors)
* XMLSpy de Altova
* <oXigen/> XML Editor
* Turbo XML Arxivat 2006-11-11 a Wayback Machine. de TIBCO (Plataforma de desenvolupament integrat d'XML)
* XML Notepad de Microsoft
* XMLwriter Arxivat 2006-11-10 a Wayback Machine. de Wattle Software
* Web Tools Platform del projecte Eclipse. Eclipse és un entorn integrat de desenvolupament, típicament utilitzat per programació Java o C++ però inclou extensions per editar XML, XSD, etc. Pinta la sintaxi, suggereix elements vàlids en cada punt, mostra les anotacions de documentació de l'XSD com a ajudes contextuals, valida documents, etc. Eclipse i WTP són lliures tot i que hi ha altres extensions privatives. Funciona amb GCJ, openJDK, o altres jvm. Potser és molt gran per usar-lo només com a editor XML, però té força funcionalitats.

## Processament

Els documents XML es processen a través d'analitzadors, aplicacions que llegeixen el document, ho interpreten i generen una sortida basada en els seus continguts i en la marca utilitzada per a la seva descripció. El resultat es mostra en un dispositiu de visualització, com una finestra de navegació o una impressora. Els processadors fan possible la presentació i distribució de documents XML.
Aquests analitzadors poden tenir o no la capacitat de validar: tots els analitzadors comproven que els documents XML estiguin bé formats, però sol els analitzadors validants poden efectuar la validació. Els analitzadors no validants processen a major velocitat, ja que no han de comprovar tants detalls com els validants.
Gairebé tots els processadors de XML són capaços de validar amb un esquema basat en DTD. Si el document viola alguna de les regles de seu DTD, l'analitzador advertirà de l'error i el procés del document es detindrà. Un bon processador validante no sol informarà la presència d'un error, sinó que elaborarà un missatge especificant quina ha estat la seva causa. També existeix el processador Xerces de Apatxe que, a més de ser el més complet parser de l'XML, inclou suport de XML Schema.
Habitualment, s'usa un analitzador validant per comprovar la correcció dels documents, i un no validant per a la seva presentació. Una vegada que se sap que un document és vàlid, no hi ha cap motiu per comprovar la seva validesa cada vegada que es processi (optimitzant així el temps del procés).
Processadors:
* Xerces de Apache (open source) és un dels més complets parsers de XML i inclou soport de XML Schema.
* XMLValidate Arxivat 2007-03-11 a Wayback Machine. de TIBCO
* XMLSpy de Altova
* MSXML Parser de Microsoft
* DocZilla de CiTEC (basat en Mozilla)
* Stylus Studio XML (Plataforma IDE)
* Expat XML Parser

## Enllaços externs

* Introducció al llenguatge XML Arxivat 2006-12-07 a Wayback Machine.
* Estructura d'un document XML Arxivat 2006-05-11 a Wayback Machine.