es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir datos binarios EXI a XML/JSON y viceversa.

TL;DR

¿Cuál es la mejor manera de usar exificient-grammar para generar un archivo GRS a partir de un XSD, que pueda ser utilizado con exificient-for-javascript?

Estoy desarrollando un servidor TCP con Nodejs. Los clientes envían datos en formato EXI. Tengo los esquemas XSD y me gustaría convertir esos bytes, en formato EXI, a JSON o similar.

Para trabajar con exificient-for-javascript, necesito generar el archivo GRS con la biblioteca exificient-grammars. Nunca he trabajado con Java, pero entiendo que esta biblioteca no tiene un ejecutable de línea de comandos, sino que se puede importar en el proyecto y usarlo. He intentado crear un proyecto de Java y utilizando Maven he cargado las bibliotecas. Logro ejecutar el proyecto, pero mi poca experiencia en Java me está haciendo perder mucho tiempo con esto. En resumen, no soy capaz de generar el archivo GRS. Mi código Java (ver comentario “y ahora, ¿cómo hacerlo?”):

public class Parser {
    Grammars grammar;

    public void parse() {
        System.out.println("Hola desde el analizador");
        try {
            grammar = GrammarFactory.newInstance().createGrammars("RUTA_ABSOLUTA_DEL_SISTEMA_VALIDA_AL_XSD");
            // y ahora, ¿cómo generar un archivo GRS de salida???
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

Por otro lado, el proyecto exificient proporciona un ejecutable para convertir EXI a XML y viceversa, pero en mi aplicación Nodejs obtengo un buffer (un array de int8). Se me ocurre que podría generar un archivo binario desde Nodejs y procesarlo con el ejecutable de exificient en segundo plano (exec/spawn), pero esto me parece un poco excesivo.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La mejor manera de utilizar exificient-grammar para generar un archivo GRS a partir de un XSD que pueda ser utilizado con exificient-for-javascript es utilizar el método GrammarFactory.newInstance().createGrammars() en tu código Java para crear el objeto de gramática, y luego utilizar el objeto de gramática para llamar al método write() en la clase GRSWriter para generar el archivo GRS. Una vez generado el archivo GRS, se puede utilizar con exificient-for-javascript para procesar datos EXI en formato JSON u otros formatos. Algunos fragmentos de código que podrían ayudar a lograr esto son:

            try {
                // Cargar el esquema XSD
                File xsdFile = new File("ruta/al/archivo.xsd");
    
                // Crear el objeto de gramática
                Grammars grammar =
                        GrammarFactory.newInstance().createGrammars(xsdFile.getAbsolutePath());
    
                // Crear el flujo de salida para el archivo GRS
                OutputStream grsOutputStream = new FileOutputStream("ruta/al/archivo.grs");
    
                // Escribir el archivo GRS en el flujo de salida
                GRSWriter.write(grammar, grsOutputStream);
            } catch (Exception e) {
                // Manejar las excepciones
                e.printStackTrace();
            }
    

    Este código crea un objeto de gramática a partir del archivo XSD, luego crea un flujo de salida para el archivo GRS y lo utiliza para llamar al método GRSWriter.write() y generar el archivo GRS. El archivo GRS luego se puede utilizar con exificient-for-javascript para procesar datos EXI.

    Otro enfoque es utilizar el ejecutable exificient proporcionado por el proyecto exificient para convertir archivos EXI a XML o JSON. Sin embargo, este enfoque puede requerir procesar los búferes binarios en Node.js y ejecutar el ejecutable exificient en segundo plano, lo cual puede ser complicado y consumir muchos recursos. Por lo tanto, generar el archivo GRS a partir del esquema XSD utilizando exificient-grammar es un enfoque mejor.

Comments are closed.