Generar código fuente a partir de esquemas o DTD

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Guía y referencia del usuario > Generador de código >

Generar código fuente a partir de esquemas o DTD

Con el generador de código de XMLSpy puede generar código de programa C#, C++ o Java a partir de esquemas XML o documentos DTD. Las bibliotecas contenedoras de esquemas generadas se pueden integrar en otras aplicaciones para leer, modificar o escribir documentos XML mediante programación.

 

Generar código de programa

 

1.Abra el esquema para el que desea generar código fuente.
2. Seleccione el comando de menú DTD/Schema | Generar código de programa.
3.En la pestaña Elegir plantilla debe configurar las opciones de generación de código (ver Opciones de generación de código).
4.Haga clic en Aceptar. Aparece el cuadro de diálogo "Buscar carpeta".
5.Seleccione la carpeta de destino y haga clic en Aceptar.
6.Aparece un mensaje preguntando si desea abrir el proyecto recién creado en Microsoft Visual Studio. Haga clic en .
7.Si generó código Java, entonces se le pregunta si desea abrir el directorio de salida pertinente.

 

Cuando genera código a partir de un esquema XML o de un documento DTD, XMLSpy crea estas bibliotecas:

 

 

C++ o C#

Java

Objetivo

Altova

com.altova

Biblioteca base que contiene compatibilidad con Common Language Runtime, idéntica para todos los esquemas.

AltovaXML

com.altova.xml

Biblioteca base que contiene compatibilidad con Common Language Runtime para XML, idéntica para todos los esquemas.

MiEsquema

com.MiEsquema

Biblioteca que contiene declaraciones generadas a partir del esquema de entrada, llamado archivo de esquema o DTD. Esta biblioteca es un contenedor DOM (W3C Document Object Model) que permite leer, modificar y crear documentos XML de forma sencilla y segura. Todos los datos están dentro del DOM y hay métodos para extraer y actualizar datos y crear datos nuevos en el DOM.

 

El código C++ generado es compatible con Microsoft MSXML o Apache Xerces 3. La sintaxis para usar el código generado es idéntica en ambas implementaciones.

 

El código C# generado utiliza la biblioteca System.XML estándar de .NET como implementación DOM subyacente.

 

El código Java generado utiliza JAXP como interfaz DOM subyacente.

MiEsquemaTest

com.MiEsquemaTest

El código generado también incluye una aplicación de prueba básica, que se llama igual que el esquema utilizado (p. ej. MiEsquemaTest). Se trata de una aplicación compilable que llama a un método Example() vacío. Puede añadir su código de prueba a este método para probar la biblioteca recién generada de forma fácil y rápida.

 

Cuando cree prototipos de aplicaciones a partir de esquemas XML que cambien con frecuencia, a veces será necesario generar código una y otra vez en el mismo directorio para que los cambios en el esquema se reflejen inmediatamente en el código. Recuerde que la aplicación de prueba que se genera y las bibliotecas de Altova se sobrescribirán cada vez que genere código en el mismo directorio de destino. Por tanto, recuerde que no debe añadir código a la aplicación de prueba que se genera, sino que debe integrar las bibliotecas de Altova en el proyecto (ver Integrar bibliotecas contenedoras de esquemas).

 

Espacios de nombres y generación de nombres

 

XMLSpy genera clases que se corresponden con todos los elementos o tipos complejos declarados que redefinen todos los tipos complejos del esquema XML, conservando la derivación de clases tal y como definan las extensiones de tipos complejos del esquema. Cuando se trate de esquemas complejos que importen componentes de esquemas desde varios espacios de nombres distintos, XMLSpy conserva esta información generando los espacios de nombres C#/C++ o los paquetes Java correspondientes.

 

Por lo general, el generador de código intenta conservar los nombres del esquema original para los espacios de nombres, clases y miembros generados. En el lenguaje de destino los caracteres no válidos que se encuentren en los identificadores se reemplazan con "_". A los nombres que estén en conflicto con otros nombres o palabras reservadas se les anexa un número para que sean nombres únicos. Si cambia la configuración predeterminada de la plantilla SPL, puede que la generación de nombres se vea afectada.

 

Los espacios de nombres del esquema XML se convierten en paquetes en Java o en espacios de nombres en C#/C++, usando siempre el prefijo de espacios de nombres del esquema como espacio de nombres del código. La biblioteca completa se adjunta en un paquete o espacio de nombres derivado del nombre del archivo de esquema. Así podrá usar varias bibliotecas generadas en un programa sin que haya conflictos entre nombres.

 

Tipos de datos

 

XML Schema tiene un modelo de tipos de datos más complejo que Java, C# o C++. El generador de código convierte los tipos XML Schema integrados en tipos primitivos propios de cada lenguaje de programación o en clases derivadas con la biblioteca de Altova. Los tipos complejos y derivados definidos en el esquema se convierten en clases en la biblioteca que se genera. Las facetas de enumeración de tipos simples se convierten en constantes simbólicas.

 

La asignación entre tipos simples se puede configurar en la plantilla SPL.

 

Si los archivos de instancia XML utilizan tipos de esquema relacionados con horas y duración, estos se convierten en clases nativas de Altova en el código generado. Para más información consulte estos apartados:

 

Referencia de las clases generadas (C++)
Referencia de las clases generadas (C#)
Referencia de las clases generadas (Java)

 

Para más información sobre la conversión de tipos y otros detalles propios de cada lenguaje consulte estos apartados:

 

Bibliotecas contenedoras de esquemas (C++)
Bibliotecas contenedoras de esquemas (C#)
Bibliotecas contenedoras de esquemas (Java)

 

Gestión de memoria

 

Una estructura DOM está compuesta por nodos que siempre son propiedad de un documento DOM concreto, aunque el nodo no forme parte del contenido del documento en ese momento. Todas las clases generadas son referencias a los nodos DOM que representan, no valores. Esto significa que si se asigna una instancia de una clase generada, el valor no se copia, sino que se crea una referencia adicional a los mismos datos.

 

Compatibilidad con XML Schema

 

Estas construcciones de XML Schema se traducen en el código:

 

a) Espacios de nombres XML

 

b) Tipos simples:

 

Tipos de XML Schema integrados
Tipos simples derivados por extensión
Tipos simples derivados por restricción
Facetas
Enumeraciones
Patrones

 

c) Tipos complejos

 

Nodo anyType integrado
Tipos complejos definidos por el usuario
Derivados por extensión: se asignan a clases derivadas
Derivados por restricción
Contenido complejo
Contenido simple
Contenido mixto

 

Estas características de XML Schema avanzadas no son compatibles con las clases contenedoras generadas:

 

Comodines: xs:any y xs:anyAttribute
Modelos de contenido (sequence, choice, all). El compositor de nivel superior está disponible en el lenguaje SPL, pero las clases generadas no lo exigen.
Valores predeterminados y fijos para atribuots. Están disponibles en el lenguaje SPL pero las clases generadas no los exigen ni establecen.
Los atributos xsi:type, tipos abstractos. Cuando necesite escribir el atributo xsi:type, utilice el método SetXsiType() de las clases generadas.
Tipos de unión: no todas las combinaciones son compatibles.
Los grupos de sustitución son compatibles en parte solamente (se resuelven como "choice").
Atributos nillable="true" y xsi:nil
Restricciones de unicidad
Restricciones de identidad (key y keyref)

© 2019 Altova GmbH