Bibliotecas contenedoras de esquemas (C++)

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 >

Bibliotecas contenedoras de esquemas (C++)

Tipos de caracteres

 

El código C++ generado se puede compilar con o sin compatibilidad con Unicode. Dependiendo de la configuración elegida, los tipos string_type y tstring se definirán como std::string o std::wstring y estarán formados por caracteres estrechos o anchos. Para usar caracteres Unicode en su archivo XML que no se puedan representar con el conjunto de caracteres de 8 bits actual deberá habilitar la compatibilidad con Unicode. Deberá prestar especial atención a las macros _T() . Esta macro garantizan el correcto almacenamiento de las constantes de cadena (tanto si se compila para programas Unicode como para programas no Unicode).

 

Tipos de datos

 

Esta es la correspondencia predeterminada de tipos XML Schema con tipos de datos C++:

 

XML Schema

C++

Observaciones

xs:string

string_type

string_type se define como std::string o std:wstring

xs:boolean

bool


xs:decimal

double

C++ no tiene un tipo decimal por lo que se debe usar double.

xs:float, xs:double

double


xs:integer

__int64

xs:integer tiene un rango ilimitado que se corresponde con __int64 para mayor eficacia.

xs:nonNegativeInteger

unsigned __int64

ver anterior

xs:int

int


xs:unsignedInt

unsigned int


xs:dateTime, date, time, gYearMonth, gYear, gMonthDay, gDay, gMonth

altova::DateTime


xs:duration

altova::Duration


xs:hexBinary and xs:base64Binary

std::vector<unsigned char>

La codificación y decodificación de datos binarios se realiza automáticamente.

xs:anySimpleType

string_type


 

Los tipos XML Schema que faltan en la lista son tipos derivados y corresponde al mismo tipo C++ que su correspondiente tipo base.

 

Clases generadas

 

Por cada tipo del esquema se genera una clase que contiene un miembro por cada atributo y elemento del tipo. Los miembros se llaman igual que los atributos o elementos del esquema original (en caso de conflicto se anexa un número). Para los tipos simples se generan operadores de asignación y conversión. Para los tipos simples con facetas enumeration, se pueden usar los métodos GetEnumerationValue() y SetEnumerationValue(int) junto con las constantes generadas para cada valor de enumeración. Además, el método StaticInfo() permite acceder a la información del esquema como uno de estos tipos:

 

altova::meta::SimpleType

altova::meta::ComplexType

 

Las clases generadas a partir de tipos complejos incluyen el método SetXsiType(), que permite configurar el atributo xsi:type del tipo. Este método puede ser muy útil a la hora de crear elementos de instancia XML de un tipo derivado.

 

Además de las clases para los tipos declarados en el esquema XML, se genera también una clase de documento ("CDoc"). Esta clase contiene todos los elementos raíz posibles como miembros, así como varios métodos más. Para más información sobre esta clase consulte [SuEsquema]::[CDoc] .

 

Nota:        el nombre real de la clase depende del nombre del esquema .xsd.

 

Por cada atributo o elemento miembro de un tipo de esquema se genera una clase nueva. Para más información sobre dichas clases consulte:

 

[SuEsquema]::AtributoMiembro

[SuEsquema]::ElementoMiembro

 

Nota:        el nombre real de las clases depende del nombre del atributo o elemento del esquema.

 

Consulte también el apartado Ejemplo: usar las bibliotecas contenedoras del esquema.

 

Control de errores

 

Los errores se notifican por medio de excepciones. Estas son las clases de excepción que están definidas en el espacio de nombres altova:

 

Clase

Clase base

Descripción

Error

std::logic_error

Error de lógica de programa interna (independiente de los datos de entrada).

Exception

std::runtime_error

Clase base para errores de tiempo de ejecución.

InvalidArgumentsException

Exception

Se llamó a un método con valores de argumento no válidos.

ConversionException

Exception

Excepción generada cuando falla una conversión de tipo.

StringParseException

ConversionException

Un valor del espacio léxico no se puede convertir en un espacio de valor.

ValueNotRepresentableException

ConversionException

Un valor del espacio de valor no se puede convertir en espacio léxico.

OutOfRangeException

ConversionException

Un valor de origen no se puede representar en el dominio de destino.

InvalidOperationException

Exception

Se intentó una operación que no es válida en el contexto dado.

DataSourceUnavailableException

Exception

Se encontró un problema al intentar cargar una instancia XML.

DataTargetUnavailableException

Exception

Se encontró un problema al intentar guardar una instancia XML.

 

Todas las clases de excepción contienen un texto de mensaje y un puntero que apunta a una posible excepción interna.

 

Método

Finalidad

string_type message()

Devuelve una descripción textual de la excepción.

std::exception inner()

Devuelve la excepción que causó esta excepción (si procede) o devuelve NULL.

 

Acceso a la información del esquema

 

La biblioteca generada permite acceder a información estática del esquema por medio de estas clases. Todos los métodos se declaran como const.

 

altova::meta::Attribute

altova::meta::ComplexType

altova::meta::Element

altova::meta::SimpleType

 

Los métodos que devuelven una de las clases de metadatos devuelven un objeto NULL si no existe la propiedad correspondiente.

 


© 2019 Altova GmbH