Si bien la mayoría de nosotros que ha trabajado con XML ha escuchado el termino Schema y es que prácticamente XML y Schema van de la mano debido a que en un Schema se definen las reglas de como el XML tendrá que ser creado.
Un Schema tiene varios elementos que deberemos entender muy bien para poder explotar al máximo las ventajas que ofrece.
En este post hablaremos de los puntos mas importantes que debemos de tomar en cuenta para entenderlos.
ComplexType: Sirve para definir estructuras complejas donde podremos agrupas un conjunto de elementos u otros CompleType.
Un ComplexType lo podemos ver como la definición de una clase ya que en este definimos la estructura que deberá tener un tipo y esta pensado para ser reutilizado.
Las siguientes figuras muestran de forma grafica y el fuente(Source) de como esta generado el CompleType, En la imagen podemos apreciar que se trata de un tipo Login el cual tiene un elemento para almacenar el usuario y otro para el password.
Si prestamos mas atención veremos que el elemento usuario es de tipo UserNameType el cual es un SimpleType del cual hablaremos mas adelante y elemento para el password de tipo String.
Apartir de este ComplexType podremos generar instancias o elementos para poder ser reutilizadas en otros Schemas o ComplexType.
Element: Los elements los podemos ver como clases anónimas ya que están basada en un tipo previamente definido y no pueden ser reutilizados en otros ComplexType ni Schema’s, Los elements son utilizados cuando queremos definir algo que solo lo utilizaremos una vez.
En las siguientes figuras vemos como esta compuesto un Element de forma gráfica y en fuente(Source), Podemos apreciar que el element login es de tipo LoginType por lo que hereda su estructura.
Los Elements pueden ser de cualquier ComplexType o SimpleType e incluso no tener un tipo por lo que se denomina AnyType ( Cualquier Tipo) y automáticamente heredaran su estructura
SimpleType: Los SimpleType o Tipos Simples estan diseñados para crear nuestros propios tipos de datos simples, es decir tipos de datos que representen un solo nodo de nuestro XML.
En este caso Usuario es de tipo UserNameType el cual es un tipo simple y define dos reglas, Mínimo 8 caracteres y Máximo 20, ademas esta basado en un String, esto nos dice que si ponemos cualquier valor en este nodo que su longitud sea menor de 8 y mayor de 20 el schema nos arrojara que el documento es invalido.
Los SimpleType nos pueden ayudar a definir muchas cosas como por ejemplo el formato del RFC (Con expresiones regulares), Moneda (Numero de dígitos y fracciones), El número de una tarjeta de crédito, etc.
Attribute: Los atributos son utilizados a nivel de ComplexType o Element y sirven para representar algún datos que sea relevante a nivel de CompletType o Element, En este caso el Element Usuario tiene un Atribute llamado Token y representa el Token del usuario para darle mayor seguridad al servicio de Login.
TargetNameSpace: Al igual que en los lenguajes de programación, Los schemas también tiene NameSpace ( En Java Package) en cual define el dominio al que pertenecen todos los elementos de nuestro Schema.
El NameSpace nos sirve para distinguir entre los distintos tipos que puedan estar definidos en otros Schemas y que por alguna razón tengan los mismo nombres que en nuestro schema. O te imaginas una clase con el mismo nombre y en el mismo paquete? Entonces el namespace seria el paquete y nombre del elemento seria el nombre de la clase si lo queremos ver como programadores Java.
Finalmente y una vez terminado nuestro Schema podemos crear XML basados en nuestros tipos y validar que sean correctos a nivel sintácticos y semántico.
A continuación un XML Valido para el Element login
hola muy buen post, aunque tuve algunos problemas para entender lo del token, como es que se puede mejorar la seguridad a nivel programación con esto?
un saludo!!
Hola Juan Pablo.
Los token son muy utilizados en sistemas donde la seguridad es algo imprescindible, un token es un dispositivo que tu tienes físicamente como el que se utiliza para la banca electrónica. Estos token generan números cada cierto tiempo el cual puede ser validado por el servidor, de esta manera sabes que la persona que se esta autenticando a demas de que sabe su usuario y password tiene a la mano este dispositivo, por lo cual la seguridad se aumenta debido a que si alguna persona ajena intenta entrar con algún usuario ya no le sera suficiente saber su usuario y password, si no que a demas tendrá que tener a la mano el token.
Como nota interesante la seguridad la puedes dividir en tres cosas:
Lo que uno sabe: Esto es lo que uno sabe de memoria como un usuario y password.
Lo que uno tiene: Son dispositivos de autenticacion como el token o una tarjeta inteligente, las cuales tenemos que tener físicamente para poder validar nuestra identidad.
Lo que uno es: Estos son autentificaciones biometricas, como tu huella digital, la Iris de los ojos, reconocimiento facial u cualquier identificación que se realice por medio de la lectura de cualquier parte de tu cuerpo.
Espero que esta información aclare tu duda y si no, seguimos en contacto.