¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. XML práctico
  3. Aplicación
Extrait - XML práctico Bases esenciales, conceptos y casos prácticos (2ª edición)
Extractos del libro
XML práctico Bases esenciales, conceptos y casos prácticos (2ª edición) Volver a la página de compra del libro

Aplicación

Introducción

Los siguientes ejemplos le permiten poner en práctica lo que ha aprendido hasta ahora. En el primer ejemplo, se trata de diseñar la gramática DTD que valide los documentos XML que describen una lista de libros. A continuación, se propone un pequeño truco para los programadores en PHP para poder probar fácilmente si un documento XML está bien formado y es válido. El segundo ejemplo trata de la elaboración de esquemas para la descripción de una librería. Finalmente, se propone un último truco para poner en práctica la utilización de la recomendación XPath.

DTD: la librería

Este ejercicio es muy frecuente. De hecho, la librería y los libros que vende constituyen elementos complejos interesantes. La librería posee una lista de libros ordenados por categorías y los libros se pueden describir como la asociación de los siguientes elementos:

  • autor;

  • título;

  • precio;

  • editor;

  • cantidad.

Además, un libro debe asociarse a una categoría, identificada por un código. Una categoría posee un título y, a veces, un comentario.

Teniendo en cuenta esta información, vamos a ver cómo componer la DTD de este ejemplo.

1. Definición de la gramática de la lista de libros

Desde el elemento más global hasta los elementos terminales, este es el orden de descripción de los elementos:

  • Librería: el elemento raíz de nuestro ejemplo, compuesto de una lista de productos (el elemento Libros) y el conjunto de categorías (el elemento Categorías).

  • Libros: lista de productos de la librería.

  • Categorías: lista de categorías de libros.

  • Producto: libro.

  • Categoría: categoría de libro.

  • Precio: precio de un libro.

  • Autor: autor del libro.

  • Título: título del libro.

  • Editor: editor del libro.

  • Cantidad: número de productos disponibles a la venta.

De este modo, elemento por elemento, esta sería la gramática DTD de nuestra librería.

El elemento Librería:


<!ELEMENT LIBRERÍA ( LIBROS, CATEGORÍAS ) >
 

La librería se compone de libros (de productos) y de categorías.

Los elementos Libros y Producto:


<!ELEMENT LIBROS ( PRODUCTO+ ) >   
<!ELEMENT PRODUCTO ( AUTOR | PRECIO | EDITOR | CANTIDAD | TÍTULO )* > 
<!ATTLIST PRODUCTO CAT IDREF #REQUIRED >
 

Tenga en cuenta que los productos poseen el atributo CAT como referencia a una categoría asociada....

Comprobar si un documento XML es válido en PHP

Para los programadores PHP, aquí tienen un truco interesante que permite comprobar si un documento XML está bien formado y es válido según su DTD.

