Articulo de referencia

SDXF

SDXF ( Formato de Intercambio de Datos Estructurados ) es un formato de serialización de datos definido por RFC 3072. [ 1 ] Permite que datos estructurados arbitrarios de difere...

SDXF ( Formato de Intercambio de Datos Estructurados ) es un formato de serialización de datos definido por RFC 3072. [ 1 ] Permite que datos estructurados arbitrarios de diferentes tipos se ensamblen en un archivo para intercambiarlos entre computadoras arbitrarias.

La capacidad de serializar datos arbitrariamente en un formato autodescriptivo recuerda a XML , pero SDXF no es un formato de texto (como XML); SDXF no es compatible con editores de texto. La longitud máxima de un dato (compuesto o elemental) codificado con SDXF es de 16.777.215 bytes (uno menos de 16 MB ). 

Formato de estructura técnica

Los datos SDXF pueden expresar niveles arbitrarios de profundidad estructural. Los elementos de datos son autodocumentados , lo que significa que los metadatos (numéricos, cadenas de caracteres o estructuras) están codificados en los propios elementos. El diseño de este formato es simple y transparente: los programas informáticos acceden a los datos SDXF mediante funciones bien definidas, lo que evita que los programadores tengan que aprender la estructura precisa de los datos.

La palabra "intercambio" en el nombre refleja otro tipo de transparencia: las funciones SDXF proporcionan una conversión de datos independiente de la arquitectura del ordenador. Las serializaciones se pueden intercambiar entre ordenadores (a través de la red directa, transferencia de archivos o CD) sin necesidad de medidas adicionales. Las funciones SDXF del receptor se encargan de la adaptación arquitectónica.

Los datos estructurados son datos con patrones predecibles más complejos que las cadenas de texto. [ 2 ]

Ejemplo

Un ejemplo comercial: dos empresas desean intercambiar facturas digitales. Las facturas tienen la siguiente estructura jerárquica anidada:

FACTURA │ ├─ NÚMERO_DE_FACTURA ├─ FECHA ├─ DIRECCIÓN_REMITENTE │ ├─ NOMBRE │ ├─ NOMBRE │ ├─ CALLE │ ├─ ZIP │ ├─ CIUDAD │ └─ PAÍS ├─ DIRECCIÓN_DESTINATARIO │ ├─ NOMBRE │ ├─ NOMBRE │ ├─ CALLE │ ├─ ZIP │ ├─ CIUDAD │ └─ PAÍS ├─ SUMA_DE_FACTURA ├─ ARTÍCULOS INDIVIDUALES │ ├─ ARTÍCULO INDIVIDUAL │ │ ├─ CANTIDAD │ │ ├─ NÚMERO_DE_ARTÍCULO │ │ ├─ TEXTO_DEL_ELEMENTO │ │ ├─ CARGA │ │ └─ SUMA │ └─ ... ├─ CONDICIONES ...

Estructura

El elemento básico es un fragmento. Una serialización SDXF es, en sí misma, un fragmento. Un fragmento puede constar de varios fragmentos más pequeños. Los fragmentos se componen de un prefijo de encabezado de seis bytes, seguido de los datos. El encabezado contiene un identificador de fragmento como un número binario de 2 bytes (Chunk_ID), la longitud y el tipo de fragmento. Puede contener información adicional sobre compresión, cifrado, etc.

El tipo de fragmento indica si los datos consisten en texto (una cadena de caracteres), un número binario (entero o de coma flotante) o si el fragmento es una composición de otros fragmentos.

Los bloques estructurados permiten al programador empaquetar construcciones jerárquicas como la FACTURA anterior en una estructura SDXF de la siguiente manera: A cada término con nombre (FACTURA, NÚMERO DE FACTURA, FECHA, DIRECCIÓN_REMITENTE, etc.) se le asigna un número único en el rango de 1 a 65535 (entero binario sin signo de 2 bytes). El bloque superior/exterior se construye con el ID FACTURA (es decir, con el ID de bloque numérico asociado) como un bloque estructurado en el nivel 1. Este bloque FACTURA se rellena con otros bloques en el nivel 2 y superiores: NÚMERO DE FACTURA, FECHA, DIRECCIÓN_REMITENTE, DIRECCIÓN_DESTINATARIO, SUMA_FACTURA, ARTÍCULOS INDIVIDUALES, CONDICIONES. Algunos bloques de nivel 2 se estructuran a su vez como para las dos direcciones y ARTÍCULOS INDIVIDUALES.

