Si los mensajes de entrada pueden contener subcampos opcionales cuya presencia o ausencia sólo se puede determinar examinando el valor real de los datos (por ejemplo un campo opcional de dígitos numéricos seguido de uno o varios caracteres alfabéticos), necesita utilizar el método de Separación de elementos de datos Utilizar patrón de datos. Esto es especialmente relevante para los mensajes que se ajustan al estándar de la industria SWIFT. Para utilizar este método, deberá proporcionar expresiones regulares para identificar las partes de un mensaje de entrada que se deben asociar con los subcampos. Necesitará proporcionar un valor de expresión regular para la propiedad Patrón de datos de cada elemento hijo del tipo complejo.
Cuando se realiza el análisis, se comparan los datos a su vez con cada hijo del tipo complejo. El analizador realiza esta acción utilizando la expresión regular para el hijo a fin de determinar el número de caracteres del mensaje que se aplican a dicho hijo. Este número de caracteres es la longitud de la serie de caracteres más larga, empezando desde la posición actual del mensaje, que coincide con la expresión regular. Si la serie de caracteres más larga que coincide con la expresión regular tiene una longitud cero, el elemento está presente en el mensaje y se utiliza la serie de caracteres vacía para el valor. Si no hay ninguna serie de caracteres que coincida con la expresión regular, el elemento no está presente. Esto puede producir un error de validación subsiguiente si se necesita el elemento.
Después de determinar el número de caracteres del mensaje de entrada, se realiza la conversión de datos normal, o un análisis adicional en el caso de un elemento complejo, en el texto del mensaje de entrada para asignar valores a los elementos. Esto puede producir errores de desbordamiento de datos o de pérdida de datos por defecto si la longitud identificada por el patrón no es apropiada para la definición del hijo.
El apartado Sintaxis de expresiones regulares explica las normas de sintaxis completas y el modo de aplicarlas, pero la tabla siguiente proporciona unos ejemplos simples de análisis utilizando patrones de datos. Después de la tabla, aparece un ejemplo más complejo.
Mensaje de entrada | Patrón de datos | Valor comparado |
---|---|---|
"123456ABC" | [0-9]* | "123456" |
"123" | [A-Z]* | "" |
"123" | [A-Z]+ | No está presente |
"ABCD123" | [A-Z]{1,3} primer campo [A-Z]{2,4} segundo campo |
"ABC" - primer campo (la
serie de caracteres más larga que coincida con el patrón) No está presente - segundo campo (no existe la longitud mínima de dos caracteres alfabéticos) |
"ABCDEFGHIJ1234" | [A-Z]{1,3} primer campo, repetición [0-9]+ segundo campo |
"ABC" - primer campo [1] "DEF" - first field [2] "GHI" - primer campo [3] "J" - first field [4] "1234" segundo campo (el campo de repetición termina cuando los datos "1234" ya no coinciden con el patrón de datos especificado para el primer campo.) |
El ejemplo siguiente muestra la comparación de patrón de tres campos.
Message definition: Complex type: Data Element Separation=Use Data Pattern Field1: xsd:string minOccurs=1, maxOccurs=1, Length=5, Pad=SPACE, Data Pattern=".{5}" Field2: xsd:int minOccurs=0, maxOccurs=1, Data Pattern="[0-9]{0,6}" Field3: xsd:string minOccurs=1, maxOccurs=1, minLength=3, maxLength=4, Data Pattern="[A-Z][A-Za-z0-9]{2,3}" Input1: "ABCDE123F12" Result1: Field1="ABCDE", Field2="123", Field3="F12" Input2: "ABCDEF12" Result2: Field1="ABCDE", Field2=not present, Field3="F12" Input3: "ABCDE123456XXXX" Result3: Field1="ABCDE", Field2="123456", Field3="XXXX" Input4: "ABCDE1234567" Result4: Field1="ABCDE", Field2="123456", Field3=not present, lo que produce una excepción si la validación está habilitada. Un carácter ("7") sigue sin asignarse a ningún elemento, lo cual también produce una excepción.
En el caso de un hijo de repetición, las instancias del hijo se analizan tantas veces como las que se compara el patrón. Esto se aplica incluso si se especifica Máx apariciones para el elemento de repetición y el número de apariciones excede el límite superior. Por consiguiente, se debe poder determinar alguna condición de terminación desde el patrón de expresión regular para el elemento. La tabla anterior incluye un ejemplo de un elemento de repetición.
Cuando se realiza el análisis, no se lleva a cabo ninguna exploración adicional para buscar delimitadores de un tipo complejo de nivel superior en los datos del mensaje de entrada que coinciden con el Patrón de datos y que se han asignado a un elemento. Este comportamiento es similar al del método Separación de elementos de datos Longitud fija. Sin embargo, puede codificar una expresión regular que comparará los datos con uno de varios delimitadores posibles.
Cuando se escribe, si se especifica una longitud para un hijo, el valor se rellenará hasta dicha longitud como corresponda. Este comportamiento es similar al del método de Separación de elementos de datos Elementos variables delimitados, pero sin delimitadores.
Si el mensaje incluye un tipo complejo que tiene la Composición establecida en Elección, puede establecer el método de Separación de elementos de datos en Utilizar patrón de datos. En este caso, se utilizan los valores de Patrón de datos de los hijos para resolver la elección. Empezando con el primer hijo, el primer patrón que proporcione una coincidencia determinará qué hijo está presente. Por consiguiente, es posible que el orden de los hijos en una elección sea importante.
Un tipo complejo puede contener hijos de repetición con Máx apariciones sin límite. La longitud y otras propiedades asociadas, por ejemplo la justificación y el relleno, se pueden especificar opcionalmente para los hijos.
Consulte Integridad de modelo de mensaje TDS para conocer las normas que debe seguir al utilizar el método de Separación de elementos de datos Utilizar patrón de datos y consulte Combinaciones de composición y validación de contenido para obtener detalles de los valores válidos de Composición y Validación de contenido.