“¿Por qué tenemos que hacer una base de datos específica para aplicación y un modelo de objeto todo el tiempo? ¿No hay una manera de hacer más dinámica esa parte en vez de hacer todo el código complejo, recopilando y desplegando?, podríamos… no sé… ¿cambiar un archivo config?”En otras palabras, ¿cómo podemos definir el modelo de datos de manera más dinámica y tener todo ese proceso para crear, leer, actualizar y eliminar datos de manera más inmediata? Si había una manera, quería encontrarla. Si no existía, quería inventarla. Y así empezó la visión de lo que eventualmente se convertiría en Carbon LDP. Recibí varias respuestas sobre la complejidad del problema. Sobre varios intentos fallidos para resolverlo dentro de la historia de la industria. Los problemas de rendimiento que surgen cuando intentas hacer un schema de base de datos para crear esquemas dinámicos de bases de datos. Pero una respuesta misteriosa, en particular, despertó mi interés. Alguien simplemente dijo: “Deberías revisar el RDF”. Googleé “RDF” y descubrí que es el acrónimo de Resource Description Framework, un modelo estándar de W3C para el intercambio de datos en la web. Aprendí que RDF tiene características que facilitan la combinación de datos incluso aunque los esquemas subyacentes difieran y eso especialmente le da soporte a la evolución de los esquemas a lo largo del tiempo sin la necesidad de que se cambien todos los consumidores de datos. También aprendí que es parte de una familia de tecnologías y conceptos que conforman esta cosa llamada web semántica. También googleé eso. Resulta que la web, tal como la conocemos, está lejos de alcanzar su máximo potencial. Es una red de documentos principalmente creados para que los humanos los lean. Es difícil para las computadoras entender esa información o interoperarla con otra porque solo está semiestructurada. Carece de la semántica o significado que las computadoras usan. La web semántica fue una visión para incorporar la semántica en la arquitectura existente de la web para que estas redes de documentos se puedan convertir en redes de datos. En lugar de tener un library gigante de páginas web, por ejemplo, imagina la web como una enorme base de datos. Esa es la idea general. Pero en esa época, era un concepto muy académico, solo dentro de la esfera de entusiastas y doctores en Inteligencia Artificial. Y esto fue mucho antes de que la IA se popularizara; antes de que Watson le ganara al campeón de Jeopardy y cuando todavía la mayoría de la gente creía que la IA era un sueño inalcanzable. Era un concepto tan académico y confuso que estoy seguro me llevó tres años estudiarlo hasta que se me prendió el foco. Ese momento de iluminación me llegó cuando me di cuenta de que el modelo RDF de grafos era una solución viable para el problema de hacer más dinámicos los sistemas de datos. ¿Por qué? Porque no hay una estructura inherente en una base de datos de grafos RDF. No hay esquemas rígidos que definir. La estructura surge de los mismos datos, así que los cambios estructurales se pueden hacer simplemente cambiando los datos. Un sistema debidamente diseñado puede funcionar dinámicamente contra estos cambios con una disminución en la necesidad de reescribir código. Esto es inmensamente poderoso, pero engañosamente sencillo. En pocas palabras, así es como funciona. Un grafo RDF es solo una colección de tres simples declaraciones llamadas “triples”. Estas tienen un tipo de sujeto, predicado y objeto, igual que la estructura de la oración que aprendimos en la primaria. El RDF aprovecha los URI de la web para identificar cosas así que, técnicamente, la misma declaración sería algo más parecido a esto:
Aquí podemos ver por qué usamos el término Linked Data. Esa declaración crea un enlace entre el recurso Jack
y el recurso Jill
a través de la propiedad tieneAmigo
. Es parecido a un hipervínculo, pero es más poderoso porque la naturaleza de la relación está descrita semánticamente. En lugar de tener un enlace arbitrario entre un recurso y otro (como sucede con los hipervínculos tradicionales), este link tiene significado. Por ejemplo, un hipervínculo tradicional entre el blog de Jack y el Blog de Jill no dice nada acerca de la naturaleza de la relación. Pero este enlace identifica que Jack y Jill son personas y que la relación es una amistad. Así que esto está impregnado de significado (semántica) y nos referimos a las entidades de datos, no nada más a páginas web.
Ahora, supongamos que queremos agregar una nueva propiedad de datos. En una base de datos relacional tradicional, tenemos que agregar una nueva columna al esquema de base de datos. Seguramente vamos a reescribir algunos SQL queries. Probablemente también tengamos que agregar una nueva propiedad en el código del software (tanto en el servidor y como en el front-end). Sin embargo, dado que un grafo RDF es solo una lista de declaraciones de tres partes, todo lo que tenemos que hacer es agregar uno nuevo a la lista. Sin tener que hacer cambios en el esquema, podemos darle a Jack una nueva propiedad como un correo electrónico, simplemente insertando un triple como este…
<http://example.com/people#jack><http://example.com/person#hasEmail> "jack@example.com"
Podemos inventar nuevas propiedades sobre la marcha y colocarlas en la base de datos contra los sujetos apropiados, como Jack y Jill, ya sea con valores literales (por ejemplo, series, fechas, números) o con un valor que es otro URI (un enlace a otra entidad de datos). No necesitas crear un esquema rígido. No necesitas definir ninguna tabla o columna nueva ni relaciones clave principales/externas. De hecho, puedes pensar en cualquier base de datos RDF solo como una tabla con tres columnas para sujeto, predicado y objeto. Cuando queramos cambiar los datos o la estructura de los datos, solo tenemos que insertar nuevas declaraciones.
La estructura surge de forma dinámica de las propiedades que definimos, que son en si mismas datos (no esquemas) y de los enlaces que se crean entre los recursos. Los sujetos, los objetos y los valores literales son nodos en un grafo y las propiedades son enlaces entre ellos. De esta manera, podemos ver cómo un grafo complejo de relaciones puede surgir de una simple pila de triples en la base de datos. El grafo puede existir en una base de datos o extenderse entre varias. De hecho, todo el universo se puede describir mediante simples declaraciones de tres partes en una sola tabla sin esquema (la base de datos RDF o triplestore). Esta flexibilidad libre de esquemas significa que no necesitamos conocer todos los requerimientos para nuestros datos siguientes. Podemos construir una app y dejar que los datos evolucionen conforme avanzamos. Podemos escribir la lógica de la aplicación para entender el significado de las propiedades específicas que inventamos o podemos codificar la app para que responda a esas propiedades genéricamente (basado en los tipos de datos). En otras palabras, podemos hacer rápidos cambios a cualquier aplicación solamente cambiando los datos. Dado que la estructura básica del mismo RDF no cambia (siempre es una lista de declaraciones de tres partes), raras veces vamos a cambiar la manera como el código lee estas declaraciones. Aunque expliqué esto a grandes rasgos, resulta ser una solución viable para el rápido desarrollo, evolución e integración de aplicaciones. Así que, quienquiera que haya sido el que respondió a mi pregunta hace tantos años, tenía razón. El RDF sería la clave para crear sistemas centrados en datos de una manera mucho más rápida y dinámica. Y, además, fue en esto en lo que nos basamos para el modelo de datos que Carbon LDP usaría. Da la casualidad de que esta elección de diseño hace que las aplicaciones Carbon LDP sean inherentemente aplicaciones de web semántica o soluciones Linked Data, aunque eso es solo un maravilloso efecto secundario; no era el objetivo original. La meta siempre fue algo sencillo:- Hacer más rápido y fácil la creación de aplicaciones
- Hacer más fácil modificarlas con el tiempo
- Hacer más fácil integrarlas (enlaces) y aumentar su valor