PHP es un lenguaje de script que se incluye dentro del código HTML de una página Web. El código PHP insertado en las páginas (entre las etiquetas <?php y ?>) es procesado por el servidor web (si está correctamente configurado con PHP). Para utilizar PHP, antes deberá instalar un servidor web como Apache (http://www.apache.org) y luego el analizador PHP (http://www.php.net). O más fácil, puede instalar EasyPHP, que reagrupa un servidor Apache, una base de datos MySQL y el analizador PHP (http://www.easyphp.org).

En este ejemplo, no nos detendremos en la sintaxis del lenguaje PHP ya que no es el objeto de este libro. Tenga en cuenta que PHP ofrece la posibilidad de gestionar los documentos XML y ofrece una librería que permite interpretar cualquier documento XML gracias a un intérprete (Analizador) DOM (retomaremos el tema de los analizadores más adelante en este libro, dentro del capítulo El protocolo SOAP y los analizadores XML - sección ¿DOM o SAX?).

El siguiente ejemplo utiliza una funcionalidad que se ofrece desde la versión 4.3.0 de PHP. Así, antes de probar este script, verifique que su versión de PHP es, al menos...

XMLSchema: la biblioteca

El siguiente también es un ejemplo típico: se trata de construir el esquema de descripción de una biblioteca. Siguiendo este tutorial comprenderá lo poderosos que son los esquemas XML y, en particular, la contribución de la definición de tipos en la gramática. Los esquemas son, también, más fáciles de leer y de comprender ya que están escritos en lenguaje XML.

Antes de continuar, tengamos en cuenta las siguientes hipótesis:

La biblioteca contiene libros y contrata empleados. Un libro se describe por un título, un autor, una fecha de publicación, un código ISBN y un editor. Un empleado se compone de un nombre y de un identificador. Estos dos elementos implementan tipos complejos.

1. Esquema de descripción de un libro

El primer enfoque, para escribir un esquema, consiste en seguir simplemente su estructura y definir cada elemento que nos encontremos. En el prólogo del documento abrimos un elemento schema: el elemento schema abre un esquema W3C XMLSchema. También puede contener la definición del espacio de nombres objetivo y otras opciones:


<?xml version="1.0"?>   
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
            targetNamespace="http://www.biblioNS.org"   
            xmlns="http://www.biblioNS.org"   
            elementFormDefault="qualified">
 

La primera declaración...

Relax NG: la biblioteca

A partir del documento XML anterior vamos a ver cómo describir un libro con Relax NG. Utilizamos la sintaxis XML. La simplicidad del lenguaje es evidente. Con unas pocas etiquetas describimos todos los elementos contenidos en el elemento Libro. El patrón text permite subrayar el hecho de que lo que hay en el interior de estas etiquetas son cadenas de caracteres.

1. Sintaxis de un libro


<element name="Libro" xmlns="http://relaxng.org/ns/structure/1.0"> 
  <zeroOrMore>   
    <element name="Título">   
        <text/>   
    </element>   
    <element name="Autor">   
        <text/>   
     </element>   
     <element name="Fecha">   
        <text/>   
    </element>   
    <element name="ISBN">   
        <text/>   
    </element>   
    <element name="Editor">   
        <text/>   
    </element>   
  </zeroOrMore>   ...

Probar las rutas XPath con la ayuda de XPath Visualizer

Para concluir esta parte, le proponemos que descubra una herramienta muy sencilla para comprobar sus rutas XPath de manera rápida.

Esta herramienta se llama XPath Visualizer. Podrá encontrarla (junto con otras herramientas XML prácticas) en la dirección http://codeplex.com/.

Con forma de página HTML, la herramienta permite cargar un documento XML e introducir las consultas XPath. Los resultados que se obtienen aparecen subrayados en el documento XML que se muestra.

Tome, por ejemplo, el siguiente documento XML, que muestra una lista del programa de vuelo de una compañía aérea:


<?xml version="1.0" encoding="ISO-8859-1"?>   
   
<tarjetadevuelo>   
   
<vuelo>   
  <número>PIA394</número>   
  <avión>Airbus A380</avión>   
   
  <ruta>   
  <aeropuerto_partida>CDG</aeropuerto_partida>   
  <aeropuerto_destino>CUN</aeropuerto_destino>   
  <fecha_salida>18/06/2006</fecha_salida>   
  </ruta>   
   
  <pilotos>   
    <CDB>S. Thevenin</CDB>   ...

Crear consultas XQuery sobre un documento XML

1. Consultas simples

A partir de un documento XML que contenga el catálogo de venta de productos multimedia, vamos a realizar una consulta simple que consistirá en extraer los DVDs del catálogo.

El documento XML:


<?xml version="1.0" encoding="UTF-8"?>   
<catálogo>   
    <dvd>ET</dvd>   
    <dvd>Pretty woman</dvd>   
    <dvd>Contact</dvd>   
    <cd>Cantando bajo la lluvia</cd>   
    <cd>The wall</cd>   
    <cdrom>Norton</cdrom>   
    <cdrom>Virtual PC</cdrom>   
</catálogo>
 

La consulta es la siguiente:


doc('catálogo.xml') //catálogo/dvd
 

El resultado es el siguiente:


<?xml version="1.0" encoding="UTF-8"?>  
<dvd>ET</dvd>  
<dvd>Pretty woman</dvd>  
<dvd>Contact</dvd>
 

2. Las instrucciones FLWOR

Con el anterior documento vamos a poner en práctica las expresiones FLWOR ejecutando una consulta que devuelva todos los DVDs cuyo precio sea superior o igual a 20 euros, por orden alfabético ascendente.

La consulta es la siguiente:


let $dvd := doc('catálogo.xml') //catálogo/dvd   
for $dvdsup20 in $dvd   
where $dvdsup20[@precio>=20]   
order by $dvdsup20    
return $dvdsup20
 

El resultado es el siguiente:


<?xml version="1.0" encoding="UTF-8"?>   
<dvd precio="20" moneda="euro">ET</dvd>   
<dvd precio="28" moneda="euro">Pretty woman</dvd>
 

3. Ejercicio: crear una función que evalúe la acidez

Para poner a prueba...

El SSO en JavaScript

1. Las bibliotecas

La autenticación del lado del cliente permite implementar fácilmente un sistema de inicio de sesión único. También es posible gestionar los permisos del lado del cliente. Esta implementación es especialmente interesante cuando la autenticación se lleva a cabo en colaboración con redes sociales como Facebook, Google o Twitter. Cada uno de estos actores propone su propia biblioteca y permite el uso de sus API. En este capítulo se estudiará la biblioteca OAuth 2 para su uso con Google.

Al igual que con el resto de proveedores de servicios, la biblioteca está disponible en JavaScript.

2. Caso práctico con Google

En el caso práctico presentado, se implementa un sistema basado en la API de Google para enviar con un solo clic a los servicios de Google los parámetros de identificación, para que respondan de manera favorable o no a la consulta. En el caso de que la consulta obtenga una respuesta favorable, el sistema muestra el avatar del usuario e información adicional sobre la cuenta de usuario de Google (entonces, Google autorizará el uso de su API).

3. Instalación

Para implementar el sistema, es necesario crear una cuenta de Google. Para ello, vaya a http://www.google.com y siga el enlace Iniciar sesión, seleccionando a continuación crear una cuenta.

A continuación, debe crear una cuenta de desarrollador en la consola de Google siguiendo este enlace: https://console.developers.google.com/.

Una vez creada la cuenta, se debe crear un proyecto, para lo cual es necesario generar un cliente...