Altova MapForce 2023 Enterprise Edition

Como hemos mencionado anteriormente, la regla general de asignación es "por cada elemento de origen se crea uno de destino". Aquí, "elemento" puede significar:

 

una única instancia del archivo o la BD de entrada

una secuencia de cero a varios nodos de instancia del archivo o la BD de entrada

 

Durante la ejecución de la asignación, si una secuencia alcanza un elemento de destino se crea un bucle que genera tantos nodos de destino como nodos de origen haya. Sin embargo, hay algunas excepciones a esta regla:

 

Si el elemento de destino es un elemento XML raíz, entonces solo se crea una vez. Si conecta a él una secuencia, el resultado puede no ser un esquema válido. Si también se conectan a él atributos del elemento raíz, entonces la serialización XML fallará en tiempo de ejecución. Esto quiere decir que debe evitar conectar secuencias a elementos XML raíz.

Si el elemento de destino acepta solamente un valor, se crea una sola vez. Algunos ejemplos de elementos que aceptan solamente un valor: atributos XML, campos de BD, componentes simples de salida. Por ejemplo, la asignación siguiente genera una secuencia de tres números enteros (1, 2, 3) con ayuda de la función generate-sequence. Sin embargo, el resultado contendrá solamente un número entero porque el destino es un componente simple de destino que acepta solamente un valor. Los otros dos valores se ignoran.

mf_semantics_02

Si el esquema de origen indica que un elemento específico ocurre una sola vez pero el archivo de instancia contiene varios, MapForce extrae el primer elemento del origen (que, conforme al esquema, debe existir) y crea un solo elemento en el componente de destino. Para deshabilitar este comportamiento, desmarque la casilla Optimi&zación de procesamiento de datos de entrada basada en minOccurs/maxOccurs en la configuración del componente (véase también Configuración de componentes XML).

 

Si la secuencia está vacía no se genera nada en el lado de destino. Por ejemplo, si el componente de destino es un documento XML y la secuencia de origen está vacía, entonces no se crearía ningún elemento XML en el componente de destino.

 

Las funciones funcionan de forma parecida: si obtienen una secuencia como entrada, entonces se les llama tantas veces como (y generan tantos resultados como) elementos haya en la secuencia.

 

Si una función obtiene una secuencia vacía como entrada, también devuelve un resultado vacío, por lo que no genera ninguna salida.

 

Sin embargo, hay algunas categorías o funciones que, por motivos de diseño, devuelven un valor incluso aunque obtengan una secuencia vacía como entrada:

 

exists, not-exists, substitute-missing

is-null, is-not-null, substitute-null (estas tres funciones son alias de las tres anteriores)

funciones agregadas (sum, count, etc.)

funciones definidas por el usuario que aceptan secuencias y son funciones regulares (no inline)

 

Si necesita reemplazar algún valor vacío, añada la función substitute-missing a la asignación y reemplace el valor vacío con otro valor. También puede obtener el mismo resultado usando Valores predeterminados y funciones.

 

Las funciones pueden tener distintos elementos de entrada. Si se conecta una secuencia a cada elemento de entrada, esto genera un producto cartesiano de todos los elementos de entrada, que no suele ser el resultado deseado..Para evitarlo, conecte solamente una secuencia a una función con varios parámetros: todos los demás parámetros se deben conectar a elementos "únicos" de elementos de nivel superior u otros componentes.

© 2017-2023 Altova GmbH