Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Validar documentos XML con esquema XSD

Validar documentos XML con esquema XSD

Autor jc mouse lunes, febrero 4, 2019

Un esquema XSD se utiliza para describir y validar la estructura y contenido de los datos de un documento XML. Un esquema XSD define los elementos, atributos y tipos de datos similar a un esquema de base de datos que describe los datos en ella.

El esquema XSD se trata de una forma alternativa a los esquema DTD (Definición de Tipo de Documento). La diferencia entre ambos esquemas esta en que XSD utiliza una sintaxis basada en XML y las DTD una sintaxis derivada de SGML, XSD permite especificar los tipos de datos, es extensible (permite crear nuevos elementos), etc. Estas entre otras características llevaron a preferir XSD sobre DTD.

En este post validaremos un documento XML usando el esquema XSD y el lenguaje java. Previamente conoceremos como crear archivos XML y XSD desde nuestro IDE de trabajo.

Necesitamos:

  • IDE Netbeans (o Eclipse)
  • Conocimientos sobre el lenguaje de marcado XML
  • Conocimientos sobre el esquema XSD (opcional)

Paso 1. El proyecto

Crea un nuevo proyecto en Netbeans con la siguiente estructura:

Validacion XSD
+--- Paquete de fuentes
     +--- example
           +--- Main.java

Paso 2: Archvos XSD

Para crear un archivo XSD, clic derecho sobre el paquete “example” -> new -> Other -> en categoría buscas XML y en tipo de archivo seleccionas XML Schema (empty), a continuación le pones el nombre de MiEsquema y presionas el botón [terminar].

Nuestro esquema XSD nos permitirá la validación de un pequeño formulario compuestos por tres campos, el nombre del usuario de tipo String y con una longitud máxima de 32 caracteres y una mínima de 6. Así mismo se desea controlar la edad, solo para mayores de 18 años y hasta un máximo de 99 años, este campo es de tipo entero. Finalmente se requiere la validación del correo electronico para lo cual se hace uso de expresiones regulares.

<?xml version="1.0"?>
<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">
    <xs:element name="formulario">
        <xs:complexType>
            <xs:sequence>
                <!-- Nombre de usuario -->
                <xs:element name="nombre" >
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:minLength value="6" />
                            <xs:maxLength value="32" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <!-- Edad, solo mayores de 18 años -->
                <xs:element name="edad">
                    <xs:simpleType>
                        <xs:restriction base="xs:integer">
                            <xs:minInclusive value="18" />
                            <xs:maxInclusive value="99" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>              
                <!-- Correo electonico -->
                <xs:element name="mail">
                    <xs:simpleType> 
                        <xs:restriction base="xs:string"> 
                            <xs:pattern value="[^@]+@[^\.]+\..+"/> 
                        </xs:restriction> 
                    </xs:simpleType> 
                </xs:element>
                
            </xs:sequence>
        </xs:complexType>        
    </xs:element>
</xs:schema>

Paso 3. Documento XML

Para crear un archivo XML, clic derecho sobre el paquete example -> New -> Other -> en categoría seleccionar XML -y en tipo de archivo documento XML, en nombre de archivo escribir “MiFormulario” a continuación seleccionar la opción “Documento con restricciones de esquema XML” y presionar [siguiente]

esquema

En la siguiente ventana, busca y selecciona el archivo MiEsquema.xsd creado en el paso 2

XSD Netbeans

Presiona [siguiente] deja las opciones de la ventana como esta y finalmente presiona [terminar]

Se crea un archivo XML vacío con las etiquetas declaradas en el esquema XSD

XML esquema XSD

Paso 4. Código validación desde java

Abre el archivo Main.java y pega el siguiente código:

import java.io.IOException;
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
/**
 * @see https://www.jc-mouse.net/
 * @author mouse
 */
public class Main {

