XML Schema.


En los últimos días he estado abocado a la divertida tarea de generar un XML Schema que permita la validación de formato y tipos de datos de mensajes xml. Es una aplicación Genexus que está en producción a la cual se le quiere agregar una validación adicional contra dicho XML Schema, para lograr así simplificar la validación de datos.
Se piensa pasar al XSD la validación de tipos de datos, de obligatoriedad o no de los campos, de la anidación de los xml y ver si esta bien formado o no el xml.

La parte menos tecnológico de todo esto, es que el mensaje está descrito en un documento Word, con muchas paginas y tablas, en las cuales se describe como es el mensaje. También hay varios miles de mensajes XML de ejemplo con los cuales se pueden probar.

Al principio, pensé que iba a ser un trabajo mas fácil, pero a medida que fuimos avanzando, aparecieron algunas excepciones:
  • Manejo de fechas nulas
  • Manejo de elementos en diferentes ordenes.
  • Campos obligatorios condicionados por el valor de otro elemento
  • El mensaje tiene una jerarquía de 5 niveles!.
La mejor herramienta que encontré para la creación, edición y validación de estos schemas, es Visual Studio 2005. Una vez que se tiene el xml Schema generado, la utilización del mismo con Genexus es trivial.

Un ejemplo de código (simplificado) podria ser:

&xmlread.Open(&XmlFile)
&xmlread.AddSchema(&XmlSchema, &TargetNameSpace)
&xmlread.ValidationType=3 //Validación contra Schema.

do while not &xmlread.EOF <> 0

 &npsp;&xmlread.Read()
  If &xmlread.ErrCode <> 0 and Null(&Error)
    &Error='Error: ' + str(&xmlread.ErrCode) + ' Desc: ' + &xmlread.ErrDescription )
    &xmlread.Close()
  Endif
enddo

En algún momento había hecho un programita con GXpublic, que generaba un XML Schema dada una Transaccion, pero nunca lo deje operativo totalmente. Para este caso me hubiese servido bastante.

Comentarios

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.