Skip to content

T4. XML, Json y otras hierbas

XML

estructura

Curso XML

Ejercicio

Dado el esquema anterior, crea el XML que lo implemente.

DTD

El Documento de Definición de Tipos o DTD (Document Type Defintion) por sus siglas inglesas: agenda

Creación de un DTD y su incorporación al XML.

Elementos:

  • EMPTY: nada
  • PCDATA: texto en claro
  • ANY: cualquier tipo
  • nodos: elementos de otro tipo (complejos)

Cantidades:

  • Nada -> 1
  • ? -> 0 o 1
  • + -> 1 o más
  • * -> 0 o más
  • | -> enumerado

Vídeo

Xpath

Lenguaje de consultas Xpath

Introducción a Xpath para realizar consultas sobre diccionarios XML

Funciones

  • Suma: sum(//price) (valor redondeado).
  • Cuenta: count(//title)

En Xpath v2:

  • Mínimo: min(//book/price)
  • Máximo: max(//book/price)
  • Media: avg(//book/price)

Referencias

XQuery

Lenguaje de consultas “similar” a SQL que se apoya en Xpath para operar sobre XML

Validación con XSD

Para validar XML utilizaremos esquemas XSD

Herramientas

Referencias

Feeds: RSS y Atom

Json

Introducción - Wikipedia

Referencias

MariaDB y Json

trabajo con json en MariaDB

Ejercicio

Vamos a jugar con Json en MariaDB gracias a OneCompiler

Vamos a crear la tabla del ejemplo:

# -- Creación de tabla con atributo JSON
CREATE TABLE locations (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,  
    type CHAR(1) NOT NULL,
    latitude DECIMAL(9,6) NOT NULL,
    longitude DECIMAL(9,6) NOT NULL,
    attr JSON, 
    PRIMARY KEY (id)
);
# -- Consulta de descripción de la tabla
DESCRIBE locations;
# -- O el create (para copiar y pegar)
SHOW CREATE TABLE locations;


# -- Añadimos registros
INSERT INTO locations (type, name, latitude, longitude, attr) VALUES 
    ('R', 'Lou Malnatis', 42.0021628, -87.7255662,
      '{"details": {"foodType": "Pizza", "menu": 
    "our-menu"}, 
    "favorites": [{"description": "Pepperoni deep dish", "price": 18.75}, 
         {"description": "The Lou", "price": 24.75}]}');


INSERT INTO locations (type, name, latitude, longitude, attr) VALUES 
    ('A', 'Cloud Gate', 41.8826572, -87.6233039, 
          '{"category": "Landmark", "lastVisitDate": "11/10/2019"}');


Ahora a realizar las siguientes consultas: 1. Obtén todos los campos de todos los registros de la tabla 2. Obtén el nombre del restaurante y tipo de comida de todos los restaurantes 3. Obtén el nombre del restaurante y la lista de especialidades (favorites) de todos los restaurantes 4. Obtén el precio de la primera especialidad

Funciones

[Funciones JSON en MariaDB]

MongoDB y Bson

Búsqueda

db.collection.find( <query>, <projection>, <options> )

Donde: + query: filtramos filas + projection: filtramos columnas + options: límite, máximo, orden, ...

Fuente: Búsquedas en MongoDB

Ejercicio:

Vamos a jugar con Json en MariaDB gracias a OneCompiler

db.employees.insertMany([
  {empId: 1, name: 'Clark', dept: 'Sales', age: 23 },
  {empId: 2, name: 'Dave', dept: 'Accounting', age: 30 },
  {empId: 3, name: 'Ava', dept: 'Sales', age: 25 }
]);
  1. Obtén la lista de todos los empleados
  2. (query) Sólo del departamento ventas
  3. (proyection) Sólo la lista de nombres
  4. (proyection + filtros) Sólo los nombres y edades de los mayores de 23 años.
  5. (funciones) Obtén el más jóven
  6. y el más mayor.

Json y APIs

Yaml

Sencillo, humano, ... sólo no uses tabuladores.

Es un formato que se crea inspirado en python para ser compatible con json y usable por humanos. Es 100 % compatible con Json y tenemos múltiples herramientas de conversión Json2yml y Yml2json.

Su utilización principal es ficheros de configuración, pero como json o xml podría ser empleado para serializar objetos.

Ventajas de YML

  • Comentarios #: los comentarios no existen en otros archivos como json.
  • Anclas & y alias * (<<: *alias): ¿Algo se repite? Pues encapsulado con un ancla &parte e invocado por su alias <<: *parte
# Documento
---
# Definimos el ancla
x-cosa: &repe
  a: juan
  b: pedro
  c: manolo

# Lo usamos por su alias:
uno: 
  <<: *repe
dos: a=juan b=pedro
tres:
  <<: *repe
  j: lola
cuatro: 
  <<: *repe
  d: maria

Fuentes: + restack.io - anchors y alias + medium.com - anchors y alias

Comparativa

Modelo de examen

Desarrolla los siguientes apartados a partir del diagrama:
1. [1p] Crea el XML que lo describa.
2. [1p] Crea el DTD que lo estandarice.
3. [1p] Usando Xpath selecciona ...
4. [1p] Usando Xpath devuelve ...
5. [1p] Convierte a Json.
6. [1p] Convierte a Yml optimizando el archivo con alias

   Partiendo de una tabla en MariaDB que 
   almacena todos ..., pero sólo ...:
7. [1p] Obtén todos los datos de ...
8. [1p] Obtén el … de todos ...

   Partiendo de una colección en MongoDB que 
   almacena todos ..., pero sólo ...:
9. [1p] Obtén todos los datos de ...
10. [1p] Obtén los datos de ... de todos ...

Leyenda: root (amarillo), nodos (rojo), escalares (blanco), valores (azul), atributos (verde).

El examen es muy sencillo. No hay medios puntos. O está bien o está mal.

Tip: Podéis proponeros como ejercicio realizar una esquema cualquiera e intentar resolver el examen con dicho esquema.