Conservación y supresión de delimitadores
Información general
Hay dos propiedades que se aplican a los registros delimitados: Conservar delimitador para datos vacíos y Suprimir delimitadores finales. Use estas propiedades para controlar cómo el ensamblador de archivos planos controla los delimitadores asociados a datos inexistentes y delimitadores finales. Al establecer la propiedad Conservar delimitador para datos vacíos en Sí (que es el valor predeterminado), los delimitadores se incluyen en el mensaje de archivo plano traducido para:
Los campos sin datos
Los registros inmediatamente subordinados sin datos que no tienen una etiqueta asociada a ellos
Al establecer la propiedad Conservar delimitador para datos vacíos en No, los delimitadores no se incluyen en el archivo plano traducido para registros y campos sin datos. Además, independientemente de la configuración de la propiedad Conservar delimitador para datos vacíos , los delimitadores no se incluirán en el mensaje de archivo plano traducido para registros subordinados inmediatamente sin datos para los que se define una etiqueta.
Al establecer la propiedad Suprimir delimitadores finales en No (que es el valor predeterminado), se pueden incluir uno o varios delimitadores finales en el mensaje de archivo plano traducido. Al establecer la propiedad Suprimir delimitadoresfinales en Sí, los delimitadores finales no se incluyen en el mensaje de archivo plano traducido.
Escenarios especiales
Hay algunos casos especiales en los que los comportamientos causados por la configuración de las propiedades Conservar delimitador para datos vacíos y Suprimir delimitadores finales pueden entrar en conflicto. En tales casos, los comportamientos asociados a la última propiedad, Suprimir delimitadores finales, tendrán prioridad. Además, en algunos casos especiales, se le advertirá de que pueden existir conflictos potenciales entre los valores configurados para estas dos propiedades.
Por ejemplo, considere un nodo Record definido con los siguientes valores de propiedad:
Nombre de nodo = MyRec
Identificador de etiquetas = Rec
Delimitador secundario = ,
Orden secundario = Infijo
Y se define para que contenga cinco nodos de elemento de campo con los siguientes nombres (también pueden ser nodos atributo de campo o nodos record subordinados):
FieldElem1
FieldElem2
FieldElem3
FieldElem4
FieldElem5
A continuación, supongamos que el siguiente fragmento XML principalmente vacío, que representa este nodo Record , se pasa al ensamblador de archivos planos.
<MyRec>
<FieldElem1 />
<FieldElem2 />
<FieldElem3>Val</FieldElem3>
<FieldElem4 />
<FieldElem5 />
</MyRec>
En la tabla siguiente se muestran los resultados generados y los requisitos de configuración de propiedades adicionales asociados para los nodos de esquema pertinentes, en función de diferentes configuraciones para las propiedades Conservar delimitador para datos vacíos (PDFED) y Suprimir delimitadores finales (STD).
Configuración de PDFED | Configuración de STD | Resultados | Requisitos adicionales del nodo |
---|---|---|---|
Sí | No | Rec,,,Val,, | Ninguno. |
No | Sí | Rec,Val | Todos los nodos elemento field deben configurarse como opcionales. |
Sí | Sí | Rec,,,Val | Los nodos denominados FieldElem4 y FieldElem5 deben configurarse como opcionales. |
No | No | Rec,Val,, | Todos los nodos elemento field deben configurarse como opcionales. |
Si la configuración de estas propiedades especifica que los delimitadores no se deben conservar o suprimir, se generará un mensaje de advertencia para indicar que puede que no sea posible analizar los datos de archivo sin formato serializados mediante el mismo esquema en los dos casos siguientes:
Cuando el nodo Record para el que la propiedad Preserve Delimiter For Empty Data está establecida en No o la propiedad Suppress Trailing Delimiters se establece en Sí, respectivamente, contiene nodos de elemento field subordinados, nodos atributo de campo o nodos record para los que no se especifica ninguna etiqueta.
Cuando los nodos elemento de campo subordinados, nodos atributo de campo y nodos record para los que no se especifica ninguna etiqueta no están configuradas para ser opcionales (estableciendo la propiedad Min Occurs establecida en cero) en el esquema. Cuando la propiedad Suprimir delimitadores finales se establece en Sí, solo es necesario configurar los últimos nodos subordinados como opcionales. Cuando la propiedad Conservar delimitador para datos vacíos está establecida en No, todos los nodos subordinados finales deben configurarse como opcionales.
Nota
Los delimitadores siempre se conservan cuando el elemento XML asociado a un nodo Record( presumiblemente opcional) Record, Field Element o Field Attribute nodo están completamente ausentes de la representación XML del documento empresarial, excepto cuando un Objeto Record sigue a un campo opcional que falta. En otras palabras, cuando faltan los datos y las etiquetas XML que los rodean, el delimitador correspondiente siempre se incluye en la representación de archivo sin formato del documento empresarial.
Ahora, cambie el esquema para incluir un registro secundario con dos Elemento de campo que sigan inmediatamente a un Elemento de campo ausente. Los elementos del registro secundario se configuran para utilizar el carácter | (barra vertical) como delimitador.
<MyRec>
<FieldElem1 />
<FieldElem2 />
<FieldElem3>Val</FieldElem3>
<!-- <FieldElem4 /> -->
<ChildRec>
<InnerFieldElement1>Inner1</InnerFieldElement1>
<InnerFieldElement2>Inner2</InnerFieldElement1>
</ChildRec>
<FieldElem5 />
</MyRec>
Si lo anterior se pasa al desensamblador de archivos sin formato, los delimitadores de FieldElem4 no se conservarán, aunque los registros posteriores se delimitarán según lo esperado.
,,Val,,Inner1,Inner2,,
Consulte también
- Consideraciones acerca de los registros delimitados
- Conservar delimitador para datos vacíos (propiedad Node de esquemas de archivos planos) y Suprimir delimitadores finales (propiedad Node de esquemas de archivo plano) en la guía de interfaz de usuario y referencia del espacio de nombres de la API de desarrolladores