    public static void main(String[] args) {
        try {
            //URI del espacio de nombres del esquema XML del W3C. http://www.w3.org/2001/XMLSchema
            SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            //Representa un conjunto de restricciones que se pueden verificar / aplicar en un documento XML
            //Un objeto de esquema generalmente se crea a partir de SchemaFactory
            Schema schema = factory.newSchema(Main.class.getResource("/example/MiEsquema.xsd"));
            //verifica un documento XML contra el esquema XSD
            Validator validator = schema.newValidator();
            //Establece el ErrorHandler para recibir los errores encontrados durante la 
            //invocación del método de validación.
            validator.setErrorHandler(new ErrorHandler() {
                @Override
                public void warning(SAXParseException exception) throws SAXException {
                    mostrarError(exception);
                }

                @Override
                public void error(SAXParseException exception) throws SAXException {
                    mostrarError(exception);
                }

                @Override
                public void fatalError(SAXParseException exception) throws SAXException {
                    mostrarError(exception);
                }

                private void mostrarError(SAXParseException exception) {
                    System.out.println("Linea: "
                            + String.format("%4s|", exception.getLineNumber())
                            + exception.getMessage());
                }

            });
            //Valida la entrada especificada. Debe ser un documento XML o un elemento XML y no debe ser nulo
            validator.validate(new StreamSource(Main.class.getResourceAsStream("/example/MiFormulario.xml")));

        } catch (SAXException | IOException ex) {
            System.err.println(ex.getMessage());
        }
    }

}

No se utiliza ninguna librería adicional solo la API javax.xml.* la cual es una colección de APIs para el parseo y tratamiento de documentos XML parte del JDK. Así mismo también se usa el API org.xml.sax para el control de de eventos de error.

Paso 5: Validación

Agrega los siguientes datos al archivo MiFormulario.xml  y ejecuta el archivo Main.java

<?xml version="1.0" encoding="UTF-8"?>
<formulario
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
    xsi:noNamespaceSchemaLocation='MiEsquema.xsd'>
    <nombre>Aquiles Brinco</nombre>
    <edad>21</edad>
    <mail>admin@mail.com</mail>
</formulario>

Estos datos cumplen con los requisitos del esquema XSD por lo que no obtendrás ninguna excepcion y el programa termina sin errores.

Ahora reemplaza los datos del archivo XML por los siguientes datos:

<?xml version="1.0" encoding="UTF-8"?>
<formulario
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
    xsi:noNamespaceSchemaLocation='MiEsquema.xsd'>
    <nombre>Juan</nombre>
    <edad>15</edad>
    <mail>admin.mail.com</mail>
</formulario>

Estos datos no cumplen con el esquema XSD por lo que obtendremos por pantalla los siguientes errores:

Validacion esquema xsd

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Manipular colecciones de una forma sencilla

Manipular colecciones de una forma sencilla

Java proporciona Collection Framework, que define varias clases e interfaces para representar un grupo de objetos como u...

Gestión de Stock – La Vista (Parte 3)

Gestión de Stock – La Vista (Parte 3)

En esta tercera parte del tutorial crearemos la interfaz de usuario GUI (VISTA) para el sistema de gestión de stock. Tom...

Procedimientos Almacenados: Parámetros INOUT

Procedimientos Almacenados: Parámetros INOUT

En post anteriores vimos lo que son los parámetros IN y los parámetros OUT pero existe otro tipo de parámetro que es la...

base de datos multiple – parte II

base de datos multiple – parte II

Continuación del tutorial “Utiliza 2 bases de datos diferentes en una aplicación” La Interfaz frmSelected.ja...

Conoce VAR lo nuevo de Java 10

Conoce VAR lo nuevo de Java 10

Java ha ido evolucionando a pasos agigantados en los últimos años gracias al pedido de su comunidad global de programado...

Gráficos estadísticos con Base de Datos SQLite

Gráficos estadísticos con Base de Datos SQLite

Si necesitamos mostrar gráficos estadísticos en nuestras aplicaciones android, contamos con muchas librerías disponibles...

1 comentario en “Validar documentos XML con esquema XSD”

  1. Alvaro Aguirre dice:

    Estimado JC Podrías hacerlo en visual basic 2010?. Desde ya tu ayuda es muy valiosa para todos los que te seguimos

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

En un post anterior conocimos una herramienta Open Source con un conjunto de herramientas para el trabajo con imágenes e...

ImageMagick es un software de código abierto multiplataforma que contiene una serie de herramientas para leer, mostrar,...

OCR (Optical Character Recognition) en español, Reconociminto Optico de Caracteres, es el proceso por el cual  se extrae...

La misión espacial de la NASA, el Mars  2020 Rover Mission esta proyectada para lanzarse en julio de 2020 y su llegada s...

Android Bolivia

MAUS