Saltar al contenido principal

Recursos

Configuración de recursos "resources"​

Existen determinadas funciones que, además de sus parámetros dinámicos, necesitan una configuración estática complementaria. Se trata, por ejemplo, de tablas de consulta (lookup) o de funciones de la técnica de control con anchos de registro o rangos de conteo. Esta configuración estática se pasa a la llamada de la función como último parámetro en forma de objeto JSON.

La configuración directamente en la llamada de la función resulta adecuada para unos pocos parámetros individuales; en el caso de configuraciones extensas, por ejemplo una clasificación o un filtro, estos recursos pueden trasladarse a un área propia del módulo math para mejorar la legibilidad del conjunto de fórmulas. Además, al trasladarlos, la misma configuración puede reutilizarse en distintos puntos del conjunto de fórmulas.

Mediante los llamados recursos es posible

  • almacenar texto para la configuración o para un procesamiento posterior,
  • trasladar objetos JSON complejos del conjunto de fórmulas a un área de la configuración prevista para ello y
  • permitir, mediante los llamados decodificadores, un proceso de tratamiento de datos arbitrarios (texto o binarios).

Estos recursos se inicializan UNA SOLA VEZ al iniciar el funcionamiento de medición y pueden configurarse del siguiente modo

{
"module":"math1",
"factory":"mathmodule",
"config": {

...

"resources": {
"someTextResource": [

< LINES OF TEXT >

],
"someObjectResource": {

< JSON STYLE Configuration >

},
"someDecodableResource": {
"decoder": [

< DECODERS >

],
"value": "someInitialResourceValueString"
}
...
}
}
}

Se distingue entre

  • recursos de texto puros, que especifican el texto de forma similar al parámetro math, como una única cadena o una lista de cadenas (en forma de matriz JSON). Las cadenas individuales de la lista se unen mediante '\n' antes de su uso. (en el ejemplo anterior, someTextResource)
  • recursos de objeto, que proporcionan objetos JSON representables para configurar funciones en el texto de las fórmulas (en el ejemplo anterior, someObjectResource)

  • y recursos decodificables, que aplican sucesivamente una secuencia de procesos de tratamiento (decodificadores) a un paquete de datos inicial y proporcionan el resultado igualmente como paquete de datos (en el ejemplo anterior, someDecodableResource). Este paquete de datos puede ser un texto legible, pero también un paquete de datos binario.

Acceso a los recursos y conversión de recursos​

El acceso a los recursos solo puede realizarse exclusivamente en la posición del último parámetro de una función que acepte un objeto JSON como parámetro

someJsonObjectAcceptingFunction( ... , {$ref:'someResource'} )

y devuelve típicamente un objeto JSON. Una excepción es, por ejemplo, la función lookup(), que espera de la recurso un bloque de texto con una cabecera de datos propietaria y una secuencia de valores de datos para rellenar la tabla.

Si, por el contrario, se espera una representación en forma de cadena, el contenido del recurso puede convertirse del siguiente modo

someStringAcceptingFunction( ... , sResource({$ref:'someResource'}), ... )

En cualquier caso, es responsabilidad del usuario proporcionar los datos de modo que la función utilizada o el conjunto de fórmulas pueda interpretarlos y procesarlos.

Ejemplo: Suministro de una configuración basada en texto a partir de un recurso de texto:​

En el siguiente ejemplo se espera la configuración de una tabla de consulta en forma de formato de texto propietario. Los puntos de datos individuales siguen a las líneas de cabecera.

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": "someTextAcceptingFunction( ... , {$ref:'someText'} );",
"resources": {
"someText": [
"IN kPa 0.0 0.167751 161"
, "OUT l"
, ""
, "0"
, "42.942"
, "87.924"
, "134.946"
, "184.008"
, "235.11"
, "288.252"
, "343.434"
, "400.656"
, "459.918"
, "521.22"
, "584.562"
, "..."
],
...
}
}
}

