T4. XML, Json y otras hierbas¶
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:

Creación de un DTD y su incorporación al XML.
Elementos:¶
EMPTY: nadaPCDATA: texto en claroANY: cualquier tipo- nodos: elementos de otro tipo (complejos)
Cantidades:
- Nada -> 1
- ? -> 0 o 1
- + -> 1 o más
- * -> 0 o más
- | -> enumerado
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¶
Referencias¶
MariaDB y Json¶
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 }
]);
- Obtén la lista de todos los empleados
- (query) Sólo del departamento ventas
- (proyection) Sólo la lista de nombres
- (proyection + filtros) Sólo los nombres y edades de los mayores de 23 años.
- (funciones) Obtén el más jóven
- 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.
- Aprende Yaml en Y minutos
- Validación de yaml con Yaml Linter
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&partee 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.