Cómo almacenar datos binarios como un atributo en tu ontología
Introducción
Es posible almacenar archivos binarios pequeños (de hasta 100kB, como los avatares de los usuarios de las redes sociales) dentro de una ontología.
Para hacerlo, debes definir una propiedad en el esquema cuyo tipo sea 'archivo' ('file').
Desde el panel de control, ve a la página de creación/edición de la ontología. A continuación, crea una propiedad y selecciona el tipo 'archivo':
From the controlpanel, go to create/edit the ontology page. Then, create a property and select type 'file':
Si seleccionas este tipo de archivo, el esquema va a generar la siguiente propiedad:
Propiedades necesarias:
- data (datos): es la cadena binaria del archivo (puede ser una referencia, como la URL).
- media (medio): son los datos de contexto del archivo, para su posterior procesamiento.
- media.name (nombre del medio): es el nombre del archivo, por ejemplo: "Avatar.png".
- media.storageArea (área de almacenamiento medio): dónde se almacena el archivo: Serialized (Serializado) si los datos son la representación en cadena del archivo (base 64 por ejemplo). Database (Base de datos) para la referencia de la base de datos. URL (URL) si el dato contiene la URL donde se almacena el recurso.
- media.type (tipo de medio): la codificación de los datos.
- media.mime (tipo de contenido del medio): el tipo de contenido o mime del archivo.
Soporte para Java
Tenemos soporte para realizar operaciones con archivos binarios y ontologías, dentro de la librería del protocolo comms.
Para ello hay que compilar el jar o añadir la siguiente dependencia:
<dependency>
<groupId>com.minsait.onesait.platform</groupId>
<artifactId>onesaitplatform-comms-protocol</artifactId>
<version>${onesaitplatform.version}</version>
</dependency>
Hay una clase llamada BinarySerialized dentro del paquete com.minsait.onesait.platform.comms.protocol.util
Esta clase tiene tres métodos:
- getJsonBinary(String fieldName, File file, Mime mime): que devuelve un objeto JsonNode con la estructura de una propiedad binaria, cifrando el fichero en base64.
- public byte[] binaryJsonToFile(JsonNode binaryNode): que lee de un Node (Nodo) de propiedad binaria, y descifra los datos del File (Archivo) en bytes.
- public void binaryJsonToFile(JsonNode binaryNode, String path): realiza el mismo proceso de descifrado, pero en lugar de devolver el array de bytes, crea el File (Archivo) en el path de salida especificado.
Ejemplo en Java
Se proporciona un ejemplo de la clase Main, para ilustrar su funcionamiento. Este ejemplo utiliza el RestClient de nuestra API Java.
entonces, serializamos los datos de la imagen, creando el objeto BinarySerializer y llamando a getJsonbinary().
A continuación, añadimos esta propiedad "image" al nodo de instancia de la ontología, y realizamos la acción POST vía REST.
Por último, realizamos la acción GET para recuperar todas las instancias de la ontología, y en caso de que tengan datos binarios, generar la imagen localmente.