Semestre i: Educ. inteligente

Práctica 3: Utilizando promesas y XML

Objetivos

Durante esta práctica, los alumnos serán capaces de:

Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.

Descripción de la actividad

Esta práctica puede ser elaborada de manera individual o en parejas.

Tus archivos fuente de JavaScript deben comenzar con un comentario que contenga el título de la práctica, la fecha y los datos personales de los autores (nombre y matrícula). Por ejemplo:

/*----------------------------------------------------------
 * Práctica 3: Utilizando promesas y XML
 * Fecha: 08-Oct-2018
 * Autores:
 *           A01166611 Pepper Pots
 *           A01160611 Anthony Stark
 *----------------------------------------------------------*/
  1. Instala el módulo xml2js de Node. Desde la terminal teclea:

    npm install xml2js

    Revisa la documentación de xml2js para ver como usar este módulo.

  2. Crea un directorio llamado practica3. Coloca en este directorio el siguiente documento XML llamado movies.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- Archivo: movies.xml -->
    
    <movies>
    
        <!-- Esta es una de las mejores películas de todos 
             los tiempos. -->
        <film name="The Godfather" year="1972">
            <cast>Marlon Brando</cast>
            <cast>Al Pacino</cast>
            <cast>Diane Keaton</cast>
            <director>Francis Ford Coppola</director>
        </film>
    
        <!-- Esta es la película más taquillera del 2008. -->
        <film name="The Dark Knight" year="2008">
            <cast>Christian Bale</cast>
            <director>Christopher Nolan</director>
            <cast>Maggie Gyllenhaal</cast> 
                <!-- ¿Dónde quedó Katie Holmes? -->
            <cast>Heath Ledger</cast>
            <cast>Michael Caine</cast>
            <cast>Gary Oldman</cast>
            <cast>Morgan Freeman</cast>
        </film>
    
        <film name="The Mission" year="1986">
            <!-- La música fue escrita por Ennio Morricone -->
            <director>Roland Joffé</director>
            <cast>Robert De Niro</cast>
            <cast>Jeremy Irons</cast>
        </film>
    
        <film name="Black Swan" year="2010">
            <director>
                Darren Aronofsky
            </director>
            <cast>
                Natalie Portman
            </cast>
            <cast>
                Mila Kunis
            </cast>
            <cast>
                Vincent Cassel
            </cast>
            <cast>
                Winona Ryder
            </cast>
        </film>
    
        <film name="The Hobbit: An Unexpected Journey" year="2012">
        <director>Peter Jackson</director><cast>Ian McKellen</cast>
        <cast>Martin Freeman</cast><cast>Andy Serkis</cast></film>
    
        <film name="THX 1138" year="1971"/>
    
        <film name="The Avengers" year="2012">
            <director>Joss Whedon</director>
            <cast>Robert Downey Jr. <!-- Iron Man --></cast>
            <cast>Scarlett Johansson <!-- Black Widow --></cast>
            <cast>Chris Evans <!-- Captain America --></cast>
            <cast>Samuel L. Jackson <!-- Nick Fury --></cast>
            <cast>Chris Hemsworth <!-- Thor --></cast>
            <cast>Mark Ruffalo <!-- The Incredible Hulk --></cast>
        </film>
    
    </movies>
    
  3. Escribe un programa en Node.js llamado peliculas.js que, mediante el uso de promesas§, lea y realice el parseo del archivo movies.xml y que imprima en la salida estándar todas las películas ahí contenidas de la manera como se muestra a continuación:

    The Godfather (1972), director: Francis Ford Coppola
    The Dark Knight (2008), director: Christopher Nolan
    The Mission (1986), director: Roland Joffé
    Black Swan (2010), director: Darren Aronofsky
    The Hobbit: An Unexpected Journey (2012), director: Peter Jackson
    THX 1138 (1971)
    The Avengers (2012), director: Joss Whedon
    

    Notar la salida del caso especial que ocurre cuando una película no tiene información del director (THX 1138).

  4. Escribe otro programa en Node.js llamado actores.js que, mediante el uso de promesas§, lea y realice el parseo del archivo movies.xml y que imprima en la salida estándar todas los actores ahí contenidos de la manera como se muestra a continuación:

    The Godfather
      Marlon Brando
      Al Pacino
      Diane Keaton
    
    The Dark Knight
      Christian Bale
      Maggie Gyllenhaal
      Heath Ledger
      Michael Caine
      Gary Oldman
      Morgan Freeman
    
    The Mission
      Robert De Niro
      Jeremy Irons
    
    Black Swan
      Natalie Portman
      Mila Kunis
      Vincent Cassel
      Winona Ryder
    
    The Hobbit: An Unexpected Journey
      Ian McKellen
      Martin Freeman
      Andy Serkis
    
    THX 1138
    
    The Avengers
      Robert Downey Jr.
      Scarlett Johansson
      Chris Evans
      Samuel L. Jackson
      Chris Hemsworth
      Mark Ruffalo
    
    

    Notar que hay una línea en blanco después de cada grupo de actores de una misma película.



§ NOTA: Las promesas se pueden crear explícitamente usando el constructor de Promise correspondiente o a través del módulo Promisify Node.


¿Qué se debe entregar?

Crea un archivo tarball con todo el contenido del directorio practica3. Nombra a este archivo practica3.tgz. Este archivo se puede crear desde la terminal tecleando lo siguiente (asegúrate de que te encuentres en el mismo nivel que el directorio practica3):

tar czf practica3.tgz practica3

Instrucciones para subir archivo

Para entregar el archivo practica3.tgz, ingresa los siguientes datos:

Solicitar NIP

Si la práctica fue desarrollada en pareja, basta que solo uno de los miembros la entregue.

La fecha límite es el lunes 8 de octubre.