Salta el contingut

PR0376 — Intercanvi i Emmagatzematge d'Informació

Objectius

  • Crear i validar documents JSON complexos
  • Convertir entre formats XML i JSON
  • Executar consultes XQuery sobre col·leccions BaseX
  • Importar i exportar dades entre XML/JSON i bases de dades relacionals

Lliurament

Format: Carpeta comprimida .zip amb nom PR0376_nom_cognom.zip Termini: Consulteu la programació d'aula Eines: VS Code, Docker (BaseX), Python, SQLite


Exercici 1 — JSON d'una API REST

Modela el JSON que retornaria una API REST per a un sistema de gestió d'un videoclub. El JSON ha de representar:

  • Llista de pelicules (almenys 5)
  • Cada pel·lícula: id, titol, any (integer), generes (array de strings), director (objecte amb nom i cognom), actors (array d'objectes amb nom, cognom, personatge), disponible (boolean), preu_lloguer (decimal)
  • Objecte estadistiques global: total_pelicules, generes_disponibles (array), preu_mig

A continuació, crea el JSON Schema corresponent que validi: - any: integer entre 1888 i 2026 - preu_lloguer: decimal entre 0.99 i 9.99 - generes: array de strings, màxim 5 elements - titol: string de 1 a 200 caràcters - id: pattern PEL-[0-9]{4}

Verifica la validació amb jsonschemavalidator.net i inclou captures.


Exercici 2 — Consultes XQuery a BaseX

Engega un contenidor BaseX:

docker run -d \
    --name basex-nom-cognom \
    -p 8984:8984 \
    basex/basexhttp:latest

Crea la col·lecció videoclub i puja el document pelicules.xml (converteix el JSON de l'exercici 1 a XML). Executa i desa en consultes.xq les consultes XQuery per:

  1. Totes les pel·lícules disponibles, ordenades per any descendent
  2. El director amb més pel·lícules al catàleg
  3. Pel·lícules d'un gènere concret (paràmetre $genere)
  4. Llistat d'actors únics (sense duplicats), ordenats alfabèticament
  5. Nombre de pel·lícules per any (agrupació)
  6. Preu mitjà de les pel·lícules disponibles

Exercici 3 — Importació i exportació

Crea una base de dades SQLite videoclub.db amb la taula pelicules:

CREATE TABLE pelicules (
    id TEXT PRIMARY KEY,
    titol TEXT NOT NULL,
    any INTEGER,
    director TEXT,
    disponible INTEGER DEFAULT 1,
    preu_lloguer REAL
);

Escriu un script Python importar.py que: 1. Llegeixi pelicules.xml 2. Insereixi totes les pel·lícules a la taula SQLite 3. Imprimeixi el nombre de registres inserits

Escriu un script Python exportar.py que: 1. Llegeixi totes les pel·lícules de SQLite 2. Generi pelicules_export.xml (format equivalent a l'original) 3. Generi pelicules_export.json (format equivalent a l'original)


Criteris d'avaluació

Criteri Pes
JSON ben format i JSON Schema correcte 30%
Consultes XQuery a BaseX (6 consultes) 40%
Scripts Python d'importació/exportació 30%