2. Validación¶
En la primera parte de la unidad anterior introdujimos el concepto de validez e hicimos la distinción entre un documento bien formado (ajustado a las reglas gramaticales generales) y un documento válido (ajustado a las reglas gramaticales específicas). La segunda parte de la unidad citada nos enseñó cuáles eran las reglas generales de algunas lenguajes y nos permitió escribir documentos y comprobar que estaban bien formados. Para ello usamos "validadores" (jsonlint, xamllint, etc.), que no eran tales, pues sólo informaban de si el documento estaba bien formado.
En esta unidad aprenderemos cómo definir gramáticas específicas y usar auténticos validadores que comprueban si el documento las cumple, esto es, si son (además de bien formados) válidos. Entiéndase:
Si ha realizado los ejercicios propuestos de la unidad anterior, ya habrá diseñado bastantes documentos para intercambiar información a partir de unas especificaciones dadas. Sin embargo, aún no tiene medios para saber que el documento de ejemplo que ha escrito se ajusta a la gramática mental que ha desarrollado en su cabeza para cumplir tales especificaciones. Por ejemplo, la solución XML del primer ejercicio resuelto era esta:
Primer ejercicio resuelto
<?xml version="1.0" encoding="UTF-8"?>
<recetas>
<!-- El tiempo está en minutos -->
<receta id="r01" nombre="ensalada" preparacion="5">
<ingrediente nombre="tomate" unidad="pieza" cantidad="2" />
<ingrediente nombre="cebolla" unidad="pieza" cantidad=".25" />
<ingrediente nombre="lechuga" unidad="gramo" cantidad="150" />
<ingrediente nombre="sal" unidad="gramo" cantidad="2" />
<ingrediente nombre="vinagre" unidad="cc" cantidad="3" />
<ingrediente nombre="aceite" unidad="cc" cantidad="6" />
</receta>
<receta id="r02" nombre="bocadillo de anchoas" preparacion="4">
<ingrediente nombre="pan" unidad="pieza" cantidad="1" />
<ingrediente nombre="anchoa" unidad="pieza" cantidad="3" />
</receta>
<!-- Más recetas -->
</recetas>
Esto implica mucho: que la etiqueta del nodo raíz es <recetas>
y que
no tiene ninguna propiedad, pero sí varios nodos <receta>
dentro, etc.
¿Cómo podemos comprobar que un XML de ejemplo cumple todos estos requisitos
(p.e. que <recetas>
no tiene propiedades), esto es, que cumple con la
gramática específica que hemos diseñado? El propósito que nos planteamos ahora
implica aprender dos tareas:
Escribir esa gramática específica.
Utilizar un validador al que se proporcionen documento y gramática, y compruebe que el primero cumple la segunda.
Comencemos.