XML - Validar contra Schema

 
Vista:

Validar contra Schema

Publicado por Federico (1 intervención) el 06/12/2005 14:45:13
Buen Dia,
Soy nuevo con esto del XML y si bien tengo un programa que me genera un archivo XML necesito luego poder validar este contra el schema( .XSD) . Y la herramienta con la cual programa ,no me trae este utilitario. Encima el Schema esta dividido en 2 archivos , uno tiene solo los tipos de datos compuesto y el otro los atributos del XML.
El problema es que no se por donde comenzar a buscar programas que comparen de esta forma o rutinas? O cual les parece la mejor solucion para resolver esa validacion.

Gracias
Saludos Atte
Federico Gordillo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Validación de un archivo XML contra un esquema dividido en varios archivos XSD

Publicado por Alejandro (258 intervenciones) el 12/07/2023 17:17:57
Para validar un archivo XML contra un esquema dividido en varios archivos XSD, puedes utilizar una combinación de herramientas y bibliotecas que admitan la validación XML con referencias a esquemas externos. A continuación, te presento una posible solución:

1. Utiliza una biblioteca de validación XML:
- Puedes utilizar bibliotecas como `Xerces` (Apache) o `XmlSchemaSet` (en el caso de .NET) que admiten la validación XML con referencias a esquemas externos.
- Estas bibliotecas te permitirán cargar los archivos XSD y validar el archivo XML contra el esquema definido.

2. Carga los archivos XSD en la biblioteca de validación:
- Carga los archivos XSD en la biblioteca de validación. Si tienes un archivo XSD para los tipos de datos compuestos y otro para los atributos del XML, cárgalos por separado en la biblioteca.

3. Valida el archivo XML contra el esquema:
- Utiliza la biblioteca de validación XML para cargar y validar el archivo XML contra los esquemas definidos.
- Asegúrate de que el archivo XML haga referencia a los esquemas correctos utilizando las declaraciones de `xsi:schemaLocation` o `xsi:noNamespaceSchemaLocation`.

Aquí tienes un ejemplo en Java utilizando la biblioteca Xerces:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import org.apache.xerces.parsers.DOMParser;
import org.apache.xerces.xs.*;
import org.w3c.dom.Document;
 
public class XMLValidator {
    public static void main(String[] args) {
        try {
            // Cargar archivos XSD
            XSModel schemaModel = loadSchema("tipos.xsd");
            XSModel attributeModel = loadSchema("atributos.xsd");
 
            // Validar archivo XML
            boolean isValid = validateXML("archivo.xml", schemaModel, attributeModel);
 
            if (isValid) {
                System.out.println("El archivo XML es válido.");
            } else {
                System.out.println("El archivo XML no es válido.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    private static XSModel loadSchema(String xsdFilePath) throws Exception {
        DOMParser parser = new DOMParser();
        parser.parse(xsdFilePath);
        Document doc = parser.getDocument();
 
        XSImplementationImpl xsImpl = new XSImplementationImpl();
        XSLoader schemaLoader = xsImpl.createXSLoader(null);
        return schemaLoader.loadURI(xsdFilePath);
    }
 
    private static boolean validateXML(String xmlFilePath, XSModel schemaModel, XSModel attributeModel) throws Exception {
        DOMParser parser = new DOMParser();
        parser.setFeature("http://apache.org/xml/features/validation/schema", true);
        parser.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation",
                "namespace1 tipos.xsd namespace2 atributos.xsd");
 
        // Asignar los modelos de esquema
        XSGrammar grammar1 = schemaModel.getGrammar(0);
        XSGrammar grammar2 = attributeModel.getGrammar(0);
        parser.setProperty("http://apache.org/xml/properties/internal/grammar-pool", new XSGrammar[] { grammar1, grammar2 });
 
        parser.parse(xmlFilePath);
        return parser.getDocument().getDocumentElement().getSchemaTypeInfo().isSchemaValid();
    }
}

Asegúrate de reemplazar "tipos.xsd", "atributos.xsd" y "archivo.xml" con las rutas y nombres de tus archivos XSD y XML respectivamente.

En este ejemplo, se utilizan las bibliotecas de Apache Xerces para cargar y validar los archivos XML contra los esquemas. Los modelos de esquema se cargan por separado para los archivos XSD de tipos de datos compuestos y atributos. Luego, se utiliza un `DOMParser` para realizar la validación XML y se comprueba si el archivo XML es válido.

Recuerda que esta es solo una solución sugerida y puedes adaptarla según tus necesidades y el lenguaje de programación que estés utilizando.

Espero que esta solución te ayude a validar un archivo XML contra un esquema dividido en varios archivos XSD.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar