Altova MapForce 2023 Enterprise Edition

Generar código fuente a partir de esquemas XML o DTD

Inicio Anterior Inicio Siguiente

Cuando genera código a partir de una asignación de datos, MapForce genera una aplicación completa que ejecuta todos los pasos de la asignación de datos automáticamente. Si lo desea, también puede generar bibliotecas para todos los esquemas XML utilizados en la asignación. Estos esquemas permitirán al código crear o leer con facilidad las instancias XML utilizadas o creadas por el código de la asignación.

 

Para generar bibliotecas para todos los esquemas XML utilizados en la asignación de datos marque la casilla Generar clases contenedoras en el cuadro de diálogo "Opciones" (véase Opciones del generador de código). La próxima vez que genere código MapForce no sólo creará la aplicación de asignación de datos sino que además generará clases contenedoras para todos los esquemas que utiliza la asignación:

 

 

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. Por lo general, la sintaxis para usar el código generado es parecida en ambas implementaciones salvo por algunas diferencias (por ejemplo, Xerces admite más funciones de sobrecarga).

 

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.

 

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).

 

Además de las bibliotecas base mencionadas en la tabla, también se generan algunas bibliotecas de ayuda. Estas bibliotecas son utilizadas por las bibliotecas base de Altova y no deben ser utilizadas en integraciones personales porque pueden sufrir cambios en versiones futuras de la aplicación.

 

Espacios de nombres y generación de nombres

MapForce 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, MapForce 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 Referencia de 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 SPL, pero las clases generadas no lo exigen.

Valores predeterminados y fijos para atributos. Están disponibles en el 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)

© 2017-2023 Altova GmbH