Para una descripción precisa, consulte la página 2 del RFC o, alternativamente, aquí. [ 3 ]

SDXF permite al programador trabajar con estructuras SDXF mediante un conjunto de funciones compacto. Solo hay unas pocas:

Para leer fragmentos, se deben utilizar las siguientes funciones:
inicial
Para inicializar la estructura de parámetros y vincularla al Chunk existente.
ingresar
Para acceder a un fragmento estructurado, el primer fragmento de esta estructura está listo para ser procesado.
dejar
Para abandonar la estructura actual. Esta estructura ya está vigente.
próximo
Pasa al siguiente fragmento si existe (de lo contrario, abandona la estructura actual).
extracto
Para transferir (y adaptar) datos del fragmento actual a una variable de programa.
seleccionar
Para buscar el siguiente fragmento con un ID de fragmento determinado y actualizarlo.
Para construir los fragmentos, se deben utilizar las siguientes funciones:
inicial
Para inicializar la estructura de parámetros y vincularla a un búfer de salida vacío para crear un nuevo Chunk.
crear
Crea un nuevo fragmento y agrégalo a la estructura existente (si existe).
añadir
Agregar un fragmento completo a una estructura SDXF.
dejar
Para abandonar la estructura actual. Esta estructura ya está vigente.

El siguiente pseudocódigo crea facturas:

init ( sdx , buffersize = 1000 ); // inicializar la estructura de parámetros SDXF sdx create ( sdx , ID = INVOICE , datatype = STRUCTURED ); // inicio de la estructura principal create ( sdx , ID = INVOICE_NO , datatype = NUMERIC , value = 123456 ); // crear un Chunk elemental create ( sdx , ID = DATE , datatype = CHAR , value = "2005-06-17" ); // una vez más create ( sdx , ID = ADDRESS_SENDER , datatype = STRUCTURED ); // Subestructura create ( sdx , ID = NAME , datatype = CHAR , value = "Peter Somebody" ); // elemento. Chunk dentro de esta subestructura ... create ( sdx , ID = COUNTRY , datatype = CHAR , value = "France" ); // el último dentro de esta subestructura leave ; // cerrando la subestructura ADDRESS_SENDER ... leave ; // cerrando la subestructura INVOICE

[ 4 ]

El pseudocódigo para extraer la estructura INVOICE podría ser similar a este:

init ( sdx , container = puntero a una estructura SDXF ) ; // inicializa la estructura de parámetros SDXF sdx enter ( sdx ); // se une a la estructura INVOICE. // while ( sdx . rc == SDX_RC_ok ) { switch ( sdx . Chunk_ID ) { case INVOICE_NO : extract ( sdx ); invno = sdx . value ; // la función extract coloca valores enteros en el campo de parámetros 'value' break ; // case DATE : extract ( sdx ); strcpy ( invdate , sdx . data ); // sdx.data es un puntero a la cadena de caracteres extraída break ; // case ADDRESS_SENDER : enter ( sdx ); // Usamos 'enter' porque ADDRESS es un Chunk estructurado do while ( sdx . rc == SDX_RC_ok ) // bucle interno ... break ; ... } }

SDXF no está diseñado para ser legible ni para ser modificado por editores de texto. Una estructura editable relacionada es SDEF (Formato de Datos Estructurados Editable). [ 5 ]

Véase también

Referencias

  1. ^ Wildgrube, Max (marzo de 2001). "RFC-3072" .
  2. Podría argumentarse que el término "estructurado" se usa aquí en el mismo sentido que en la programación estructurada ; así como no hay instrucciones goto en un programa (estrictamente) estructurado, tampoco hay punteros ni referencias en SDXF. Sin embargo, este no tiene por qué ser el origen del nombre.
  3. "SDXF - 2. Descripción del formato SDXF" . Pinpi.com . Consultado el 10 de septiembre de 2013 .
  4. "6.3 El proyecto PRNT: un ejemplo completo" . PINPI . Consultado el 10 de septiembre de 2013 .
  5. "Sitio SDEF (de Archive.org)" . Archivado del original el 7 de marzo de 2016.
  • Capítulo introductorio de una descripción más detallada
Obtenido de " https://en.wikipedia.org/w/index.php?title=SDXF&oldid=1210700456 "