Se puede
decir sin lugar a dudas que Internet y la web nos ha cambiado la vida. De
hecho, la web es la mayor fuente de información que existe en la actualidad.
Pero, ¿En qué modelo de datos está basada
la web? En general decimos que es el modelo de datos semi-estructurado.
Después de este post espero que seas capaz de distinguir entre el modelo de datos
estructurado del que hemos hablado en un artículo anterior y el modelo de datos
semi-estructurado. Además, podrás observar que la mayoría de las veces los
datos semi-estructurados se refieren a datos con estructura arborescente y
explicar por qué las operaciones de navegación en árbol son importantes en
formatos como XML y JSON.
|
Como se combina el modelo de datos semiestructurado con los datos estructurados |
Pongamos
por ejemplo una página web muy sencilla, sin una gran cantidad de contenido o
estilización y sin ni siquiera enlaces a otras páginas. Vamos a echar un
vistazo al código HTML correspondiente. Este código es utilizado por el
navegador para que pueda procesar el HTML. Observa algunas cosas en estos
datos.
|
Ejemplo sencillo de HTML |
Todos los
datos están incluidos dentro de los bloques <HTML> y </HTML>. De
manera similar también tenemos un comienzo y un final de cuerpo, un comienzo y
un final de cabecera, un comienzo y un final de lista y un comienzo y un final
de párrafo. Por todas partes tenemos un bloque anidado dentro de un bloque más grande.
El segundo
punto a observar es que a diferencia de una estructura relacional hay múltiples
elementos de lista y múltiples párrafos, y cualquier documento único tiene un
número diferente de ellos. Esto significa que aunque el objeto de datos tenga cierta
estructura, sin embargo es más flexible. Esta es la característica distintiva
del modelo de datos semi-estructurado.
XML
(eXtensible Markup Language) es un estándar de representación de datos. Se
puede pensar en XML como una generalización de HTML donde los elementos, es
decir, los marcadores de inicio y de final dentro de los corchetes angulares,
pueden ser cualquier cadena, y no como los que permite el estándar HTML.
Veamos un
ejemplo de un caso biológico. Como se
puede ver, hay dos elementos llamados sampleattribute.
Son estructuralmente diferentes porque tienen diferente número de subelementos
llamados value.
|
XML permite consultar tanto el esquema como los datos |
Otra
cuestión interesante sobre el procesamiento de datos XML es que podemos reconocer
realmente los elementos de la estructura. Por ejemplo, es perfectamente posible
preguntar: ¿Cuál es el nombre del
elemento que contiene un sub-elemento cuyo contenido textual es CellType?
Como se puede ver, podemos obtener dos resultados, sampleattribute y experimentalfactor,
ya que sampleattribute tiene un
sub-elemento denominado category y experimentalfactor tiene un nombre de
sub-elemento, y cada uno de estos sub-elementos tiene el valor CellType. No podemos realizar una
operación de este tipo en un modelo de datos relacional. Por ejemplo, no
podemos decir qué relación tiene una columna con un valor John.
La misma
idea también se puede ver en JSON (Java Script Object Notation), que es un formato
muy popular utilizado para muchos datos diferentes como los de Twitter y
Facebook. Considera el siguiente ejemplo, donde todos los formatos parecen
diferentes. Tenemos una estructura anidada similar que difiere en que sus
listas contienen otras listas que contienen tuplas que consisten en parejas de
clave-valor. Por lo tanto, las parejas de clave-valor son nombres de
propiedades atómicas junto con sus valores. Pero una manera de generalizar
todas estas formas diferentes de datos semi-estructurados es modelarlos como árboles.
|
JSON |
Volvamos
al XML. En el siguiente gráfico el lado izquierdo muestra un documento XML y el lado derecho muestra el
árbol correspondiente. Puesto que el objeto superior del elemento raíz es el
documento, también es la raíz del árbol. Bajo el documento tenemos un elemento report con el autor y la fecha por
debajo de él, y también un elemento paper
con el título, el autor y la fuente por debajo de él. Los valores reales son el
contenido textual de un elemento. Puesto que un elemento de datos de texto no
puede tener componentes adicionales, estos valores de texto son siempre las
hojas del árbol.
|
Estructura de datos en árbol |
Modelar un
documento como un árbol tiene ventajas significativas. Un árbol es una
estructura de datos popular que permite lo que se conoce como acceso de
navegación a los datos. Imagina que estás situado en el nodo paper. Puedes realizar una operación getParent y navegar por el documento, o
puedes realizar una operación getChildren
para obtener el título, el autor y la fuente. Incluso puedes realizar una operación
getSiblings hasta llegar al nodo report. También puedes hacer una
consulta textual, como que cadenas contienen la subcadena data y buscar su ruta desde el documento hasta los nodos de texto.
|
Operaciones en un árbol |
Podemos ver
como las consultas pueden ser evaluadas en el árbol. Por ejemplo, supongamos
que tenemos la consulta “¿Quién es el
autor del modelo de datos de la consulta XML?”. En un esquema de evaluación
podemos navegar hacia arriba desde el nodo de texto al título, al nodo paper, y luego navegar hacia abajo al
autor y luego a Don Robie. ¿Cómo podemos saber que tenemos que llegar
hasta paper antes de invertir la dirección? El nodo paper es el antecesor común
más bajo del arbol del nodo autor y del nodo del modelo de datos de la consulta
XML.
Volveré a tratar el modelo de datos semi-estructurado en un artículo
posterior.
0 comentarios:
Publicar un comentario
Gracias por participar en esta página.