Consultorio tecnológico de Dr. Gavilán: XML Schema.

A partir de la hoy, le haré un lugarcito en este humilde [1] blog al Dr. Gavilán, quien contestará las dudas tecnológicas planteadas por los lectores de este medio de comunicación. [3]

Dr. Gavilán: En primer lugar lo felicito por su columna, la leo siempre y me gusta mucho. Es muy buena la tarea de divulgación tecnológica que está realizando.

La duda que me aqueja hoy, es que estoy teniendo que procesar archivos xml y me exigen que se validen con xml schemas. Me podría guiar para lograr dicho objetivo?.

Trabajo con GeneXus y el generador Java.

Me llama poderosamente la atención que puedas haber leído esta columna, porque pimero, no es una columna y segundo esta la primera vez que respondo algo.. pero igual agradezco todo tipo de adulaciones inmerecidas.

El uso de xml schemas para validar el formato de un archivo xml, facilita muchísimo la programación pues evita gran cantidad de validaciones, que antes de otra forma agrandarían nuestros programas.

Que tipo de validaciones pueden realizarse?. Las más sencillas son de estructura del xml, donde se puede indicar que campos deben venir en forma obligatorio y cuales no, cuantas veces puede repetirse un determinado elemento, valores mínimos y máximos de determinados campos, etc.

También es muy fácil, validar el tipo de datos que nos envian en el xml, exigiendo que un elemento se numérico o que tenga tantas posiciones decimales, formato fecha y que sea una fecha válida, o si es character se puede exigir que tenga un largo mínimo y/o máximo.

También se pueden hacer validaciones para que determinados campos esten dentro de una lista de valores, o que cumplan con una expresión regular.

En resumen, el XML Schema es una forma de declarar la estructura del archivo xml y luego hay programas standard para realizar la validación.

Para el diseño de XSD recomiendo la utilización del Liquid XML Studio 2009, en su version comunitaria, que es gratuita y permite la definición facil del XSD a partir de XML y la generación de XML a partir de un XSD. También en fácil validar un XML contra un XSD. [2]

Para re-plantear mejor el problema, supongamos que tenemos un archivo xml (con su namespace correspondiente) y un archivo xsd (xml schema).

Para estar bien formado el xml va a necesitar un nodo raíz y facilita su validación si se pone al principio algo de la forma:


< ?xml version="1.0" encoding="utf-8"? >
< xmlns="http://myServer/MyApp" targetnamespace="http://myServer/MyApp">
...
< /datos >


En el XML Schema tambien conviene agregar el atributo targetnamespace (igual que el definido en el archivo anterior) para simplificar el procesamiento.

En Genexus el codigo quedaria de la forma:



//Recorro todo el archivo para ver que cumpla con el schema.
&NameSpace = "http://myserver/myApp"
&xml.AddSchema(&ArchSchema, &NameSpace)
&xml.ValidationType = 3 //Validacion contra Schema.
&xml.Open(&ArchIn)
do 'MiroError'
do 'LeoXml'
do while &xml.eof<>1 and &Salgo = 'N'
do 'LeoXml'
enddo
&xml.Close()

Sub 'LeoXml'
&xml.Read()
do 'MiroError'
EndSub

Sub 'MiroError'
if &xml.ErrCode <> 0
&HayError = 'S'
&MsgError = 'ERROR: value=' + &valor + ' Names=' + &xml.Name + ' ErrCode: ' + &xml.ErrCode.ToString() + ' ErrDescription: ' + &xml.ErrDescription + ' Line: '+ str(&xml.ErrLineNumber) + ' Err.Position:' + str(&xml.ErrLinePos)

else
&valor = &xml.value.Trim()
endif
EndSub

Hay mas informacion en los SAC19512 y SAC17868.

Notas.
[1] Humilde pero limpito.
[2] En Visual Studio o en cualquiera de las versiones Express de Visual Studio para web, hay funcionalidades similares para el manejo de XML Schemas, pero si trabajas con java, es mas dificil que te instales VS.

Altova XML Spy tambien es un excelente producto, pero es mas caro.

[3] El dueño de este blog, no se hace responsable por los daños que puedan ocasionar los consejos del Dr. Gavilán.

Comentarios

  1. Muchas gracias dotor!!

    ¿Alguna relación con el Sr. Quique Gavilán?

    Tenía un Fast Food en Avenida Italia y me quedó debiendo unos mangos y me gustaría saber de su paradero… dicen que lo vieron con Soloducho comiendo en un KFC en Costa Rica.

    Le dejo una pregunta… ¿ha probado el partitioning del Sql Server 2005?

    Andamos necesitando pasar varios millones de registros a una base histórica, y me han comentado que es una alternativa que nos puede dar la solución con poco trabajo…

    ¿funcionarán bien las reorg de gx?
    ¿Será performante el correr las condiciones de la partición?

    Cualquier dato será bienvenido.

    Un abrazo y estaremos al alpiste de sus sabias palabras, a ver si nos puede dar una manito.

    PD. Saludos para vos también Enrique y gracias por darle un lugarcito al Dotor

    ResponderBorrar
  2. Acosta:
    Le traslado la consulta a doctor y veremos que dice.

    De cualquier forma te aclaro:

    * El doctor no tiene nada que ver con comidas rapidas, respestas rapidas o transito lento.

    ResponderBorrar
  3. Hola Enrique!, una vez mas muchas gracias por tu blog, con respecto a esta información del año 2009 :

    1.- Todavía es viable seguir estos pasos en la gx16 a gx18 ?
    2.- En ocasiones he tenido que consumir servicios web del tipo SOAP y me mandan un .xsd, es necesario adjuntar este .xsd en mi código? esto específicamente para que se hace? por un tema de seguridad? ya que he visto códigos que no adjuntan el .xsd y anda todo ok.

    Saludos!

    ResponderBorrar
    Respuestas
    1. 1) SI.
      2) En mi experiencia, no es necesario adjuntar un xsd para consumir el SOAP. Puede ser una exigencia particular de alguna implementacion, pero resulta raro. Es comun si tener una referencia a un schema centralizado en algun servidor publico.

      Borrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

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

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