Otros ejemplos de aplicación podrían ser:

  • Un texto de correo electrónico predefinido para notificaciones, en el que los marcadores de texto se sustituyen por valores concretos en el conjunto de fórmulas.

  • Una estructura XML para un subsistema que debe configurarse con ella para una tarea de medición.

Ejemplo: Suministro de un objeto JSON esperado a partir de un recurso de objeto​

En el siguiente ejemplo se espera una configuración estática de función en forma de objeto JSON

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": "someObjectAcceptingFunction( ... , { someParam: value } );"
}
}

Esta puede proporcionarse mediante un recurso de objeto del siguiente modo

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": "someObjectAcceptingFunction( ... , {$ref:'someObject'} );",
"resources": {
"someObject": {
someParam: value
},
...
}
}
}

Ejemplo: Suministro de una cadena procesada a partir de recursos​

En el siguiente ejemplo, la función "someObjectAcceptingFunction" espera una cadena procesada (como, por ejemplo, el contenido de un archivo o una representación decodificada o descomprimida de la cadena; véase la sección "decoder" para más detalles).

Esto puede realizarse mediante un recurso decodificable del siguiente modo

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": "someObjectAcceptingFunction({$ref:'someDecodableResource'});",
"resources": {
"someDecodableResource": {
"decoder": [
"someFirstDecoderStage someFirstFirstDecoderArgument ... someLastFirstDecoderArgument",
...,
"someLastDecoderStage someFirstLastDecoderArgument ... someLastLastDecoderArgument"
],
"value": "someInitialStringValue"
}
}
}
}

Aquí, primero la primera etapa del decodificador "someDecoderStageFIRST" convierte el valor de cadena inicial del recurso "someInitialValueString" en un resultado intermedio, y todas las etapas siguientes calculan el siguiente resultado intermedio a partir del anterior; la última etapa devuelve su resultado intermedio como resultado final en forma de valor JSON de tipo cadena.

Nota: Si este resultado debe utilizarse donde se espera una cadena, debe convertirse al acceder mediante "sResource", como se ha descrito más arriba.

Decodificación de recursos "decoder"​

La tarea de un decodificador es convertir una cadena de origen en una cadena de destino.

Actualmente están disponibles los siguientes decodificadores

  • file para la lectura de un archivo
  • base64 para la decodificación de una cadena con formato base64
  • unzip para descomprimir el contenido de un archivo comprimido con gzip

Además, un decodificador de uso muy flexible

  • system para la invocación de procesos del sistema

Decodificador "file"​

El decodificador "file" sirve para leer un archivo "/sdi/config/some/file/name", del siguiente modo

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": "someJsonValueAcceptingFunction({$ref:'someFileResource'});",
"resources": {
"someFileResource": {
"decoder": [
"file"
],
"value": "some/file/name"
}
}
}
}

Si como "value" del decodificador se especifica una ruta relativa, esta se refiere al directorio de configuración de smartCORE /sdi/config/. No obstante, también puede especificarse una ruta absoluta.

Decodificador "unzip"​

Para descomprimir archivos comprimidos con gzip puede utilizarse el decodificador "unzip", por ejemplo del siguiente modo

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": "someJsonValueAcceptingFunction({$ref:'someFileResource'});",
"resources": {
"someFileResource": {
"decoder": [
"file",
"unzip"
],
"value": "some/compressed/file/name.gz"
}
}
}
}

Decodificador "base64"​

Para decodificar archivos codificados en base64 puede utilizarse el decodificador "base64", por ejemplo del siguiente modo

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": "someJsonValueAcceptingFunction({$ref:'someFileResource'});",
"resources": {
"someFileResource": {
"decoder": [
"file",
"base64"
],
"value": "some/base64/encoded/file.b64"
}
}
}
}

Decodificador "system"​

Para la inicialización de recursos mediante llamadas arbitrarias al sistema puede utilizarse el decodificador "system". Este admite parámetros de llamada. Ejemplo:

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": "someJsonValueAcceptingFunction({$ref:'someEditedResource'});",
"resources": {
"someEditedResource": {
"decoder": [
"file",
"system sed -e 's/hello/world/g'"
],
"value": "some/source/file"
}
}
}
}