SlideShare una empresa de Scribd logo
1 de 98
Curso XML
Requisitos

 - PC con Windows 98 / NT / 2000, 64 MB de RAM (dependen del
servidor a usar)


Para entorno Microsoft:
- Internet Explorer
- Parser MSXML 3 o superior.
- Servidor IIS o Personal Web Server de Microsoft.


Para entorno Java:
- JDK 1.1.8 o superior
- JAXP (Java API for XML Processing)
- Servidor Web (por ej. iPlanet Web Server FastTrack Edition)
El estándar XML



                  Qué es XML y qué elementos lo
El estándar XML
                  componen

                  Acceso a los datos de un documento
DOM
                  XML

                  Cómo dar formato a un documento
XSL
                  XML con XSL

Aplicaciones      Uso práctico de XML en entornos
Prácticas         Java y Microsoft
XML - Introducción




• XML (eXtended Markup Language) es un lenguaje que
proporciona un formato para describir datos estructurados
• Es un lenguaje de marcas
• Es un subconjunto de SGML (Standard Generalized
Markup Language)
• Definido por el W3C en 1998
XML - Características




• Lenguaje de marcas extensible, es un metalenguaje
• Es “case sensitive”
• Representación estructural de los datos en forma de árbol
• Define los datos en una aplicación, no su presentación
• Permite interoperatividad entre máquinas distintas (un
estándar para el intercambio de datos)
XML - Ejemplo de documento XML

<?xml version="1.0"?>
<!DOCTYPE discos SYSTEM "cds.dtd">
<discos>
    <disco>
        <artista tipo="individual">Frank Sinatra</artista>
        <titulo numerodepistas="2">In The Wee Small Hours</titulo>
        <pistas>
             <pista>In The Wee Small Hours</pista>
             <pista>Mood Indigo</pista>
        </pistas>
        <precio>$12.99</precio>
    </disco>
    <disco>
        <artista tipo="band">The Offspring</artista>
        <titulo numerodepistas="2">Americana</titulo>
        <pistas>
             <pista>Welcome</pista>
             <pista>Have You Ever</pista>
        </pistas>
        <precio>$12.99</precio>
    </disco>
</discos>
XML - Elementos XML


•Un documento XML está formado por tags o etiquetas
para la estructuración de los datos.
Por ejemplo: <disco>
•Un elemento XML está formado por una etiqueta de
inicio y otra etiqueta final. Entre ambas está el valor del
dato al que se refiere el tag.
En este ejemplo, el elemento pista tiene como valor
“Welcome”:


                <pista>Welcome</pista>
XML - Elementos XML - Atributos



• Un elemento XML puede contener uno o más atributos
en su tag inicial
En este ejemplo, el atributo sería “tipo”, y su valor
“individual”:
      <artista tipo="individual">Frank Sinatra</artista>

• Un elemento XML puede no contener un valor, solamente
atributos. En este caso se puede escribir con un solo tag
terminado en /.
Esta expresión
      <precio valor=“$12.99”></precio>

equivale a
     <precio valor=“$12.99”/>
XML - Documentos XML



Un documento XML es un conjunto de elementos XML anidados
(con estructura de árbol)


Reglas a tener en cuenta:
• Todos los elementos deben cerrarse
• Los elementos deben estar limpiamente anidados
• Un documento XML debe tener un único elemento raíz
XML - Reglas de Construcción de
         Nombres XML




En la construcción de nombres XML (atributos y elementos
XML) se deben tener en cuenta las siguientes reglas:
• Un nombre XML puede contener los siguientes caracteres:
Letras (A-Z, a-z), dígitos (0-9), guión bajo (_), guión (-) y punto
(.)
• Debe empezar con una letra o guión bajo
• Puede usar dos puntos (:) sólo en namespaces
• No puede contener espacios en blanco
XML - Documento XML Bien Formado

Se dice que un documento XML está bien formado si
cumple las siguientes reglas:
• Todo tag debe tener su correspondiente tag final.
• Los elementos deben quedar debidamente anidados
• Debe haber exactamente un elemento raíz
• Los valores de los atributos deben estar entre comillas
• Un mismo elemento no debe tener más de un atributo con
el mismo nombre
• Los comentarios no deben colocarse dentro de los tags
• Los caracteres & y < deben ser precedidos por un  si
forman parte de los datos de un elemento o atributo.
Validar un documento XML                Con un Parser XML
XML - Ejercicio 1
¿Es el siguiente documento XML un documento bien formado?
  <empleados>
    <empleado nombre=“Juan” apellido=“Pérez” apellido=“Sánchez”>
      <direccion calle=“López Peñalver”>
    </empleado>
    <Empleado nombre=“Alberto”>
      <direccion calle=“López Peñalver”>
    </Empleado>
    <empleado>
      <localidad>Málaga</localidad>
    </Empleado>
  </empleados>

  <oficinas>
    <oficina 1tlf=“951000000” 2tlf=“951000001”>
      <ciudad>Madrid</ciudad>
    </oficina>
    <oficina>
      <ciudad telefono=“12312312”>Barcelona</ciudad>
    </oficina>
  </oficinas>
XML - Ejercicio 2


Crear un documento XML válido que contenga los siguientes datos:


   Vuelo      Origen      Destino          Salida   Llegada
   IB777      Málaga      Madrid           8:00     8:50
   IB888      Madrid      Barcelona        9:00     10:10
   IB999      Madrid      Málaga           12:00    12:50

                 Código Avión Vuelos
                 1234              IB777,IB999
                 1122              IB888
XML - Namespaces



•Un XML namespace es una colección de nombres que
pueden ser usados en elementos o atributos.

•Un namespace distingue nombres de forma única en la Web,
para evitar conflictos.

•Un namespace puede ser identificado por una:
    URI (Universal Resource Identifier)
    URL (Uniform Resource Locator)
    URN (Uniform Resource Number)
XML - Namespaces - Declaración

Se declara con el atributo xmlns en el elemento deseado.
Existen dos tipos de declaración:

•Declaración por defecto. No hace falta usar prefijo, todos los
nombres pertenecen al namespace declarado:

 <BOOK xmlns="urn:BookLovers.org:BookInfo">
   <TITLE>A Suitable Boy</TITLE>
   <PRICE currency="US Dollar">22.95</PRICE>
 </BOOK>

•Declaración explícita. Cada nombre debe usar un prefijo
especificando el namespace al que pertenece:
  <BOOKS>
   <bk:BOOK xmlns:bk="urn:BookLovers.org:BookInfo"
        xmlns:money="urn:Finance:Money">
    <bk:TITLE>A Suitable Boy</bk:TITLE>
    <bk:PRICE money:currency="US Dollar">22.95</bk:PRICE>
   </bk:BOOK>
  </BOOKS>
XML - Prólogo del Documento XML


Antes del elemento raíz del documento XML pueden aparecer
una serie de elementos, formando la siguiente estructura:


 <?xml version="1.0"?>                                  Declaración XML
 <!--
   Discos.xml, ejemplo de documento XML                 Comentarios
 -->

 <?xml-stylesheet href=“discos.xsl” type=“text/xml”?>   Instrucciones de
                                                        procesamiento
 <!DOCTYPE discos SYSTEM “discos.dtd">
                                                        Document Type
 <discos>                                               Declaration
 ....
 </discos>                                              Elemento raiz
XML - Prólogo del Documento XML


Declaración
• No es necesaria para que el documento sea bien formado
• Incluye los siguientes atributos:
     • version: versión de XML
     • encoding: codificación de los caracteres
     • standalone: especifica si no es necesaria una validación por
     DTD

   <?xml version="1.0" encoding="ISO-8859-1"?>


Comentarios
• Pueden aparecer en cualquier sitio excepto dentro de un tag
   <!--
     Discos.xml, ejemplo de documento XML
   -->
XML - Prólogo del Documento XML



Instrucciones de procesamiento
• Asocia el documento XML con algún elemento externo, como por
ejemplo una hoja de estilos xsl.

   <?xml-stylesheet href=“discos.xsl” type=“text/xml”?>



Document Type Declaration
• Referencia a un DTD (Document Type Definition), el cual valida el
documento XML.

  <!DOCTYPE discos SYSTEM “discos.dtd">
XML - DTDs (Document Type
           Definition)

• Un DTD es un documento que especifica las restricciones que
debe cumplir un documento XML.
• Un documento válido es aquel que cumple las restricciones
especificadas en su DTD. Un documento es inválido si no las
cumple o simplemente no referencia a ningún DTD.
• Permite la declaración de tres tipos de estructuras:
     Elementos
     Atributos
     Entidades
• Debido a sus limitaciones se creó el lenguaje XML Schema.
XML - DTDs - Declaración

Un DTD se puede declarar de 2 formas:

• En un fichero aparte

  <!DOCTYPE discos SYSTEM “discos.dtd">


• En el propio documento XML (en el prólogo):
        <!DOCTYPE empleado
        [
        <!ELEMENT empleado (nombre, direccion)>
        <!ELEMENT nombre (#PCDATA)>
        <!ELEMENT direccion (ciudad, calle)>
        <!ELEMENT ciudad (#PCDATA)>
        <!ELEMENT calle (#PCDATA)>
        ]
        >
XML - DTDs - Declaración de Elementos

• Un Elemento se declara especificando su nombre y los
elementos que lo componen:

      <!ELEMENT empleado (nombre, direccion)>


• Si el elemento no contiene ningún otro elemento, se
especifica el tipo del valor que contiene
        <!ELEMENT nombre (#PCDATA)>

      #PCDATA permite caracteres alfanuméricos

•Así, el siguiente documento XML sería válido para el DTD anterior:
          <empleado>
            <nombre>Antonio</nombre>
            <direccion>
              <ciudad>Málaga</ciudad>
              <calle>Larios</calle>
            </direccion>
          </empleado>
XML - DTDs - Declaración de Elementos


• Si separamos con comas los elementos hijo, el orden de
aparición de éstos debe cumplirse
    <!ELEMENT empleado (nombre, direccion)>


• Si separamos los elementos con una barra ( | ), con que
aparezca sólo uno de ellos ya se cumplirá la condición
    <!ELEMENT empleado (nombre | direccion)>

• También pueden agruparse con paréntesis:
   <!ELEMENT empleado ((nombre | apellido) , direccion)>
XML - DTDs - Declaración de Elementos

Modificadores

  • Los siguientes modificadores especifican el número de elementos
  que deben aparecer:

                            *        0 ó más
                            +        1 ó más
                            ?         0ó1

   • Si no se muestra ningún modificador, debe aparecer
   exactamente 1 elemento.
    Ejemplos:
     <!ELEMENT empleado (nombre , apellido? , direccion+)>

     <!ELEMENT empleado (nombre , apellido , (direccion | telefono)*)>
XML - DTDs - Declaración de Elementos


Elementos Vacíos

• Si un elemento no contiene valor, se declara con la palabra EMPTY

     <!ELEMENT direccion EMPTY>




Contenido ANY

 • Si un elemento puede tener cualquier tipo de valor o de elementos
 compuestos, se declara con la palabra ANY
     <!ELEMENT otrosDatos ANY>
XML - DTDs - Ejercicio 1

Crear un DTD que valide la siguiente estructura:

    <proveedores>
      <proveedor>
        <nombre>Pascal</nombre>
        <productos>
          <producto>Leche</producto>
          <producto>Flan</producto>
        </productos>
      </proveedor>
      <proveedor>
        <nombre>Capitán Pesconovo</nombre>
        <productos>
          <producto>Merluza</producto>
        </productos>
        <telefono>
          952888777
        </telefono>
      </proveedor>
    </proveedores>
XML - DTDs - Declaración de Atributos

• Un elemento puede tener 1 o más atributos. Por ejemplo, para
declarar los atributos ciudad, calle y numero del elemento
direccion, se haría de la siguiente forma:

 <!ATTLIST direccion
         ciudad CDATA #FIXED       <direccion ciudad=“Málaga” calle=“Larios”
         calle CDATA #REQUIRED     numero=“5”/>
         numero CDATA #IMPLIED
 >


• La expresión #REQUIRED indica que el atributo es
obligatorio
• La expresión #IMPLIED indica que el atributo es opcional
• La expresión #FIXED indica que el atributo no es modificable
• La expresión CDATA es el tipo de dato (datos alfanuméricos)
• Se puede direccion  pais un valor por defecto:
  <!ATTLIST especificar CDATA “España”>
XML - DTDs - Declaración de Atributos

Tipos de atributos
  • Enumeración. Limita los posibles valores del atributo.

    <!ATTLIST empleado sexo (hombre | mujer) #REQUIRED>


  • Tipos de atributos simple.
       • CDATA. Caracteres alfanuméricos
       • ID. Identificador único para un elemento.
       • IDREF. Referencia a un número identificador contenido en
       el atributo ID de algún otro elemento

 <!ATTLIST empleado               <empleado empid=“A120”>
   empid ID #REQUIRED             </empleado>
   supervisor IDREF #IMPLIED      <empleado empid=“A240” supervisor=“A120”>
 >                                </empleado>
XML - DTDs - Declaración de Entidades

• Una entidad es una asociación entre el nombre de la entidad y su
valor. La entidad puede aparecer en el valor de un elemento o
atributo, y será sustituido por su valor.
• Hay 5 entidades predefinidas:
    • &lt;    (<)
    • &amp; (&)
    • &gt;    (>)
    • &quot; (")
    • &apos; (')

• Se pueden definir entidades nuevas:
         <!ENTITY empresa “Coritel AOS">

 y usarlas de la siguiente forma

         <empleado empresa=“&empresa;">
XML - DTDs - Ejercicio 2

Crear un DTD que valide la siguiente estructura:
    <almacen empresa="&empresa;">
      <productos>
        <producto id="A191">
          <nombre>Teclado</nombre>
          <precio valor="20" moneda="euros"/>
          <caracteristicas>15 pulgadas</caracteristicas>
        </producto>
        <producto id="A167">
          <nombre>Monitor 14'</nombre>
          <precio valor="20000" moneda="pesetas"/>
        </producto>
        <producto id="A180" nohay="A167">
          <nombre>Monitor 15'</nombre>
          <precio valor="20000" moneda="pesetas"/>
        </producto>
      </productos>
    </almacen>
XML - Schema


• Estándar para la validación de documentos XML


• Validación mediante un parser


• Mejora con respecto a los DTDs
    Permite mayor exactitud en el tipo de datos.
    Está escrito en formato XML
    Es extensible y escalable
    Permite especificar el número de elementos que contiene
   un elemento
    Las declaraciones de elementos están anidadas
XML - Schema - Declaración


• Todo schema debe ser declarado con el elemento Schema y en
el siguiente namespace:

 <?xml version="1.0" encoding="ISO-8859-1"?>
 <Schema xmlns=“urn:schemas-microsoft-com:xml-data“
         xmlns:dt="urn:schemas-microsoft-com:datatypes">
 ...
 </Schema>

• Al ser el schema un documento XML, la primera línea será la
versión de XML usada.

• Se almacena en un archivo con extensión xml.
XML - Schema - Elementos

• Elementos simples:
      <ElementType name=“precio“ content=“textOnly”/>

    content: textOnly, eltOnly, empty, mixed (por defecto)

• Elementos compuestos:
     <ElementType name=“producto“ order=“seq”>
       <element type=“nombre” minOccurs=“1”/>
       <element type=“precio”/>
     </ElementType>


   minOccurs: número mínimo de apariciones del elemento
               0,1
   maxOccurs: número máximo de apariciones del elemento
               1,*
   order: seq (por defecto), one, many
XML - Schema - Elementos


• Agrupación: especifica reglas de aparición para un subconjunto de
elementos

         <ElementType name=“producto“>
           <element type=“nombre”/>
           <element type=“precio”/>
           <group order="one">
              <element type=“descripcion"/>
              <element type=“categoria"/>
           </group>
         </ElementType>
XML - Schema - Atributos

Declaración de atributos:


    <AttributeType name=“origen“/>
    <AttributeType name=“proveedor“ required=“yes”/>

    <ElementType name=“producto“>
      <element type=“nombre” minOccurs=“0”/>
      <element type=“precio”/>
      <attribute type=“origen” default=“Madrid”/>
      <attribute type=“proveedor”/>
    </ElementType>
XML - Schema - Referencia al schema


Un documento XML especifica que debe ajustarse a un schema de
la siguiente forma:

      <productos xmlns=“x-schema:schemaproductos.xml">
      ...
      </productos>
XML - Schema - Ejercicio 1


Ejercicio 1: XML Schema

Ejercicio 1.1
• Crear un XML Schema en productosesq.xml para la validación
del archivo productos.xml, donde debe haber al menos 1
producto, idProducto sea obligatorio, cada producto tenga al
menos 1 procedencia y el precio sea opcional.
XML - Schema - Tipos

Los tipos se especifican con el atributo dt:type


 <ElementType name=“precio“ dt:type=“int”/>

Tipos:
id                valor único
idref             referencia a un id
string            cadena
boolean           0ó1
char              1 carácter
date              fecha en formato 1994-11-05
time              hora en formato 08:15:27
int               entero consigo opcional
float             número real
i1,i2,i4,i8       entero, especificando el número de bytes
r4,r8             real, especificando el número de bytes
ui1,ui2,ui4,ui8   entero sin signo
XML - Schema - Restricciones


El elemento datatype permite especificar el tipo de un elemento o
atributo y restringir sus valores

  <ElementType name=“FechaEntrega" content="textonly">
    <datatype dt:type="date" dt:min="1969-07-20“
                           dt:max=“2003-12-31"/>
  </ElementType>

Posibles atributos de datatype:
dt:type                tipo del elemento o atributo
dt:values              valores posibles si dt:type = enumeration
dt:max                 máximo valor permitido
dt:maxExclusive        máximo valor permitido excluyente
dt:min          mínimo valor permitido
dt:minExclusive        mínimo valor permitido excluyente
dt:maxLength           máxima longitud del valor
XML - Schema - Enumeración


En la enumeración sólo es válido uno de los valores especificados:


     <AttributeType name=“calidad" dt:type="enumeration“
       dt:values=“alta media baja"/>
XML - Schema - Ejercicio 2


Ejercicio 2: XML Schema

Ejercicio 2.1
• Crear un XML Schema para la validación del archivo
clientes.xml, de forma que:
     idCliente sea obligatorio y número de 5 dígitos como
     máximo
     dni sea obligatorio y alfanumérico con 8 caracteres máximo
     localidad opcional
     nombre obligatorio
     apellido1 opcional
     apellido2 opcional, pero si aparece debe ser después de
     un apellido1
     sexo opcional, y será “Hombre” o “Mujer”
     direcciones es opcional, pero si aparece habrán 1 ó más
     direcciones. ciudad, calle y número deben aparecer en ese
     orden
XML - SAX


• SAX (Simple API for XML) es una API que permite a una
aplicación escribir código genérico que pueda funcionar con
cualquier parser


• SAX no es un parser en sí, sólo una capa entre una aplicación
y un parser


    XML file      XML parser         SAX        aplicación
DOM



                  Qué es XML y qué elementos lo
El estándar XML
                  componen

                  Acceso a los datos de un documento
DOM
                  XML

                  Cómo dar formato a un documento
XSL
                  XML con XSL

Aplicaciones      Uso práctico de XML en entornos
Prácticas         Java y Microsoft
DOM - Introducción



• El DOM (Document Object Model) es una API (Application
Programming Interface) creada para acceder a los datos de un
documento XML.
• Muchos lenguajes tienen librerías que permiten acceder al DOM
de un documento XML mediante un parser.
• El estándar “Level 1 DOM” definido por el W3C es seguido, entre
otros navegadores, por Netscape 6 y Explorer 5.
• Al DOM de un documento XML puede accederse desde
Javascript, VBScript u otros lenguajes que lo soporten.
DOM - Data Island

• Un Data Island es un documento XML insertado en una página
HTML. Esto se puede conseguir de 2 formas:
    • Insertando el código del documento XML en la página:
        <XML ID="XMLCliente">
          <clientes>
            <cliente idCliente=“81422”>
              <nombre>Antonio</nombre>
            </cliente>
            <cliente idCliente=“81555”>
              <nombre>Jose Carlos</nombre>
            </cliente>
          </clientes>
        </XML>

   • Referenciando el archivo donde está contenido el documento
   XML:

        <XML ID="XMLCliente" SRC=“clientes.xml"></XML>
DOM - Acceso a elementos


 • XMLDocument: obtiene el documento XML
 • documentElement: obtiene el elemento raiz del documento XML
 • childNodes: obtiene una lista de los elementos hijos de un
 elemento
 • item(n): devuelve el elemento n de una lista
 • text: devuelve el valor de un nodo

  La expresión
XMLCliente.XMLDocument.documentElement.childNodes.item(0).childNodes.item(0).text

  devuelve “Antonio”

 • length: devuelve el número de nodos hijos
DOM - Acceso a elementos

    • firstChild: devuelve el primer elemento hijo de otro elemento
    • lastChild: devuelve el último elemento hijo de otro elemento
    • getElementsByTagName(nombre) : obtiene una lista de los
    elementos encontrados con el nombre indicado. Busca de forma
    recursiva.
XMLCliente.XMLDocument.documentElement.getElementsByTagName(“nombre”).item(0).text

    devuelve “Antonio”
    • nextSibling: devuelve el siguiente elemento en la lista de hijos
    del elemento padre, o null si es el último elemento.
    • previousSibling: devuelve el anterior elemento en la lista de
    hijos del elemento padre, o null si es el primer elemento.
    • parentNode: devuelve el nodo padre de un elemento.
DOM - Acceso a atributos


• getAttribute(nombre) : obtiene el valor del atributo con el nombre
especificado
XMLCliente.XMLDocument.documentElement.firstChild.getAttribute("idCliente")

devuelve “81422”
• attributes: obtiene una lista de los atributos de un elemento
XMLCliente.XMLDocument.documentElement.firstChild.attributes.item(0).text

también devuelve “81422”
DOM - Ejercicio 1


Ejercicio 1: Acceso a XML

Ejercicio 1.1
• Insertar el contenido de clientes.xml en un Data Island en el
código de pagina.htm
• Modificar la función mostrarDatos() para que muestre mensajes
con los siguientes datos:
     • Mostrar el nombre del primer cliente
     • Mostrar el idCliente del último cliente
     • Mostrar el número de clientes
     • Hacer un bucle que muestre los dni.
     • Hacer un bucle que, para cada cliente, si tiene localidad
     que la muestre, y si no, que muestre el mensaje “Sin
     localidad”
DOM - Modificación de elementos

 Creación de un elemento

• createElement(nombre) : devuelve un elemento con el nombre
especificado
• createTextNode(nombre) : devuelve un objeto Text que debe ser
insertado en un elemento
• appendChild(objeto) : inserta un hijo a la lista de hijos de un
elemento. El objeto puede ser un Elemento o un objeto Text.
El siguiente código inserta el apellido al primer cliente con valor
“Fernández”
element = XMLCliente.createElement("apellido");
textNode = XMLCliente.createTextNode("Fernández");
element.appendChild(textNode);
XMLCliente.XMLDocument.documentElement.firstChild.appendChild(element);
DOM - Modificación de elementos

  Eliminación de un elemento
 • removeChild(objeto) : elimina el objeto especificado
   La siguiente instrucción elimina el segundo cliente:
  XMLCliente.XMLDocument.documentElement.removeChild (

  XMLCliente.XMLDocument.documentElement.childNodes.item(1) );
   Cambiar el valor de un elemento
   Simplemente con la operación de asignación. La siguiente sentencia
   modifica el nombre del primer cliente:

XMLCliente.XMLDocument.documentElement.firstChild.firstChild.text = “Jesús";
DOM - Modificación de atributos

    Creación o cambio de valor de un atributo

    • setAttribute(nombre,valor) : si el atributo especificado existe,
    cambia su valor, si no, crea uno nuevo y le asigna el valor especificado.
    El siguiente ejemplo crea el atributo “dni” para el primer cliente:

XMLCliente.XMLDocument.documentElement.firstChild.setAttribute(“dni", “55333444");


     Eliminación de un atributo

    • removeAttribute(nombre) : elimina de un nodo el atributo con el
    nombre especificado. Este ejemplo borra el atributo “nif” creado en la
    sentencia anterior:

   XMLCliente.XMLDocument.documentElement.firstChild.removeAttribute(“dni");
DOM - Ejercicio 2

Ejercicio 2: Modificación de XML

Ejercicio 2.1
• Referenciar al archivo clientes.xml desde un Data Island en el
código de pagina.htm
• Modificar la función cambiarDatos() para que haga lo siguiente:
    • Añadir el atributo “localidad” al segundo cliente con el valor
    “Málaga”
    • Añadir una etiqueta “apellido” al último cliente con el valor
    “Martín”
    • Eliminar el primer cliente
    • Cambiar el nombre del último cliente por “Jorge”.
    • Para comprobar los cambios, hacer 3 bucles que muestren
    todos los nombres, apellidos y localidades. Debe mostrar:
         Nombres: Jose Carlos, Jorge
         Apellidos: Sánchez, Martín
         Localidades: Málaga, null
XSL



                  Qué es XML y qué elementos lo
El estándar XML
                  componen

                  Acceso a los datos de un documento
DOM
                  XML

                  Cómo dar formato a un documento
XSL
                  XML con XSL

Aplicaciones      Uso práctico de XML en entornos
Prácticas         Java y Microsoft
XSL - Introducción


• XSL (eXtensible Stylesheet Language) es un estándar creado por el
W3C para el tratamiento visual de documentos XML.
• El estándar XSL define dos lenguajes: XSLT y XPath.
• XSLT (XSL Transformations) es un lenguaje que define una serie de
elementos que sirven para dar un formato a un documento XML.
• XPath (XML Path Language) es un lenguaje que define una forma de
construir expresiones que identifican parte de un documento XML.
• Sigue una estructura de árbol, al igual que XML.
Procesador XSLT
• Un procesador XSLT es un programa que se encarga de aplicar una
plantilla XSL a un documento XML.
• Recibe como entrada un documento XSL y otro XML y devuelve
como salida un documento XML, que puede ser una página HTML.
XSL - Modo de funcionamiento

    • XSLT usa una serie de tags que están definidos dentro de un
    namespace. El namespace definido para los tags de XSLT 1.0 debe
    definirse en el tag stylesheet de la siguiente forma:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
....
</xsl:stylesheet>



    • El documento XSL contiene 1 o más plantillas (templates),
    definidas dentro del elemento stylesheet. El atributo match indica a
    que elemento se le aplica la plantilla. “/” indica que la plantilla se
    aplica al elemento root.
             <xsl:template match="/">
               ...
             </xsl:template>
XSL - Ejemplo

Éste sería un ejemplo de documento XSL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0“ mlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:template match=“/">
          <html>
          <head><title>Clientes</title></head>
          <body>
          .....
          </body>
          </html>
     </xsl:template>
</xsl:stylesheet>



 Para aplicar el documento XSL al XML, el procesador XSLT busca
 un template que se aplique al elemento root, y lo ejecuta.
XSL - Ejecución en IE

• Internet Explorer 5 contiene un Procesador XSLT (MSXML).

• Para aplicar una plantilla XSLT a un documento XML, se añade la
siguiente línea al comienzo del documento XML.

     <?xml-stylesheet type=“text/xsl” href=“clientes.xsl” ?>

• Abrir el fichero xml con el Explorer
XSL - XPath

• XPath es un lenguaje para construir expresiones que referencien
a una parte de un documento XML

       <clientes>
         <cliente idCliente=“81422” dni=“33555888”>
           <nombre>Antonio</nombre>
         </cliente>
         <cliente idCliente=“81555”>
           <nombre>Jose Carlos</nombre>
         </cliente>
       </clientes>


• Referencias absolutas: comienzan con el elemento root ( / )
  /clientes/cliente devuelve todos los nodos cliente
  /clientes/cliente[1] devuelve el primer cliente
• Referencias relativas: parten del nodo contextual.
  clientes/cliente también devuelve los nodos cliente
XSL - XPath - Símbolos especiales

Símbolos especiales
Aparte de la barra / , hay otros símbolos con los siguientes significados:
               Símbolo                     Significado
          @nombre         Atributo llamado nombre
          //              El nodo y todos sus descendientes
          .               El propio nodo
          ..              El nodo padre
          *               Todos los nodos hijo
          @*              Todos los atributos



/clientes/cliente/@idCliente devuelve todos los idCliente
/clientes//* devuelve todos los nodos descendientes de cliente
Suponiendo que el nodo contextual es /clientes/cliente con idCliente=“81422”:
 ./nombre devuelve el valor del elemento nombre (“Antonio”)
XSL - XPath - Predicados


Predicados
Un predicado es una condición que filtra los elementos devueltos
por una expresión.
/clientes/cliente[nombre=‘Antonio’] devuelve los clientes
llamados Antonio
/clientes/cliente[@idCliente=‘81422’]/nombre devuelve el
nombre del cliente con idCliente igual a ‘81422’

Negación
La palabra not pone como condición que no esté un elemento o
atributo.
/clientes/cliente[not(@dni)] devuelve los clientes que no
tengan como atributo el dni.
/clientes/cliente[not(apellido)] devuelve los clientes que no
tengan el tag apellido
XSL - XPath - Ejercicio 1

                 <paises>
                   <pais idPais=“11”>
                     <nombre>Italia</nombre>
                     <ciudades>
                       <ciudad idCiudad=“320”>
                         <nombre>Roma</nombre>
                         <poblacion>5000000</poblacion>
                       </ciudad>
                     </ciudades>
                   </pais>
                 </paises>


• Obtener los nombres de todos los países
• Obtener los nombres de todas las ciudades del segundo país de la lista
• Obtener los nombres de las ciudades con población mayor a 1000000
• Obtener los idCiudad de las ciudades con población entre 50000 y 100000
• Obtener el idPais del país que contenga la ciudad con idCiudad = 320
XSL - XHTML

XHTML (eXtended HyperText Markup Language)

• Implementación de HTML compatible con XML
• Validación:
      <!DOCTYPE html PUBLIC
        "-//W3C//DTD XHTML 1.0 Strict//EN“
        "DTD/xhtml1-strict.dtd">


     Reglas de construcción:
     • Tags obligatorios: head y body
     • Tags en minúscula
     • Elementos correctamente anidados
     • Todos los elementos deben ser cerrados

          Texto<p>         <p>Texto</p>
           <br>              <br/>
XSL - XHTML

  Reglas de construcción:
  • Los atributos deben ir entre comillas
 <td width=100>          <td width=“100”>


  • Los atributos deben tener valor
   <option value=“1” selected>

   <option value=“1” selected=“selected”>


  • Para los scripts se delimita una sección CDATA
<script language="JavaScript type="text/javascript"> <!
[CDATA[
       document.write("<b>Hello World!</b>");
  ]]>
</script>
XSL - XHTML - Ejercicio


Ejercicio: Convertir a XHTML

<script language="JavaScript" src="myscript.js"></script>
<html>
  <body>
    Pagina inicio
    <br>
    <B>Formulario 1</B>
    <form name=“form1”>
      <img src=“imagen.gif” border=0>
      <input type=“checkbox” checked>
    </form>
  </body>
</html>
XSL - Elementos XSLT

• xsl:value-of
  devuelve el valor especificado en el atributo select. Puede calcular
el resultado de operaciones aritméticas

       <xsl:template match=“cliente">
            <xsl:value-of select="@idCliente"/>
       </xsl:template>


• xsl:element
  inserta un elemento con el nombre indicado en name

        <xsl:element name=“a">
          Ir a siguiente página
        </xsl:element>
XSL - Elementos XSLT

• xsl:attribute
  añade un atributo al elemento en el que esté contenido. El nombre
del atributo se especifica en el atributo name y su valor se especifica
en el contenido del elemento xsl:attribute.
        <a>
          <xsl:attribute name=“href">
             http://www.com
          </xsl:attribute>
          Ir a inicio
        </a>

• xsl:if
  si la evaluación del contenido del atributo test es true, inserta el
contenido del elemento

       <xsl:if test=“not(@idCliente)">
         <b>Falta el dni del cliente</b>
       </xsl:if>
XSL - Elementos XSLT
• xsl:for-each
  itera sobre los elementos de la lista que devuelva la expresión
contenida en el atributo select
      <xsl:for-each select=“/clientes/cliente">
        <i><xsl:value-of select=“@idCliente”/></i><br>
      </xsl:for-each>

• xsl:choose, xsl:when, xsl:otherwise
  instancia el contenido del primer elemento xsl:when cuyo atributo
test devuelva true. Si ningún test se cumple, se instancia el contenido
del elemento xsl:otherwise.
       <xsl:choose>
         <xsl:when test=“expresion1”>
             ...
         </xsl:when>
         ...
         <xsl:otherwise>....
         </xs:otherwise>
       </xsl:choose>
XSL - Elementos XSLT


• xsl:comment
  inserta un comentario en el árbol resultante.

      <xsl:comment>        genera el código
        comentario                                <!-- comentario -->
      </xsl:comment>
XSL - Funciones

Estas son las funciones más usadas definidas por XPath.

 • position(). Devuelve la posición del nodo actual relativa al
 conjunto de nodos del contexto.
 • count(conjuntoNodos) . Devuelve el número de nodos del
 conjunto pasado como parámetro.
 • concat(cadena1, cadena2, ...) . Devuelve la concatenación de
 sus argumentos.
 • substring(cadena, inicio, fin) . Devuelve la subcadena que
 comienza en la posición inicio y termina en fin.
 • round(numero). Devuelve el entero más cercano al valor
 pasado.
 • not(boolean). Devuelve la negación del argumento. Si el
 argumento no es booleano, lo convierte con la función boolean().
 • boolean(objeto) . Si objeto es 0, NaN, un conjunto vacío o una
 cadena vacía, devuelve false; en otro caso devuelve true.
XSL - Ejercicios


Preparación de la máquina

• Instalación del parser MSXML 3 o superior de Microsoft

• Activación del parser (xmlinst.exe)
XSL - Ejercicio 1

Ejercicio 1: Aplicar plantilla XSL a XML
Ejercicio 1.1
• Modificar el archivo productos.xml para aplicarle la plantilla
productos.xsl

Ejercicio 1.2
• Modificar el archivo productos.xsl para que debajo de cada
código muestre el precio

Ejercicio 1.3
• Modificar el archivo productos.xsl para que debajo de cada
precio muestre una lista de ciudades de procedencia.

Ejercicio 1.4
• Modificar el archivo productos.xsl para que al comienzo
muestre el número total de productos y, delante de cada
producto, aparezca un índice (1,2,...).
XSL - Ejercicio 2

Ejercicio 2: Elementos XSLT

Ejercicio 2.1
• Modificar el archivo productos.xsl para que si el código del
producto es 100, muestre tras el nombre el texto “(Producto en
Oferta)”

Ejercicio 2.2
• Modificar el archivo productos.xsl para que, si el precio es
menor que un euro, muestre tras el nombre el texto “(menos de 1
euro)”

Ejercicio 2.3
• Modificar el fichero productos.xsl para que, debajo de cada
producto, aparezca un botón con el nombre del producto y, al
pulsarlo, muestre su precio.
Aplicaciones Prácticas



                  Qué es XML y qué elementos lo
El estándar XML
                  componen

                  Acceso a los datos de un documento
DOM
                  XML

                  Cómo dar formato a un documento
XSL
                  XML con XSL

Aplicaciones      Uso práctico de XML en entornos
Prácticas         Java y Microsoft
Aplicaciones Prácticas - Introducción


XML se usa principalmente en los siguientes entornos:


• Uso de XML conjuntamente con HTML en el cliente.
    Internet Explorer
    Netscape Navigator
• XML en entorno Java
    JAXP
• XML en entorno Microsoft
    MSXML
Aplicaciones Prácticas - Java


• JAXP (Java API for XML Processing) es una librería de
clases de Sun que contiene:
    • Un parser XML (Crimson)
    • Un procesador XSLT (Xalan)

• Parte de las clases tienen licencia de W3C, y el resto de
Apache.

• Puede descargarse libremente desde http://java.sun.com/xml
• Necesita la previa instalación del JDK 1.1.8 (Java Development
Kit) o Java 2 SDK (Software Development Kit)
Aplicaciones Prácticas - Java

Uso de las clases de JAXP
     Acceso a un documento XML desde un fichero

    // Clases de JAVAXP
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.FactoryConfigurationError;
    import javax.xml.parsers.ParserConfigurationException;
    // Excepciones
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    // Acceso a ficheros
    import java.io.File;
    import java.io.IOException;
    // DOM de W3C
    import org.w3c.dom.Document;
    import org.w3c.dom.DOMException;
Aplicaciones Prácticas - Java

    Acceso a un documento XML desde un fichero (2)

// Se declara el documento donde se almacenará el XML
static Document document;

public static void main(String argv[])
{
  // Se instancia la clase DocumentBuilderFactory
  DocumentBuilderFactory factory =
          DocumentBuilderFactory.newInstance();

    // Se obtiene el xml del archivo
    DocumentBuilder builder = factory.newDocumentBuilder();
    document = builder.parse(new File(“archivo.xml”));

    // Se accede al documento
     document.getDocumentElement().....
}
Aplicaciones Prácticas - Java - Objetos

En JAXP su usan los siguientes objetos. Algunos métodos
cambian ligeramente, pero su significado son el mismo que en
el DOM:

Document
• Element createElement(nombre)
• Text createTextNode (valor)
• Element getDocumentElement()

Element subclase de Node
• String getAttribute (nombre)
• NodeList getElementsByTagName (nombre)
• removeAttribute (nombre)
• setAttribute(nombre,valor)

Text subclase de Node
Aplicaciones Prácticas - Java - Objetos


Node
• appendChild(Node)
• NodeList getChildNodes ()
• Node getFirstChild()
• Node getLastChild()
• Node getNextSibling ()
• String getNodeValue()
• Node getPreviousSibling ()
• removeChild(Node)

NodeList
• int getLength()
• Node item(i)
Aplicaciones Prácticas - Java - Objetos


El método getChildNodes () devuelve una sucesión de
elementos Text y Element intercalados:

                                       getChildNodes().item(i)
 <clientes>                            i       Devuelve
   Texto1
                                       0       Text
   <cliente>Antonio</cliente>
   Texto2                              1       Element
   <cliente>Jose</cliente>             2       Text
   Texto3                              3       Element
 </clientes>                           4       Text
Aplicaciones Prácticas - Java -
          Ejercicios

Preparación de la máquina

• Instalación de JDK (Java Development Kit) 1.1.8 o superior
      http://java.sun.com/products

• Instalación de JAXP (Java API for XML Processing)
      http://java.sun.com/xml

• Instalación del servidor Web
  Por ejemplo: iPlanet Web Server FastTrack Edition
      http://www.iplanet.com/downloads/download/index.html
Aplicaciones Prácticas - Java - Ejercicio
          1
Ejercicio 1: Acceso a XML
Ejercicio 1.1
• Compilar la clase ejemplo.java
      javac ejemplo.java (genera el fichero ejemplo.class)
• Ejecutar la clase ejemplo.class
      jview ejemplo clientes.xml

Ejercicio 1.2
• Modificar la clase java acceder.java para que lea un documento
XML pasado como parámetro.
     jview acceder clientes.xml
Ejercicio 1.3
• Modificar la clase acceder.java para que muestre por pantalla el
nombre del segundo cliente

Ejercicio 1.4
• Modificar la clase acceder.java creando un bucle que muestre
todos los atributos idCliente de todos los clientes.
Aplicaciones Prácticas - Java


  Transformación de un documento XML con XSLT

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
Aplicaciones Prácticas - Java

          Transformación de un documento XML con XSLT (2)


DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

File stylesheet = new File(“archivo.xsl”);
File datafile = new File(“archivo.xml”);

DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(datafile);

TransformerFactory tFactory = TransformerFactory.newInstance();
StreamSource stylesource = new StreamSource(stylesheet);
Transformer transformer = tFactory.newTransformer(stylesource);

DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
Aplicaciones Prácticas - Java - Ejercicio
            2

Ejercicio 2: Aplicar una plantilla XSL

Ejercicio 2.1
• Crear la clase java conversor.java al que se le pase como
parámetro un documento XSL y un documento XML y que
escriba en un fichero htm de salida el resultado de aplicarle la
plantilla XSL al documento XML.
• Probarla con el documento clientes.xml y la plantilla clientes.xsl
     java conversor clientes.xsl clientes.xml

Ejercicio 2.2
• Modificar la plantilla clientes.xsl para que muestre debajo del
idCliente su dni, y si no tiene, que muestre un mensaje
indicándolo.
Aplicaciones Prácticas - Java

      Almacenar un documento XML en un archivo

   • Usando el Transformer sin aplicarle ningún estilo:

    Transformer transformer = tFactory.newTransformer();


StreamResult result = new StreamResult(new FileWriter("salida.xml"));
Aplicaciones Prácticas - Java - Ejercicio
           3

Ejercicio 3: Modificación de un archivo XML

Ejercicio 3.1
• Crear la clase modificar.java a partir de la clase conversor.java
para que ésta lea el contenido de un documento Xml pasado
como parámetro, inserte un dni en el segundo cliente y guarde
las modificaciones.

Ejercicio 3.2
• Modificar la clase modificar.java para que cree un nuevo cliente
con los siguientes datos:
     Nombre: Javier
     idCliente: 81678
     dni: 55666777
Aplicaciones Prácticas - Java


Otros parsers
• JDOM (www.jdom.org)
• XT (http://www.jclark.com/xml/xt.html). Implementación de un
procesador XSLT usando el parser XP.
• Xerces-J (http://xml.apache.org/xerces-j/index.html). Parser
creado por el proyecto Apache XML.
Aplicaciones Prácticas - Java - JSP

 Acceso a un documento XML desde JSP
 • Se importan las mismas clases que en Java
 <%@ page import="javax.xml.parsers.DocumentBuilder" %>
  ...

 • Se accede al documento. El fichero leído partirá del directorio
 raíz del servidor web:
<%
Document document;

File xmlFile = new File("public_html archivo.xml");

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(xmlFile);
%>
<%=document.getDocumentElement().....%>
Aplicaciones Prácticas - Java - JSP
Aplicación de XSL desde JSP
• Se importan las mismas clases que en Java
• Se aplica la plantilla y se manda a la variable out:
 <%
 Document document;

 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

 File stylesheet = new File("public_htmlarchivo.xsl");
 File datafile = new File("public_htmlarchivo.xml");

 DocumentBuilder builder = factory.newDocumentBuilder();
 document = builder.parse(datafile);

 TransformerFactory tFactory = TransformerFactory.newInstance();
 StreamSource stylesource = new StreamSource(stylesheet);
 Transformer transformer = tFactory.newTransformer(stylesource);

 DOMSource source = new DOMSource(document);
 StreamResult result = new StreamResult(out);
 transformer.transform(source, result);
 %>
Aplicaciones Prácticas - Java - Ejercicio
           4

Ejercicio 4: Uso de XML con JSP

Ejercicio 4.1
• Modificar el archivo pagina.jsp para que muestre los datos del
archivo cliente.xml de la siguiente forma:
         Nombre: Antonio
         Código: 81422
         Dni: 33555888 ó No tiene
         Teléfonos: 952334455 666909090 ó No tiene

Ejercicio 4.2
• Modificar la página pagina2.jsp para que muestre por pantalla
el resultado de aplicar la plantilla clientes.xsl a clientes.xml.
• Modificar el archivo clientes.xsl para que pagina2.jsp muestre el
mismo resultado de pagina.jsp
Aplicaciones Prácticas - Microsoft



• Para usar XML en aplicaciones Microsoft, se usa el objeto COM
Microsoft XML (MSXML).

• Internet Explorer 5 viene con una versión antigua (msxml.dll)
      Objeto Microsoft.XMLDOM

• Se debe instalar una versión más moderna
     Objeto MSXML2.DOMDocument
Aplicaciones Prácticas - Microsoft



                Acceder a un documento XML

• Si estamos en Visual Basic, añadir el objeto Microsoft XML a las
referencias del proyecto.
• Instanciar el objeto.
      En Visual Basic.
       Dim objParser As MSXML.DOMDocument
       Set objParser = New MSXML.DOMDocument

     En ASP
    Set objParser = Server.CreateObject("Microsoft.XMLDOM")
Aplicaciones Prácticas - Microsoft
• Cargar el documento XML
     desde un archivo:

If objParser.Load("c:tempxmldocumento.xml") Then
' Ha funcionado
Else
' Ha ocurrido un error
End If


     Desde una cadena de texto:
objParser.loadXML(“<clientes> .... </clientes>”);


• Usar el documento (obtener el elemento raíz):
       objParser.documentElement

• Destruir el objeto tras usarlo.
        Set objParser = nothing
Aplicaciones Prácticas - Microsoft -
          Ejercicio 1
Ejercicio 1: Acceso a XML desde ASP
Ejercicio 1.1
• Modificar el archivo pagina.asp para que guarde en la variable
domXml el documento almacenado en productos.xml.
• Modificar la página para que muestre el idPedido del primer
pedido del documento XML.
Ejercicio 1.2
• Modificar la página para que aparezca la cantidad del segundo
producto del tercer pedido.

Ejercicio 1.3
• Modificar la página para que muestre los nombres de todos los
productos adquiridos.

Ejercicio 1.4
• Modificar la página para que aparezca el número de cliente del
pedido con idPedido=1002, y la suma de todo su pedido.
Aplicaciones Prácticas - Microsoft

Aplicar una plantilla XSLT a un documento XML
     <%
     Dim domXml As MSXML.DOMDocument
     Dim domXsl As MSXML.DOMDocument
     Dim resutl As String

     Set domXml = New MSXML.DOMDocument
     Set domXsl = New MSXML.DOMDocument

     domXml.Load("c:documento.xml")
     domXsl.Load("c:plantilla.xsl")

     result = domXml.transformNode(domXsl)
     %>

        Mostrar el resultado en ASP
                 <%=result
                 %>
Aplicaciones Prácticas - Microsoft -
             Ejercicio 2
Ejercicio 2: Aplicación de una plantilla XSL a un
documento XML desde ASP
Ejercicio 2.1
• Modificar el archivo pagina.asp para que muestre el resultado
de aplicar la plantilla productos.xsl al documento productos.xml.
Ejercicio 2.2
• Modificar el archivo productos.xsl para que muestre el siguiente
resultado:
      Pedido nº: 1000
      Cliente: 123
      Productos:
        Línea   Id      Nombre           Precio Total (euros)
        1       315     Patatas fritas   0.9
        2...    ...     ....             ....
      ....
Recursos


• W3C (Wolrd Wide Web Consorcium)
   http://www.w3.org
• Sun
   http://java.sun.com/xml
• Microsoft
   http://msdn.microsoft.com/xml
• Apache XML Project
   http://xml.apache.org
• Otros
   http://www.xml.com
   http://www.xml.org
   http://www.xmlsoftware.com
   http://www.xmlhack.com

Más contenido relacionado

La actualidad más candente (19)

XML - Introducción
XML - IntroducciónXML - Introducción
XML - Introducción
 
Manual XML
Manual XMLManual XML
Manual XML
 
XML y JAVA
XML y JAVAXML y JAVA
XML y JAVA
 
Manual xml
Manual xmlManual xml
Manual xml
 
Introducción a XML: Sintaxis y documentos bien formados
Introducción a XML: Sintaxis y documentos bien formadosIntroducción a XML: Sintaxis y documentos bien formados
Introducción a XML: Sintaxis y documentos bien formados
 
Apuntes de XSD
Apuntes de XSDApuntes de XSD
Apuntes de XSD
 
XML Básico
XML BásicoXML Básico
XML Básico
 
Tutorial de DTD en PDF
Tutorial de DTD en PDFTutorial de DTD en PDF
Tutorial de DTD en PDF
 
Xml
XmlXml
Xml
 
Ejercicio - Personal de departamentos (XSD - XML Schema)
Ejercicio - Personal de departamentos (XSD - XML Schema)Ejercicio - Personal de departamentos (XSD - XML Schema)
Ejercicio - Personal de departamentos (XSD - XML Schema)
 
Presentacion xml
Presentacion xmlPresentacion xml
Presentacion xml
 
Qué es xml
Qué es xmlQué es xml
Qué es xml
 
Colima2000
Colima2000Colima2000
Colima2000
 
Xml dtd
Xml dtd Xml dtd
Xml dtd
 
Tema 2
Tema 2Tema 2
Tema 2
 
Tutorial XML
Tutorial XMLTutorial XML
Tutorial XML
 
Introducción a XML Schema
Introducción a XML SchemaIntroducción a XML Schema
Introducción a XML Schema
 
Chuleta de DTD
Chuleta de DTDChuleta de DTD
Chuleta de DTD
 
XML y DTDs
XML y DTDsXML y DTDs
XML y DTDs
 

Destacado

Manual programacion - java - jsp & xml
Manual   programacion - java - jsp & xmlManual   programacion - java - jsp & xml
Manual programacion - java - jsp & xmlgilhorak
 
Caso practico de base de datos orientada a objetos
Caso practico de base de datos orientada a objetosCaso practico de base de datos orientada a objetos
Caso practico de base de datos orientada a objetosMiguel Martinez
 
PHP Avanzado: PHP, XML y Servicios Web
PHP Avanzado: PHP, XML y Servicios WebPHP Avanzado: PHP, XML y Servicios Web
PHP Avanzado: PHP, XML y Servicios WebRightster
 
10 herramientas importantes de un tecnico de computadoras
10 herramientas importantes de un tecnico de computadoras10 herramientas importantes de un tecnico de computadoras
10 herramientas importantes de un tecnico de computadorasJuan1215
 
10 herramientas de software para un tecnico de computadoras
10 herramientas de software para un tecnico de computadoras10 herramientas de software para un tecnico de computadoras
10 herramientas de software para un tecnico de computadorasJuan1215
 
Modulo Photoshop Cs 6
Modulo Photoshop Cs 6Modulo Photoshop Cs 6
Modulo Photoshop Cs 6Free TIC
 
Protección de la Información: Una necesidad en los tiempos modernos
Protección de la Información: Una necesidad en los tiempos modernosProtección de la Información: Una necesidad en los tiempos modernos
Protección de la Información: Una necesidad en los tiempos modernosCristián Rojas, MSc., CSSLP
 
MANPOWER - Insourcing e-learning: la (auto)gestión del conocimiento
MANPOWER - Insourcing e-learning: la (auto)gestión del conocimientoMANPOWER - Insourcing e-learning: la (auto)gestión del conocimiento
MANPOWER - Insourcing e-learning: la (auto)gestión del conocimientoCRISEL BY AEFOL
 
Industria impresum-imprenta-y-publicidad
Industria impresum-imprenta-y-publicidadIndustria impresum-imprenta-y-publicidad
Industria impresum-imprenta-y-publicidadwww.apc.ec
 
Municipales 2012 Analisis y estadisticas definitivos de alcaldes,concejales y...
Municipales 2012 Analisis y estadisticas definitivos de alcaldes,concejales y...Municipales 2012 Analisis y estadisticas definitivos de alcaldes,concejales y...
Municipales 2012 Analisis y estadisticas definitivos de alcaldes,concejales y...GRS Social Networking
 
PMEIy PI06 PEREZ LIBREROS UNID
PMEIy PI06 PEREZ LIBREROS UNIDPMEIy PI06 PEREZ LIBREROS UNID
PMEIy PI06 PEREZ LIBREROS UNIDOblicuo Libreros
 
Mundo electronico 2013
Mundo electronico 2013Mundo electronico 2013
Mundo electronico 2013markezting
 
130124 OPTIMIZA LA GESTION DE TU PYME CON HERRAMIENTAS CLOUD COMPUTING
130124 OPTIMIZA LA GESTION DE TU PYME CON HERRAMIENTAS CLOUD COMPUTING130124 OPTIMIZA LA GESTION DE TU PYME CON HERRAMIENTAS CLOUD COMPUTING
130124 OPTIMIZA LA GESTION DE TU PYME CON HERRAMIENTAS CLOUD COMPUTINGPROJECTATIO MANAGEMENT CONSULTING SL
 
FOTOS ECOS DE LA SABANA - Nº 47 (2ª quincena agosto 2015)
FOTOS ECOS DE LA SABANA - Nº 47 (2ª quincena agosto 2015)FOTOS ECOS DE LA SABANA - Nº 47 (2ª quincena agosto 2015)
FOTOS ECOS DE LA SABANA - Nº 47 (2ª quincena agosto 2015)gounougaya
 

Destacado (20)

Dom
DomDom
Dom
 
Manual programacion - java - jsp & xml
Manual   programacion - java - jsp & xmlManual   programacion - java - jsp & xml
Manual programacion - java - jsp & xml
 
Caso practico de base de datos orientada a objetos
Caso practico de base de datos orientada a objetosCaso practico de base de datos orientada a objetos
Caso practico de base de datos orientada a objetos
 
PHP Avanzado: PHP, XML y Servicios Web
PHP Avanzado: PHP, XML y Servicios WebPHP Avanzado: PHP, XML y Servicios Web
PHP Avanzado: PHP, XML y Servicios Web
 
10 herramientas importantes de un tecnico de computadoras
10 herramientas importantes de un tecnico de computadoras10 herramientas importantes de un tecnico de computadoras
10 herramientas importantes de un tecnico de computadoras
 
10 herramientas de software para un tecnico de computadoras
10 herramientas de software para un tecnico de computadoras10 herramientas de software para un tecnico de computadoras
10 herramientas de software para un tecnico de computadoras
 
Modulo Photoshop Cs 6
Modulo Photoshop Cs 6Modulo Photoshop Cs 6
Modulo Photoshop Cs 6
 
Protección de la Información: Una necesidad en los tiempos modernos
Protección de la Información: Una necesidad en los tiempos modernosProtección de la Información: Una necesidad en los tiempos modernos
Protección de la Información: Una necesidad en los tiempos modernos
 
Maravillas naturales
Maravillas naturalesMaravillas naturales
Maravillas naturales
 
MANPOWER - Insourcing e-learning: la (auto)gestión del conocimiento
MANPOWER - Insourcing e-learning: la (auto)gestión del conocimientoMANPOWER - Insourcing e-learning: la (auto)gestión del conocimiento
MANPOWER - Insourcing e-learning: la (auto)gestión del conocimiento
 
Agroglifos
AgroglifosAgroglifos
Agroglifos
 
Industria impresum-imprenta-y-publicidad
Industria impresum-imprenta-y-publicidadIndustria impresum-imprenta-y-publicidad
Industria impresum-imprenta-y-publicidad
 
Dirección estratégica sesiones introductorias
Dirección estratégica sesiones introductoriasDirección estratégica sesiones introductorias
Dirección estratégica sesiones introductorias
 
Municipales 2012 Analisis y estadisticas definitivos de alcaldes,concejales y...
Municipales 2012 Analisis y estadisticas definitivos de alcaldes,concejales y...Municipales 2012 Analisis y estadisticas definitivos de alcaldes,concejales y...
Municipales 2012 Analisis y estadisticas definitivos de alcaldes,concejales y...
 
Cisterna de la_basílica
Cisterna de la_basílicaCisterna de la_basílica
Cisterna de la_basílica
 
PMEIy PI06 PEREZ LIBREROS UNID
PMEIy PI06 PEREZ LIBREROS UNIDPMEIy PI06 PEREZ LIBREROS UNID
PMEIy PI06 PEREZ LIBREROS UNID
 
Mundo electronico 2013
Mundo electronico 2013Mundo electronico 2013
Mundo electronico 2013
 
130124 OPTIMIZA LA GESTION DE TU PYME CON HERRAMIENTAS CLOUD COMPUTING
130124 OPTIMIZA LA GESTION DE TU PYME CON HERRAMIENTAS CLOUD COMPUTING130124 OPTIMIZA LA GESTION DE TU PYME CON HERRAMIENTAS CLOUD COMPUTING
130124 OPTIMIZA LA GESTION DE TU PYME CON HERRAMIENTAS CLOUD COMPUTING
 
FOTOS ECOS DE LA SABANA - Nº 47 (2ª quincena agosto 2015)
FOTOS ECOS DE LA SABANA - Nº 47 (2ª quincena agosto 2015)FOTOS ECOS DE LA SABANA - Nº 47 (2ª quincena agosto 2015)
FOTOS ECOS DE LA SABANA - Nº 47 (2ª quincena agosto 2015)
 
Cambios en la educación pública
Cambios en la educación públicaCambios en la educación pública
Cambios en la educación pública
 

Similar a Curso XML - Introducción al lenguaje XML

Similar a Curso XML - Introducción al lenguaje XML (20)

Presentación muy chula ApéndiceTecnologíaXML.ppt
Presentación muy chula ApéndiceTecnologíaXML.pptPresentación muy chula ApéndiceTecnologíaXML.ppt
Presentación muy chula ApéndiceTecnologíaXML.ppt
 
Web services y java
Web services y javaWeb services y java
Web services y java
 
Xml
XmlXml
Xml
 
Diferencias entre XML y HTML
Diferencias entre XML y HTMLDiferencias entre XML y HTML
Diferencias entre XML y HTML
 
Xml
XmlXml
Xml
 
Arquitectura del Web 2
Arquitectura del Web 2Arquitectura del Web 2
Arquitectura del Web 2
 
Guía+básica+de+características+de+archivos+.pdf
Guía+básica+de+características+de+archivos+.pdfGuía+básica+de+características+de+archivos+.pdf
Guía+básica+de+características+de+archivos+.pdf
 
XML
XMLXML
XML
 
Xml
XmlXml
Xml
 
Xml
XmlXml
Xml
 
XML (eXtensible Markup Lenguage) Ejemplo
XML  (eXtensible Markup Lenguage) EjemploXML  (eXtensible Markup Lenguage) Ejemplo
XML (eXtensible Markup Lenguage) Ejemplo
 
Archivo xml
Archivo xmlArchivo xml
Archivo xml
 
Computaciòn 4 unidad
Computaciòn 4 unidadComputaciòn 4 unidad
Computaciòn 4 unidad
 
Archivo xml
Archivo xmlArchivo xml
Archivo xml
 
Generación de Interfaces a partir de XML
Generación de Interfaces a partir de XMLGeneración de Interfaces a partir de XML
Generación de Interfaces a partir de XML
 
Omar unidad 07 base de datos
Omar unidad 07 base de datosOmar unidad 07 base de datos
Omar unidad 07 base de datos
 
XML: Introducción
XML: IntroducciónXML: Introducción
XML: Introducción
 
Xml
XmlXml
Xml
 
Introduccion al xml
Introduccion al  xmlIntroduccion al  xml
Introduccion al xml
 
Trabajo xml
Trabajo xmlTrabajo xml
Trabajo xml
 

Más de alvaro alcocer sotil (20)

Clase ciencia - Huesos
Clase ciencia - HuesosClase ciencia - Huesos
Clase ciencia - Huesos
 
Rm rompecabeza
Rm rompecabezaRm rompecabeza
Rm rompecabeza
 
Locomocion en animales
Locomocion en animalesLocomocion en animales
Locomocion en animales
 
Presentacion comuniccaion
Presentacion comuniccaionPresentacion comuniccaion
Presentacion comuniccaion
 
El trabajo académico chomsky
El trabajo académico chomskyEl trabajo académico chomsky
El trabajo académico chomsky
 
[002665]
[002665][002665]
[002665]
 
Catedral de-lima-historia-nc2ba-51-pps
Catedral de-lima-historia-nc2ba-51-ppsCatedral de-lima-historia-nc2ba-51-pps
Catedral de-lima-historia-nc2ba-51-pps
 
Proceso de ventas 2013
Proceso de ventas 2013Proceso de ventas 2013
Proceso de ventas 2013
 
Royal plaza
Royal plazaRoyal plaza
Royal plaza
 
Plan de marketing
Plan de marketingPlan de marketing
Plan de marketing
 
Intercambio de publicidad
Intercambio de publicidadIntercambio de publicidad
Intercambio de publicidad
 
Producto marca
Producto   marcaProducto   marca
Producto marca
 
Plan de mk tcompleto (3)
Plan de mk tcompleto (3)Plan de mk tcompleto (3)
Plan de mk tcompleto (3)
 
La marca debe ser humana
La marca debe ser humanaLa marca debe ser humana
La marca debe ser humana
 
3º sesion la competencia
3º sesion la competencia3º sesion la competencia
3º sesion la competencia
 
2ºsesion beneficios de la planeacion de marketing
2ºsesion beneficios de la planeacion de marketing2ºsesion beneficios de la planeacion de marketing
2ºsesion beneficios de la planeacion de marketing
 
1º sesion planeamiento estratégico de marketing
1º sesion planeamiento estratégico de marketing1º sesion planeamiento estratégico de marketing
1º sesion planeamiento estratégico de marketing
 
Aprendiendo publicidad ppt final paola
Aprendiendo publicidad ppt final paolaAprendiendo publicidad ppt final paola
Aprendiendo publicidad ppt final paola
 
Agencia de publicidad la campaña publicitaria -tipos
Agencia de  publicidad   la campaña publicitaria -tiposAgencia de  publicidad   la campaña publicitaria -tipos
Agencia de publicidad la campaña publicitaria -tipos
 
10º
 10º 10º
10º
 

Último

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 

Último (20)

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 

Curso XML - Introducción al lenguaje XML

  • 2. Requisitos - PC con Windows 98 / NT / 2000, 64 MB de RAM (dependen del servidor a usar) Para entorno Microsoft: - Internet Explorer - Parser MSXML 3 o superior. - Servidor IIS o Personal Web Server de Microsoft. Para entorno Java: - JDK 1.1.8 o superior - JAXP (Java API for XML Processing) - Servidor Web (por ej. iPlanet Web Server FastTrack Edition)
  • 3. El estándar XML Qué es XML y qué elementos lo El estándar XML componen Acceso a los datos de un documento DOM XML Cómo dar formato a un documento XSL XML con XSL Aplicaciones Uso práctico de XML en entornos Prácticas Java y Microsoft
  • 4. XML - Introducción • XML (eXtended Markup Language) es un lenguaje que proporciona un formato para describir datos estructurados • Es un lenguaje de marcas • Es un subconjunto de SGML (Standard Generalized Markup Language) • Definido por el W3C en 1998
  • 5. XML - Características • Lenguaje de marcas extensible, es un metalenguaje • Es “case sensitive” • Representación estructural de los datos en forma de árbol • Define los datos en una aplicación, no su presentación • Permite interoperatividad entre máquinas distintas (un estándar para el intercambio de datos)
  • 6. XML - Ejemplo de documento XML <?xml version="1.0"?> <!DOCTYPE discos SYSTEM "cds.dtd"> <discos> <disco> <artista tipo="individual">Frank Sinatra</artista> <titulo numerodepistas="2">In The Wee Small Hours</titulo> <pistas> <pista>In The Wee Small Hours</pista> <pista>Mood Indigo</pista> </pistas> <precio>$12.99</precio> </disco> <disco> <artista tipo="band">The Offspring</artista> <titulo numerodepistas="2">Americana</titulo> <pistas> <pista>Welcome</pista> <pista>Have You Ever</pista> </pistas> <precio>$12.99</precio> </disco> </discos>
  • 7. XML - Elementos XML •Un documento XML está formado por tags o etiquetas para la estructuración de los datos. Por ejemplo: <disco> •Un elemento XML está formado por una etiqueta de inicio y otra etiqueta final. Entre ambas está el valor del dato al que se refiere el tag. En este ejemplo, el elemento pista tiene como valor “Welcome”: <pista>Welcome</pista>
  • 8. XML - Elementos XML - Atributos • Un elemento XML puede contener uno o más atributos en su tag inicial En este ejemplo, el atributo sería “tipo”, y su valor “individual”: <artista tipo="individual">Frank Sinatra</artista> • Un elemento XML puede no contener un valor, solamente atributos. En este caso se puede escribir con un solo tag terminado en /. Esta expresión <precio valor=“$12.99”></precio> equivale a <precio valor=“$12.99”/>
  • 9. XML - Documentos XML Un documento XML es un conjunto de elementos XML anidados (con estructura de árbol) Reglas a tener en cuenta: • Todos los elementos deben cerrarse • Los elementos deben estar limpiamente anidados • Un documento XML debe tener un único elemento raíz
  • 10. XML - Reglas de Construcción de Nombres XML En la construcción de nombres XML (atributos y elementos XML) se deben tener en cuenta las siguientes reglas: • Un nombre XML puede contener los siguientes caracteres: Letras (A-Z, a-z), dígitos (0-9), guión bajo (_), guión (-) y punto (.) • Debe empezar con una letra o guión bajo • Puede usar dos puntos (:) sólo en namespaces • No puede contener espacios en blanco
  • 11. XML - Documento XML Bien Formado Se dice que un documento XML está bien formado si cumple las siguientes reglas: • Todo tag debe tener su correspondiente tag final. • Los elementos deben quedar debidamente anidados • Debe haber exactamente un elemento raíz • Los valores de los atributos deben estar entre comillas • Un mismo elemento no debe tener más de un atributo con el mismo nombre • Los comentarios no deben colocarse dentro de los tags • Los caracteres & y < deben ser precedidos por un si forman parte de los datos de un elemento o atributo. Validar un documento XML Con un Parser XML
  • 12. XML - Ejercicio 1 ¿Es el siguiente documento XML un documento bien formado? <empleados> <empleado nombre=“Juan” apellido=“Pérez” apellido=“Sánchez”> <direccion calle=“López Peñalver”> </empleado> <Empleado nombre=“Alberto”> <direccion calle=“López Peñalver”> </Empleado> <empleado> <localidad>Málaga</localidad> </Empleado> </empleados> <oficinas> <oficina 1tlf=“951000000” 2tlf=“951000001”> <ciudad>Madrid</ciudad> </oficina> <oficina> <ciudad telefono=“12312312”>Barcelona</ciudad> </oficina> </oficinas>
  • 13. XML - Ejercicio 2 Crear un documento XML válido que contenga los siguientes datos: Vuelo Origen Destino Salida Llegada IB777 Málaga Madrid 8:00 8:50 IB888 Madrid Barcelona 9:00 10:10 IB999 Madrid Málaga 12:00 12:50 Código Avión Vuelos 1234 IB777,IB999 1122 IB888
  • 14. XML - Namespaces •Un XML namespace es una colección de nombres que pueden ser usados en elementos o atributos. •Un namespace distingue nombres de forma única en la Web, para evitar conflictos. •Un namespace puede ser identificado por una: URI (Universal Resource Identifier) URL (Uniform Resource Locator) URN (Uniform Resource Number)
  • 15. XML - Namespaces - Declaración Se declara con el atributo xmlns en el elemento deseado. Existen dos tipos de declaración: •Declaración por defecto. No hace falta usar prefijo, todos los nombres pertenecen al namespace declarado: <BOOK xmlns="urn:BookLovers.org:BookInfo"> <TITLE>A Suitable Boy</TITLE> <PRICE currency="US Dollar">22.95</PRICE> </BOOK> •Declaración explícita. Cada nombre debe usar un prefijo especificando el namespace al que pertenece: <BOOKS> <bk:BOOK xmlns:bk="urn:BookLovers.org:BookInfo" xmlns:money="urn:Finance:Money"> <bk:TITLE>A Suitable Boy</bk:TITLE> <bk:PRICE money:currency="US Dollar">22.95</bk:PRICE> </bk:BOOK> </BOOKS>
  • 16. XML - Prólogo del Documento XML Antes del elemento raíz del documento XML pueden aparecer una serie de elementos, formando la siguiente estructura: <?xml version="1.0"?> Declaración XML <!-- Discos.xml, ejemplo de documento XML Comentarios --> <?xml-stylesheet href=“discos.xsl” type=“text/xml”?> Instrucciones de procesamiento <!DOCTYPE discos SYSTEM “discos.dtd"> Document Type <discos> Declaration .... </discos> Elemento raiz
  • 17. XML - Prólogo del Documento XML Declaración • No es necesaria para que el documento sea bien formado • Incluye los siguientes atributos: • version: versión de XML • encoding: codificación de los caracteres • standalone: especifica si no es necesaria una validación por DTD <?xml version="1.0" encoding="ISO-8859-1"?> Comentarios • Pueden aparecer en cualquier sitio excepto dentro de un tag <!-- Discos.xml, ejemplo de documento XML -->
  • 18. XML - Prólogo del Documento XML Instrucciones de procesamiento • Asocia el documento XML con algún elemento externo, como por ejemplo una hoja de estilos xsl. <?xml-stylesheet href=“discos.xsl” type=“text/xml”?> Document Type Declaration • Referencia a un DTD (Document Type Definition), el cual valida el documento XML. <!DOCTYPE discos SYSTEM “discos.dtd">
  • 19. XML - DTDs (Document Type Definition) • Un DTD es un documento que especifica las restricciones que debe cumplir un documento XML. • Un documento válido es aquel que cumple las restricciones especificadas en su DTD. Un documento es inválido si no las cumple o simplemente no referencia a ningún DTD. • Permite la declaración de tres tipos de estructuras:  Elementos  Atributos  Entidades • Debido a sus limitaciones se creó el lenguaje XML Schema.
  • 20. XML - DTDs - Declaración Un DTD se puede declarar de 2 formas: • En un fichero aparte <!DOCTYPE discos SYSTEM “discos.dtd"> • En el propio documento XML (en el prólogo): <!DOCTYPE empleado [ <!ELEMENT empleado (nombre, direccion)> <!ELEMENT nombre (#PCDATA)> <!ELEMENT direccion (ciudad, calle)> <!ELEMENT ciudad (#PCDATA)> <!ELEMENT calle (#PCDATA)> ] >
  • 21. XML - DTDs - Declaración de Elementos • Un Elemento se declara especificando su nombre y los elementos que lo componen: <!ELEMENT empleado (nombre, direccion)> • Si el elemento no contiene ningún otro elemento, se especifica el tipo del valor que contiene <!ELEMENT nombre (#PCDATA)> #PCDATA permite caracteres alfanuméricos •Así, el siguiente documento XML sería válido para el DTD anterior: <empleado> <nombre>Antonio</nombre> <direccion> <ciudad>Málaga</ciudad> <calle>Larios</calle> </direccion> </empleado>
  • 22. XML - DTDs - Declaración de Elementos • Si separamos con comas los elementos hijo, el orden de aparición de éstos debe cumplirse <!ELEMENT empleado (nombre, direccion)> • Si separamos los elementos con una barra ( | ), con que aparezca sólo uno de ellos ya se cumplirá la condición <!ELEMENT empleado (nombre | direccion)> • También pueden agruparse con paréntesis: <!ELEMENT empleado ((nombre | apellido) , direccion)>
  • 23. XML - DTDs - Declaración de Elementos Modificadores • Los siguientes modificadores especifican el número de elementos que deben aparecer: * 0 ó más + 1 ó más ? 0ó1 • Si no se muestra ningún modificador, debe aparecer exactamente 1 elemento. Ejemplos: <!ELEMENT empleado (nombre , apellido? , direccion+)> <!ELEMENT empleado (nombre , apellido , (direccion | telefono)*)>
  • 24. XML - DTDs - Declaración de Elementos Elementos Vacíos • Si un elemento no contiene valor, se declara con la palabra EMPTY <!ELEMENT direccion EMPTY> Contenido ANY • Si un elemento puede tener cualquier tipo de valor o de elementos compuestos, se declara con la palabra ANY <!ELEMENT otrosDatos ANY>
  • 25. XML - DTDs - Ejercicio 1 Crear un DTD que valide la siguiente estructura: <proveedores> <proveedor> <nombre>Pascal</nombre> <productos> <producto>Leche</producto> <producto>Flan</producto> </productos> </proveedor> <proveedor> <nombre>Capitán Pesconovo</nombre> <productos> <producto>Merluza</producto> </productos> <telefono> 952888777 </telefono> </proveedor> </proveedores>
  • 26. XML - DTDs - Declaración de Atributos • Un elemento puede tener 1 o más atributos. Por ejemplo, para declarar los atributos ciudad, calle y numero del elemento direccion, se haría de la siguiente forma: <!ATTLIST direccion         ciudad CDATA #FIXED <direccion ciudad=“Málaga” calle=“Larios”         calle CDATA #REQUIRED numero=“5”/>         numero CDATA #IMPLIED > • La expresión #REQUIRED indica que el atributo es obligatorio • La expresión #IMPLIED indica que el atributo es opcional • La expresión #FIXED indica que el atributo no es modificable • La expresión CDATA es el tipo de dato (datos alfanuméricos) • Se puede direccion  pais un valor por defecto: <!ATTLIST especificar CDATA “España”>
  • 27. XML - DTDs - Declaración de Atributos Tipos de atributos • Enumeración. Limita los posibles valores del atributo. <!ATTLIST empleado sexo (hombre | mujer) #REQUIRED> • Tipos de atributos simple. • CDATA. Caracteres alfanuméricos • ID. Identificador único para un elemento. • IDREF. Referencia a un número identificador contenido en el atributo ID de algún otro elemento <!ATTLIST empleado <empleado empid=“A120”> empid ID #REQUIRED </empleado> supervisor IDREF #IMPLIED <empleado empid=“A240” supervisor=“A120”> > </empleado>
  • 28. XML - DTDs - Declaración de Entidades • Una entidad es una asociación entre el nombre de la entidad y su valor. La entidad puede aparecer en el valor de un elemento o atributo, y será sustituido por su valor. • Hay 5 entidades predefinidas: • &lt; (<) • &amp; (&) • &gt; (>) • &quot; (") • &apos; (') • Se pueden definir entidades nuevas: <!ENTITY empresa “Coritel AOS"> y usarlas de la siguiente forma <empleado empresa=“&empresa;">
  • 29. XML - DTDs - Ejercicio 2 Crear un DTD que valide la siguiente estructura: <almacen empresa="&empresa;"> <productos> <producto id="A191"> <nombre>Teclado</nombre> <precio valor="20" moneda="euros"/> <caracteristicas>15 pulgadas</caracteristicas> </producto> <producto id="A167"> <nombre>Monitor 14'</nombre> <precio valor="20000" moneda="pesetas"/> </producto> <producto id="A180" nohay="A167"> <nombre>Monitor 15'</nombre> <precio valor="20000" moneda="pesetas"/> </producto> </productos> </almacen>
  • 30. XML - Schema • Estándar para la validación de documentos XML • Validación mediante un parser • Mejora con respecto a los DTDs  Permite mayor exactitud en el tipo de datos.  Está escrito en formato XML  Es extensible y escalable  Permite especificar el número de elementos que contiene un elemento  Las declaraciones de elementos están anidadas
  • 31. XML - Schema - Declaración • Todo schema debe ser declarado con el elemento Schema y en el siguiente namespace: <?xml version="1.0" encoding="ISO-8859-1"?> <Schema xmlns=“urn:schemas-microsoft-com:xml-data“ xmlns:dt="urn:schemas-microsoft-com:datatypes"> ... </Schema> • Al ser el schema un documento XML, la primera línea será la versión de XML usada. • Se almacena en un archivo con extensión xml.
  • 32. XML - Schema - Elementos • Elementos simples: <ElementType name=“precio“ content=“textOnly”/>  content: textOnly, eltOnly, empty, mixed (por defecto) • Elementos compuestos: <ElementType name=“producto“ order=“seq”> <element type=“nombre” minOccurs=“1”/> <element type=“precio”/> </ElementType> minOccurs: número mínimo de apariciones del elemento 0,1 maxOccurs: número máximo de apariciones del elemento 1,* order: seq (por defecto), one, many
  • 33. XML - Schema - Elementos • Agrupación: especifica reglas de aparición para un subconjunto de elementos <ElementType name=“producto“> <element type=“nombre”/> <element type=“precio”/> <group order="one"> <element type=“descripcion"/> <element type=“categoria"/> </group> </ElementType>
  • 34. XML - Schema - Atributos Declaración de atributos: <AttributeType name=“origen“/> <AttributeType name=“proveedor“ required=“yes”/> <ElementType name=“producto“> <element type=“nombre” minOccurs=“0”/> <element type=“precio”/> <attribute type=“origen” default=“Madrid”/> <attribute type=“proveedor”/> </ElementType>
  • 35. XML - Schema - Referencia al schema Un documento XML especifica que debe ajustarse a un schema de la siguiente forma: <productos xmlns=“x-schema:schemaproductos.xml"> ... </productos>
  • 36. XML - Schema - Ejercicio 1 Ejercicio 1: XML Schema Ejercicio 1.1 • Crear un XML Schema en productosesq.xml para la validación del archivo productos.xml, donde debe haber al menos 1 producto, idProducto sea obligatorio, cada producto tenga al menos 1 procedencia y el precio sea opcional.
  • 37. XML - Schema - Tipos Los tipos se especifican con el atributo dt:type <ElementType name=“precio“ dt:type=“int”/> Tipos: id valor único idref referencia a un id string cadena boolean 0ó1 char 1 carácter date fecha en formato 1994-11-05 time hora en formato 08:15:27 int entero consigo opcional float número real i1,i2,i4,i8 entero, especificando el número de bytes r4,r8 real, especificando el número de bytes ui1,ui2,ui4,ui8 entero sin signo
  • 38. XML - Schema - Restricciones El elemento datatype permite especificar el tipo de un elemento o atributo y restringir sus valores <ElementType name=“FechaEntrega" content="textonly"> <datatype dt:type="date" dt:min="1969-07-20“ dt:max=“2003-12-31"/> </ElementType> Posibles atributos de datatype: dt:type tipo del elemento o atributo dt:values valores posibles si dt:type = enumeration dt:max máximo valor permitido dt:maxExclusive máximo valor permitido excluyente dt:min mínimo valor permitido dt:minExclusive mínimo valor permitido excluyente dt:maxLength máxima longitud del valor
  • 39. XML - Schema - Enumeración En la enumeración sólo es válido uno de los valores especificados: <AttributeType name=“calidad" dt:type="enumeration“ dt:values=“alta media baja"/>
  • 40. XML - Schema - Ejercicio 2 Ejercicio 2: XML Schema Ejercicio 2.1 • Crear un XML Schema para la validación del archivo clientes.xml, de forma que: idCliente sea obligatorio y número de 5 dígitos como máximo dni sea obligatorio y alfanumérico con 8 caracteres máximo localidad opcional nombre obligatorio apellido1 opcional apellido2 opcional, pero si aparece debe ser después de un apellido1 sexo opcional, y será “Hombre” o “Mujer” direcciones es opcional, pero si aparece habrán 1 ó más direcciones. ciudad, calle y número deben aparecer en ese orden
  • 41. XML - SAX • SAX (Simple API for XML) es una API que permite a una aplicación escribir código genérico que pueda funcionar con cualquier parser • SAX no es un parser en sí, sólo una capa entre una aplicación y un parser XML file XML parser SAX aplicación
  • 42. DOM Qué es XML y qué elementos lo El estándar XML componen Acceso a los datos de un documento DOM XML Cómo dar formato a un documento XSL XML con XSL Aplicaciones Uso práctico de XML en entornos Prácticas Java y Microsoft
  • 43. DOM - Introducción • El DOM (Document Object Model) es una API (Application Programming Interface) creada para acceder a los datos de un documento XML. • Muchos lenguajes tienen librerías que permiten acceder al DOM de un documento XML mediante un parser. • El estándar “Level 1 DOM” definido por el W3C es seguido, entre otros navegadores, por Netscape 6 y Explorer 5. • Al DOM de un documento XML puede accederse desde Javascript, VBScript u otros lenguajes que lo soporten.
  • 44. DOM - Data Island • Un Data Island es un documento XML insertado en una página HTML. Esto se puede conseguir de 2 formas: • Insertando el código del documento XML en la página: <XML ID="XMLCliente"> <clientes> <cliente idCliente=“81422”> <nombre>Antonio</nombre> </cliente> <cliente idCliente=“81555”> <nombre>Jose Carlos</nombre> </cliente> </clientes> </XML> • Referenciando el archivo donde está contenido el documento XML: <XML ID="XMLCliente" SRC=“clientes.xml"></XML>
  • 45. DOM - Acceso a elementos • XMLDocument: obtiene el documento XML • documentElement: obtiene el elemento raiz del documento XML • childNodes: obtiene una lista de los elementos hijos de un elemento • item(n): devuelve el elemento n de una lista • text: devuelve el valor de un nodo La expresión XMLCliente.XMLDocument.documentElement.childNodes.item(0).childNodes.item(0).text devuelve “Antonio” • length: devuelve el número de nodos hijos
  • 46. DOM - Acceso a elementos • firstChild: devuelve el primer elemento hijo de otro elemento • lastChild: devuelve el último elemento hijo de otro elemento • getElementsByTagName(nombre) : obtiene una lista de los elementos encontrados con el nombre indicado. Busca de forma recursiva. XMLCliente.XMLDocument.documentElement.getElementsByTagName(“nombre”).item(0).text devuelve “Antonio” • nextSibling: devuelve el siguiente elemento en la lista de hijos del elemento padre, o null si es el último elemento. • previousSibling: devuelve el anterior elemento en la lista de hijos del elemento padre, o null si es el primer elemento. • parentNode: devuelve el nodo padre de un elemento.
  • 47. DOM - Acceso a atributos • getAttribute(nombre) : obtiene el valor del atributo con el nombre especificado XMLCliente.XMLDocument.documentElement.firstChild.getAttribute("idCliente") devuelve “81422” • attributes: obtiene una lista de los atributos de un elemento XMLCliente.XMLDocument.documentElement.firstChild.attributes.item(0).text también devuelve “81422”
  • 48. DOM - Ejercicio 1 Ejercicio 1: Acceso a XML Ejercicio 1.1 • Insertar el contenido de clientes.xml en un Data Island en el código de pagina.htm • Modificar la función mostrarDatos() para que muestre mensajes con los siguientes datos: • Mostrar el nombre del primer cliente • Mostrar el idCliente del último cliente • Mostrar el número de clientes • Hacer un bucle que muestre los dni. • Hacer un bucle que, para cada cliente, si tiene localidad que la muestre, y si no, que muestre el mensaje “Sin localidad”
  • 49. DOM - Modificación de elementos Creación de un elemento • createElement(nombre) : devuelve un elemento con el nombre especificado • createTextNode(nombre) : devuelve un objeto Text que debe ser insertado en un elemento • appendChild(objeto) : inserta un hijo a la lista de hijos de un elemento. El objeto puede ser un Elemento o un objeto Text. El siguiente código inserta el apellido al primer cliente con valor “Fernández” element = XMLCliente.createElement("apellido"); textNode = XMLCliente.createTextNode("Fernández"); element.appendChild(textNode); XMLCliente.XMLDocument.documentElement.firstChild.appendChild(element);
  • 50. DOM - Modificación de elementos Eliminación de un elemento • removeChild(objeto) : elimina el objeto especificado La siguiente instrucción elimina el segundo cliente: XMLCliente.XMLDocument.documentElement.removeChild ( XMLCliente.XMLDocument.documentElement.childNodes.item(1) ); Cambiar el valor de un elemento Simplemente con la operación de asignación. La siguiente sentencia modifica el nombre del primer cliente: XMLCliente.XMLDocument.documentElement.firstChild.firstChild.text = “Jesús";
  • 51. DOM - Modificación de atributos Creación o cambio de valor de un atributo • setAttribute(nombre,valor) : si el atributo especificado existe, cambia su valor, si no, crea uno nuevo y le asigna el valor especificado. El siguiente ejemplo crea el atributo “dni” para el primer cliente: XMLCliente.XMLDocument.documentElement.firstChild.setAttribute(“dni", “55333444"); Eliminación de un atributo • removeAttribute(nombre) : elimina de un nodo el atributo con el nombre especificado. Este ejemplo borra el atributo “nif” creado en la sentencia anterior: XMLCliente.XMLDocument.documentElement.firstChild.removeAttribute(“dni");
  • 52. DOM - Ejercicio 2 Ejercicio 2: Modificación de XML Ejercicio 2.1 • Referenciar al archivo clientes.xml desde un Data Island en el código de pagina.htm • Modificar la función cambiarDatos() para que haga lo siguiente: • Añadir el atributo “localidad” al segundo cliente con el valor “Málaga” • Añadir una etiqueta “apellido” al último cliente con el valor “Martín” • Eliminar el primer cliente • Cambiar el nombre del último cliente por “Jorge”. • Para comprobar los cambios, hacer 3 bucles que muestren todos los nombres, apellidos y localidades. Debe mostrar: Nombres: Jose Carlos, Jorge Apellidos: Sánchez, Martín Localidades: Málaga, null
  • 53. XSL Qué es XML y qué elementos lo El estándar XML componen Acceso a los datos de un documento DOM XML Cómo dar formato a un documento XSL XML con XSL Aplicaciones Uso práctico de XML en entornos Prácticas Java y Microsoft
  • 54. XSL - Introducción • XSL (eXtensible Stylesheet Language) es un estándar creado por el W3C para el tratamiento visual de documentos XML. • El estándar XSL define dos lenguajes: XSLT y XPath. • XSLT (XSL Transformations) es un lenguaje que define una serie de elementos que sirven para dar un formato a un documento XML. • XPath (XML Path Language) es un lenguaje que define una forma de construir expresiones que identifican parte de un documento XML. • Sigue una estructura de árbol, al igual que XML. Procesador XSLT • Un procesador XSLT es un programa que se encarga de aplicar una plantilla XSL a un documento XML. • Recibe como entrada un documento XSL y otro XML y devuelve como salida un documento XML, que puede ser una página HTML.
  • 55. XSL - Modo de funcionamiento • XSLT usa una serie de tags que están definidos dentro de un namespace. El namespace definido para los tags de XSLT 1.0 debe definirse en el tag stylesheet de la siguiente forma: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> .... </xsl:stylesheet> • El documento XSL contiene 1 o más plantillas (templates), definidas dentro del elemento stylesheet. El atributo match indica a que elemento se le aplica la plantilla. “/” indica que la plantilla se aplica al elemento root. <xsl:template match="/"> ... </xsl:template>
  • 56. XSL - Ejemplo Éste sería un ejemplo de documento XSL: <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0“ mlns:xsl="http://www.w3.org/1999/XSL/Transform">      <xsl:template match=“/">           <html>           <head><title>Clientes</title></head>           <body>           .....           </body>           </html>      </xsl:template> </xsl:stylesheet> Para aplicar el documento XSL al XML, el procesador XSLT busca un template que se aplique al elemento root, y lo ejecuta.
  • 57. XSL - Ejecución en IE • Internet Explorer 5 contiene un Procesador XSLT (MSXML). • Para aplicar una plantilla XSLT a un documento XML, se añade la siguiente línea al comienzo del documento XML. <?xml-stylesheet type=“text/xsl” href=“clientes.xsl” ?> • Abrir el fichero xml con el Explorer
  • 58. XSL - XPath • XPath es un lenguaje para construir expresiones que referencien a una parte de un documento XML <clientes> <cliente idCliente=“81422” dni=“33555888”> <nombre>Antonio</nombre> </cliente> <cliente idCliente=“81555”> <nombre>Jose Carlos</nombre> </cliente> </clientes> • Referencias absolutas: comienzan con el elemento root ( / ) /clientes/cliente devuelve todos los nodos cliente /clientes/cliente[1] devuelve el primer cliente • Referencias relativas: parten del nodo contextual. clientes/cliente también devuelve los nodos cliente
  • 59. XSL - XPath - Símbolos especiales Símbolos especiales Aparte de la barra / , hay otros símbolos con los siguientes significados: Símbolo Significado @nombre Atributo llamado nombre // El nodo y todos sus descendientes . El propio nodo .. El nodo padre * Todos los nodos hijo @* Todos los atributos /clientes/cliente/@idCliente devuelve todos los idCliente /clientes//* devuelve todos los nodos descendientes de cliente Suponiendo que el nodo contextual es /clientes/cliente con idCliente=“81422”: ./nombre devuelve el valor del elemento nombre (“Antonio”)
  • 60. XSL - XPath - Predicados Predicados Un predicado es una condición que filtra los elementos devueltos por una expresión. /clientes/cliente[nombre=‘Antonio’] devuelve los clientes llamados Antonio /clientes/cliente[@idCliente=‘81422’]/nombre devuelve el nombre del cliente con idCliente igual a ‘81422’ Negación La palabra not pone como condición que no esté un elemento o atributo. /clientes/cliente[not(@dni)] devuelve los clientes que no tengan como atributo el dni. /clientes/cliente[not(apellido)] devuelve los clientes que no tengan el tag apellido
  • 61. XSL - XPath - Ejercicio 1 <paises> <pais idPais=“11”> <nombre>Italia</nombre> <ciudades> <ciudad idCiudad=“320”> <nombre>Roma</nombre> <poblacion>5000000</poblacion> </ciudad> </ciudades> </pais> </paises> • Obtener los nombres de todos los países • Obtener los nombres de todas las ciudades del segundo país de la lista • Obtener los nombres de las ciudades con población mayor a 1000000 • Obtener los idCiudad de las ciudades con población entre 50000 y 100000 • Obtener el idPais del país que contenga la ciudad con idCiudad = 320
  • 62. XSL - XHTML XHTML (eXtended HyperText Markup Language) • Implementación de HTML compatible con XML • Validación: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN“ "DTD/xhtml1-strict.dtd"> Reglas de construcción: • Tags obligatorios: head y body • Tags en minúscula • Elementos correctamente anidados • Todos los elementos deben ser cerrados Texto<p> <p>Texto</p> <br> <br/>
  • 63. XSL - XHTML Reglas de construcción: • Los atributos deben ir entre comillas <td width=100> <td width=“100”> • Los atributos deben tener valor <option value=“1” selected> <option value=“1” selected=“selected”> • Para los scripts se delimita una sección CDATA <script language="JavaScript type="text/javascript"> <! [CDATA[ document.write("<b>Hello World!</b>"); ]]> </script>
  • 64. XSL - XHTML - Ejercicio Ejercicio: Convertir a XHTML <script language="JavaScript" src="myscript.js"></script> <html> <body> Pagina inicio <br> <B>Formulario 1</B> <form name=“form1”> <img src=“imagen.gif” border=0> <input type=“checkbox” checked> </form> </body> </html>
  • 65. XSL - Elementos XSLT • xsl:value-of devuelve el valor especificado en el atributo select. Puede calcular el resultado de operaciones aritméticas <xsl:template match=“cliente">      <xsl:value-of select="@idCliente"/> </xsl:template> • xsl:element inserta un elemento con el nombre indicado en name <xsl:element name=“a"> Ir a siguiente página </xsl:element>
  • 66. XSL - Elementos XSLT • xsl:attribute añade un atributo al elemento en el que esté contenido. El nombre del atributo se especifica en el atributo name y su valor se especifica en el contenido del elemento xsl:attribute. <a> <xsl:attribute name=“href"> http://www.com </xsl:attribute> Ir a inicio </a> • xsl:if si la evaluación del contenido del atributo test es true, inserta el contenido del elemento <xsl:if test=“not(@idCliente)"> <b>Falta el dni del cliente</b> </xsl:if>
  • 67. XSL - Elementos XSLT • xsl:for-each itera sobre los elementos de la lista que devuelva la expresión contenida en el atributo select <xsl:for-each select=“/clientes/cliente"> <i><xsl:value-of select=“@idCliente”/></i><br> </xsl:for-each> • xsl:choose, xsl:when, xsl:otherwise instancia el contenido del primer elemento xsl:when cuyo atributo test devuelva true. Si ningún test se cumple, se instancia el contenido del elemento xsl:otherwise. <xsl:choose> <xsl:when test=“expresion1”> ... </xsl:when> ... <xsl:otherwise>.... </xs:otherwise> </xsl:choose>
  • 68. XSL - Elementos XSLT • xsl:comment inserta un comentario en el árbol resultante. <xsl:comment> genera el código comentario <!-- comentario --> </xsl:comment>
  • 69. XSL - Funciones Estas son las funciones más usadas definidas por XPath. • position(). Devuelve la posición del nodo actual relativa al conjunto de nodos del contexto. • count(conjuntoNodos) . Devuelve el número de nodos del conjunto pasado como parámetro. • concat(cadena1, cadena2, ...) . Devuelve la concatenación de sus argumentos. • substring(cadena, inicio, fin) . Devuelve la subcadena que comienza en la posición inicio y termina en fin. • round(numero). Devuelve el entero más cercano al valor pasado. • not(boolean). Devuelve la negación del argumento. Si el argumento no es booleano, lo convierte con la función boolean(). • boolean(objeto) . Si objeto es 0, NaN, un conjunto vacío o una cadena vacía, devuelve false; en otro caso devuelve true.
  • 70. XSL - Ejercicios Preparación de la máquina • Instalación del parser MSXML 3 o superior de Microsoft • Activación del parser (xmlinst.exe)
  • 71. XSL - Ejercicio 1 Ejercicio 1: Aplicar plantilla XSL a XML Ejercicio 1.1 • Modificar el archivo productos.xml para aplicarle la plantilla productos.xsl Ejercicio 1.2 • Modificar el archivo productos.xsl para que debajo de cada código muestre el precio Ejercicio 1.3 • Modificar el archivo productos.xsl para que debajo de cada precio muestre una lista de ciudades de procedencia. Ejercicio 1.4 • Modificar el archivo productos.xsl para que al comienzo muestre el número total de productos y, delante de cada producto, aparezca un índice (1,2,...).
  • 72. XSL - Ejercicio 2 Ejercicio 2: Elementos XSLT Ejercicio 2.1 • Modificar el archivo productos.xsl para que si el código del producto es 100, muestre tras el nombre el texto “(Producto en Oferta)” Ejercicio 2.2 • Modificar el archivo productos.xsl para que, si el precio es menor que un euro, muestre tras el nombre el texto “(menos de 1 euro)” Ejercicio 2.3 • Modificar el fichero productos.xsl para que, debajo de cada producto, aparezca un botón con el nombre del producto y, al pulsarlo, muestre su precio.
  • 73. Aplicaciones Prácticas Qué es XML y qué elementos lo El estándar XML componen Acceso a los datos de un documento DOM XML Cómo dar formato a un documento XSL XML con XSL Aplicaciones Uso práctico de XML en entornos Prácticas Java y Microsoft
  • 74. Aplicaciones Prácticas - Introducción XML se usa principalmente en los siguientes entornos: • Uso de XML conjuntamente con HTML en el cliente.  Internet Explorer  Netscape Navigator • XML en entorno Java  JAXP • XML en entorno Microsoft  MSXML
  • 75. Aplicaciones Prácticas - Java • JAXP (Java API for XML Processing) es una librería de clases de Sun que contiene: • Un parser XML (Crimson) • Un procesador XSLT (Xalan) • Parte de las clases tienen licencia de W3C, y el resto de Apache. • Puede descargarse libremente desde http://java.sun.com/xml • Necesita la previa instalación del JDK 1.1.8 (Java Development Kit) o Java 2 SDK (Software Development Kit)
  • 76. Aplicaciones Prácticas - Java Uso de las clases de JAXP Acceso a un documento XML desde un fichero // Clases de JAVAXP import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; // Excepciones import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; // Acceso a ficheros import java.io.File; import java.io.IOException; // DOM de W3C import org.w3c.dom.Document; import org.w3c.dom.DOMException;
  • 77. Aplicaciones Prácticas - Java Acceso a un documento XML desde un fichero (2) // Se declara el documento donde se almacenará el XML static Document document; public static void main(String argv[]) { // Se instancia la clase DocumentBuilderFactory DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // Se obtiene el xml del archivo DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse(new File(“archivo.xml”)); // Se accede al documento document.getDocumentElement()..... }
  • 78. Aplicaciones Prácticas - Java - Objetos En JAXP su usan los siguientes objetos. Algunos métodos cambian ligeramente, pero su significado son el mismo que en el DOM: Document • Element createElement(nombre) • Text createTextNode (valor) • Element getDocumentElement() Element subclase de Node • String getAttribute (nombre) • NodeList getElementsByTagName (nombre) • removeAttribute (nombre) • setAttribute(nombre,valor) Text subclase de Node
  • 79. Aplicaciones Prácticas - Java - Objetos Node • appendChild(Node) • NodeList getChildNodes () • Node getFirstChild() • Node getLastChild() • Node getNextSibling () • String getNodeValue() • Node getPreviousSibling () • removeChild(Node) NodeList • int getLength() • Node item(i)
  • 80. Aplicaciones Prácticas - Java - Objetos El método getChildNodes () devuelve una sucesión de elementos Text y Element intercalados: getChildNodes().item(i) <clientes> i Devuelve Texto1 0 Text <cliente>Antonio</cliente> Texto2 1 Element <cliente>Jose</cliente> 2 Text Texto3 3 Element </clientes> 4 Text
  • 81. Aplicaciones Prácticas - Java - Ejercicios Preparación de la máquina • Instalación de JDK (Java Development Kit) 1.1.8 o superior  http://java.sun.com/products • Instalación de JAXP (Java API for XML Processing)  http://java.sun.com/xml • Instalación del servidor Web Por ejemplo: iPlanet Web Server FastTrack Edition  http://www.iplanet.com/downloads/download/index.html
  • 82. Aplicaciones Prácticas - Java - Ejercicio 1 Ejercicio 1: Acceso a XML Ejercicio 1.1 • Compilar la clase ejemplo.java  javac ejemplo.java (genera el fichero ejemplo.class) • Ejecutar la clase ejemplo.class  jview ejemplo clientes.xml Ejercicio 1.2 • Modificar la clase java acceder.java para que lea un documento XML pasado como parámetro.  jview acceder clientes.xml Ejercicio 1.3 • Modificar la clase acceder.java para que muestre por pantalla el nombre del segundo cliente Ejercicio 1.4 • Modificar la clase acceder.java creando un bucle que muestre todos los atributos idCliente de todos los clientes.
  • 83. Aplicaciones Prácticas - Java Transformación de un documento XML con XSLT import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamSource; import javax.xml.transform.stream.StreamResult;
  • 84. Aplicaciones Prácticas - Java Transformación de un documento XML con XSLT (2) DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); File stylesheet = new File(“archivo.xsl”); File datafile = new File(“archivo.xml”); DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse(datafile); TransformerFactory tFactory = TransformerFactory.newInstance(); StreamSource stylesource = new StreamSource(stylesheet); Transformer transformer = tFactory.newTransformer(stylesource); DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(System.out); transformer.transform(source, result);
  • 85. Aplicaciones Prácticas - Java - Ejercicio 2 Ejercicio 2: Aplicar una plantilla XSL Ejercicio 2.1 • Crear la clase java conversor.java al que se le pase como parámetro un documento XSL y un documento XML y que escriba en un fichero htm de salida el resultado de aplicarle la plantilla XSL al documento XML. • Probarla con el documento clientes.xml y la plantilla clientes.xsl  java conversor clientes.xsl clientes.xml Ejercicio 2.2 • Modificar la plantilla clientes.xsl para que muestre debajo del idCliente su dni, y si no tiene, que muestre un mensaje indicándolo.
  • 86. Aplicaciones Prácticas - Java Almacenar un documento XML en un archivo • Usando el Transformer sin aplicarle ningún estilo: Transformer transformer = tFactory.newTransformer(); StreamResult result = new StreamResult(new FileWriter("salida.xml"));
  • 87. Aplicaciones Prácticas - Java - Ejercicio 3 Ejercicio 3: Modificación de un archivo XML Ejercicio 3.1 • Crear la clase modificar.java a partir de la clase conversor.java para que ésta lea el contenido de un documento Xml pasado como parámetro, inserte un dni en el segundo cliente y guarde las modificaciones. Ejercicio 3.2 • Modificar la clase modificar.java para que cree un nuevo cliente con los siguientes datos:  Nombre: Javier  idCliente: 81678  dni: 55666777
  • 88. Aplicaciones Prácticas - Java Otros parsers • JDOM (www.jdom.org) • XT (http://www.jclark.com/xml/xt.html). Implementación de un procesador XSLT usando el parser XP. • Xerces-J (http://xml.apache.org/xerces-j/index.html). Parser creado por el proyecto Apache XML.
  • 89. Aplicaciones Prácticas - Java - JSP Acceso a un documento XML desde JSP • Se importan las mismas clases que en Java <%@ page import="javax.xml.parsers.DocumentBuilder" %> ... • Se accede al documento. El fichero leído partirá del directorio raíz del servidor web: <% Document document; File xmlFile = new File("public_html archivo.xml"); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse(xmlFile); %> <%=document.getDocumentElement().....%>
  • 90. Aplicaciones Prácticas - Java - JSP Aplicación de XSL desde JSP • Se importan las mismas clases que en Java • Se aplica la plantilla y se manda a la variable out: <% Document document; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); File stylesheet = new File("public_htmlarchivo.xsl"); File datafile = new File("public_htmlarchivo.xml"); DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse(datafile); TransformerFactory tFactory = TransformerFactory.newInstance(); StreamSource stylesource = new StreamSource(stylesheet); Transformer transformer = tFactory.newTransformer(stylesource); DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(out); transformer.transform(source, result); %>
  • 91. Aplicaciones Prácticas - Java - Ejercicio 4 Ejercicio 4: Uso de XML con JSP Ejercicio 4.1 • Modificar el archivo pagina.jsp para que muestre los datos del archivo cliente.xml de la siguiente forma: Nombre: Antonio Código: 81422 Dni: 33555888 ó No tiene Teléfonos: 952334455 666909090 ó No tiene Ejercicio 4.2 • Modificar la página pagina2.jsp para que muestre por pantalla el resultado de aplicar la plantilla clientes.xsl a clientes.xml. • Modificar el archivo clientes.xsl para que pagina2.jsp muestre el mismo resultado de pagina.jsp
  • 92. Aplicaciones Prácticas - Microsoft • Para usar XML en aplicaciones Microsoft, se usa el objeto COM Microsoft XML (MSXML). • Internet Explorer 5 viene con una versión antigua (msxml.dll)  Objeto Microsoft.XMLDOM • Se debe instalar una versión más moderna  Objeto MSXML2.DOMDocument
  • 93. Aplicaciones Prácticas - Microsoft Acceder a un documento XML • Si estamos en Visual Basic, añadir el objeto Microsoft XML a las referencias del proyecto. • Instanciar el objeto.  En Visual Basic. Dim objParser As MSXML.DOMDocument Set objParser = New MSXML.DOMDocument  En ASP Set objParser = Server.CreateObject("Microsoft.XMLDOM")
  • 94. Aplicaciones Prácticas - Microsoft • Cargar el documento XML  desde un archivo: If objParser.Load("c:tempxmldocumento.xml") Then ' Ha funcionado Else ' Ha ocurrido un error End If  Desde una cadena de texto: objParser.loadXML(“<clientes> .... </clientes>”); • Usar el documento (obtener el elemento raíz): objParser.documentElement • Destruir el objeto tras usarlo. Set objParser = nothing
  • 95. Aplicaciones Prácticas - Microsoft - Ejercicio 1 Ejercicio 1: Acceso a XML desde ASP Ejercicio 1.1 • Modificar el archivo pagina.asp para que guarde en la variable domXml el documento almacenado en productos.xml. • Modificar la página para que muestre el idPedido del primer pedido del documento XML. Ejercicio 1.2 • Modificar la página para que aparezca la cantidad del segundo producto del tercer pedido. Ejercicio 1.3 • Modificar la página para que muestre los nombres de todos los productos adquiridos. Ejercicio 1.4 • Modificar la página para que aparezca el número de cliente del pedido con idPedido=1002, y la suma de todo su pedido.
  • 96. Aplicaciones Prácticas - Microsoft Aplicar una plantilla XSLT a un documento XML <% Dim domXml As MSXML.DOMDocument Dim domXsl As MSXML.DOMDocument Dim resutl As String Set domXml = New MSXML.DOMDocument Set domXsl = New MSXML.DOMDocument domXml.Load("c:documento.xml") domXsl.Load("c:plantilla.xsl") result = domXml.transformNode(domXsl) %> Mostrar el resultado en ASP <%=result %>
  • 97. Aplicaciones Prácticas - Microsoft - Ejercicio 2 Ejercicio 2: Aplicación de una plantilla XSL a un documento XML desde ASP Ejercicio 2.1 • Modificar el archivo pagina.asp para que muestre el resultado de aplicar la plantilla productos.xsl al documento productos.xml. Ejercicio 2.2 • Modificar el archivo productos.xsl para que muestre el siguiente resultado: Pedido nº: 1000 Cliente: 123 Productos: Línea Id Nombre Precio Total (euros) 1 315 Patatas fritas 0.9 2... ... .... .... ....
  • 98. Recursos • W3C (Wolrd Wide Web Consorcium) http://www.w3.org • Sun http://java.sun.com/xml • Microsoft http://msdn.microsoft.com/xml • Apache XML Project http://xml.apache.org • Otros http://www.xml.com http://www.xml.org http://www.xmlsoftware.com http://www.xmlhack.com

Notas del editor

  1. Los lenguajes de marcas tienen sus orígenes en el GML (Generalized Markup Language), creado por IBM en los 60 para resolver sus problemas con el tratamiento de documentos. Cada aplicación usaba unas marcas distintas para describir las entidades de los documentos, así que IBM usó código ASCII para la creación de estas marcas, ya que podrían ser accesibles desde cualquier aplicación. Más tarde, GML cayó en manos de ANSI (American National Standards Institute), pasando a denominarse SGML (Standard Generalized Markup Language) y convistiéndose en un borrador. ISO (International Standards Organization) lo convirtió en un estándar en 1986. Después se crearon lenguajes de marcas subconjuntos de SGML, como XML, HTML (HyperText Markup Language) o RTF (Rich Text Format). En 1989, el protocolo HTML fue creado por el CERN (Organización Europea en Investigación de Física Nuclear). Tenía el problema de que era demasiado simple, y no permitía crear tags personalizados. Así, en 1998, el w3c acepta el estándar XML. La mayor diferencia de XML con SGML es que XML no precisa de DTDs, mientras que SGML sí. Existen 2 tipos de lenguajes de marcas, los que se dedican al tratamiento de la información y los que se encargan de mostrar esa información con un formato específico. XML sería del primer tipo, ya que solo contiene datos, no la forma de mostrarlos (si es en negrita, tamaño de letra,...). Sin embargo HTML si se encarga de esto último. Así, estos 2 lenguajes suelen trabajar conjuntamente, XML proporciona los datos y HTML les da un formato y los muestra.
  2. XML es un lenguaje que no tiene unas marcas prefijadas. Las marcas pueden ser creadas por el usuario o la aplicación, lo que proporciona una gran flexibilidad para representar datos. Debido a este hecho, se ha convertido en uno de los estándares más usados en Internet a la hora de intercambiar información entre varias máquinas, porque es independiente de la plataforma en la que se traten los datos (tan solo es texto ASCII). XML no es sólo un lenguaje para estructurar datos. También es un metalenguaje que sirve para definir otros lenguajes. Así, HTML es un subconjunto de XML con unos tags específicos. XML usa las etiquetas para estructurar los datos. Esta estructura es en forma de árbol, que permite mantener la información de forma jerárquica siendo así más fácil e intuitivo acceder a ella.
  3. Este es un ejemplo de un documento XML que contiene información acerca de discos de música. Dejando aparte las 2 primeras líneas que conforman la cabecera, en este ejemplo se puede observar claramente la estructura en forma de árbol que debe mantener un documento XML. Se distingue un elemento raíz (&lt;discos&gt;), y de él cuelgan varios elementos &lt;disco&gt;. A su vez, dentro de cada disco se guarda diferente información sobre él (artista, título, pistas y precio).
  4. Un elemento XML puede contener tanto un valor, como en este ejemplo, como otros elementos XML. También es posible las dos cosas a la vez.
  5. El ejemplo anterior de los discos es un documento XML. Reglas: Los elementos deben cerrarse, es decir, toda etiqueta debe tener su correspondiente etiqueta que cierra el elemento. O ser una etiqueta cerrada al final, como en &lt;precio valor=“”/&gt; Los elementos deben estar limpiamente anidados, es decir, las etiquetas de apertura y cierre no pueden cruzarse como en este caso: &lt;disco&gt; &lt;artista&gt; &lt;/disco&gt; &lt;/artista&gt; El documento debe tener una única raíz, no es posible tener la siguiente estructura en el primer nivel: &lt;discos&gt; ... &lt;/discos&gt; &lt;cds&gt; ... &lt;/cds&gt; Para permitir esto, habría que insertar estas etiquetas dentro de otra superior.
  6. De este modo, no puede usarse cualquier otro carácter como eñes o comillas. Las siguientes etiquetas serían erróneas: &lt;1er-apellido&gt;Fernández&lt;/1er-apellido&gt; (no puede empezar por un número) &lt;segundo apellido&gt;López&lt;/segundo apellido&gt; (no puede contener espacios) Además, hay que recordar que XML es case-sensitive , por lo que la etiqueta de cierre debe ser igual que la de inicio: &lt;nombre&gt;Alfonso&lt;/Nombre&gt; no sería correcto.
  7. Un parser XML es una aplicación que se encarga de obtener un documento XML para acceder a su contenido. Si al cargar el documento XML, el parser falla, entonces es que el documento XML no está bien formado porque incumple alguna de las reglas.
  8. Fallos: El primer empleado no puede tener 2 atributos “apellido”. Los elementos “direccion” de los 2 primeros empleados no tienen cierre. El tercer empleado tiene los elementos de inicio y de fin distintos La primera oficina tiene atributos “1tlf” y “2tlf” (no son válidos). Los empleados y las oficinas tienen que estar dentro de un elemento común
  9. Los namespaces fueron creados para evitar colisiones en los nombres que las etiquetas o atributos de los documentos XML que circulan por Internet. Por ejemplo, se puede crean un documento XML con información a cerca de empleados y con la etiqueta “nombre” que guarde el nombre del empleado. Pero si se quiere crear otro documento XML, por ejemplo de clientes, con la etiqueta “nombre”, debe poder diferenciarse de alguna forma estos 2 tags que se llaman igual pero contienen información distinta. En realidad, las URL y URN son subconjuntos de URI, son clases de URI. Una URL es una forma de identificar un recurso en Internet, dando una dirección. Por ejemplo, el namespace usado para utilizar etiquetas xsl: http://www.w3.org/1999/XSL/Transform Un recurso puede ser tanto una página web como un archivo o, en este caso, un namespace . Una URN también identifica un recurso, pero no por su localización, si no asignándole un nombre. Este nombre puede estar asociado con varias localizaciones, y si una no está disponible, se intenta acceder a otra. Por ejemplo: urn:BookLovers.org:BookInfo
  10. Declaración por defecto. En el ejemplo, los nombres BOOK, TITLE y currency pertenecen al namespace especificado. Declaración explícita. Se usa cuando dentro de un mismo elemento (en este caso BOOK) aparecen nombres XML (etiquetas o atributos) pertenecientes a varios namespaces. En el ejemplo, BOOK, TITLE y PRICE pertenecen al namespace definido con el nombre bk , y currency pertenece al namespace definido por money .
  11. Todo documento XML está formado por 2 secciones: el prólogo (que contiene información propia del xml) y el document element o elemento raíz (que contiene los datos en sí). Ninguno de los elementos del prólogo son obligatorios, aunque sí son recomendables. Aunque si se quiere que el documento XML sea válido, se deberá usar un DTD y declararlo en el prólogo.
  12. Declaración No es obligatoria, aunque es recomendable ponerla. Si se pone, debe aparecer en la primera línea. No puede ser precedida por espacios en blanco o comentarios. El ejemplo especifica que el documento XML cumple con el estándar XML 1.0, y que usa una codificación ISO-8859-1, también conocida como Latin-1, es decir, que contiene caracteres propios de países de Europa occidental, como España, Francia o Alemania. El atributo standalone es opcional. Un valor “no” indica que el documento debe acceder a un DTD externo para , por ejemplo, añadir valores por defecto. Un valor “yes” indica que no necesita del DTD. El valor por defecto es “no”. Comentarios El siguiente tag sería válido: &lt;nombre&gt;Antonio &lt;!--Apellido--&gt;López&lt;/nombre&gt; Pero este otro no: &lt;nombre &lt;!-- nombre del cliente --&gt;&gt;Antonio López&lt;/nombre&gt; Un parser XML no está obligado a procesar los comentarios, por lo que al acceder a los datos del documento tras haber sido leído por el parser, es posible que los comentarios no aparezcan (esto depende del parser usado).
  13. Instrucciones de procesamiento Al igual que los comentarios, pueden ser colocadas en cualquier parte del texto, excepto dentro de un tag. Pero algunas instrucciones de procesamiento tienen algunas restricciones con su posición. Por ejemplo, la del ejemplo, debe insertarse antes del elemento raíz del documento XML. Document Type Declaration Un documento válido debe tener una referencia a un DTD para que lo valide. El DTD contiene una serie de reglas que el documento XML debe cumplir. En la declaración se debe indicar el nodo raíz y el nombre del fichero dtd. En el ejemplo se indica que discos es el nodo raíz y discos.dtd es el archivo que contieneel DTD. También es posible insertar el DTD en la propia declaración en lugar de referenciar un archivo externo, pero es más útil mantener el DTD aparte, ya que puede ser usado por varios documentos XML.
  14. El DTD es el encargado de validar la estructura de un documento XML. El parser XML es el encargado de comprobar que el documento XML cumple las reglas del DTD, y si no se cumple alguna especificar cual. El DTD puede definir elementos (las etiquetas usadas en el documento XML), atributos (los atributos contenidos en esas etiquetas) y entidades (nombres asociados a un valor, por ejemplo, &amp;empresa; puede contener el nombre de la empresa). Hay algunas definiciones o restricciones que no pueden describirse con un DTD. Por ejemplo, no puede definirse el document root, no puede especificarse el número de instancias que tiene cada elemento en el documento XML, o no puede detallar el formato de fecha o número que debe usar cada valor. Debido a estas carencias, se creó el XML Schema, otro lenguaje de validación de documentos XML, aunque éste no se hizo recomendación por parte del W3C hasta Mayo del 2001.
  15. En el primer caso, discos se refiere al document element , y discos.dtd se refiere al archivo donde se ubica el DTD. Así, el formato de la declaración sería el siguiente: &lt;!DOCTYPE document-element SYSTEM &quot;DTD-URI&quot;&gt; Para el segundo caso, tendría la siguiente sintaxis: &lt;!DOCTYPE document-element [declarations...]&gt; También es posible combinar las dos formas obteniendo un DTD interno y añadiéndole nuevas reglas en la misma sentencia de definición. La sintaxis sería la siguiente: &lt;!DOCTYPE document-element SYSTEM &quot;DTD-URI&quot; [declarations...]&gt;
  16. La primera sentencia declara la etiqueta “empleado”, especificando que debe contener una etiqueta “nombre” y otra etiqueta “direccion”, en ese orden. Si faltara alguna de esas etiquetas, ya no se cumpliría las restricciones del DTD. La segunda sentencia declara un nodo hoja, es decir, una etiqueta que debe tener un valor concreto, y no otras etiquetas. Así que se debe especificar el tipo de dato, en este caso, PCDATA.
  17. En la primera sentencia, debe cumplirse el orden de aparición de los elementos hijo. En la segunda sentencia, se cumplirá la restricción si aparece uno de los hijos o los dos. La tercera sentencia especifica que debe aparecer primero el nombre o el apellido o los dos, y después la dirección.
  18. Los modificadores se pueden poner detrás de un elemento o de una lista de elementos que estén dentro de unos paréntesis. El primer ejemplo especifica que el elemento empleado debe tener primero un tag nombre , luego opcionalmente un tag apellido , y después uno o más tags direccion . El segundo ejemplo especifica que el elemento empleado debe contener primero un elemento nombre , después otro elemento apellido , y después una sucesión de elementos que pueden ser direccion o telefono . Esta última sucesión puede estar vacía o puede contener todos los elementos necesarios, y no importa el orden de alternancia en el que aparezcan las direcciones y los teléfonos.
  19. Elementos Vacíos Un elemento vacío es aquel que no tiene valor. Normalmente los elementos vacíos suelen tener uno o más atributos. Para el ejemplo anterior, cualquiera de los siguientes elementos sería correcto: &lt;direccion/&gt; &lt;direccion&gt;&lt;/direccion&gt; Lo más lógico sería añadirle algunos atributos: &lt;direccion calle=“Larios” numero=“1” piso=“1” letra=“A”/&gt; Contenido ANY Permite cualquier contenido dentro del elemento. No es recomendable usarlo, a no ser que sea necesario, aunque es útil cuando se está desarrollando un DTD y hay partes que no están construidas. Para el ejemplo, el siguiente elemento sería válido &lt;otrosDatos&gt; ..... &lt;/otrosDatos&gt;
  20. Se debe crear un archivo xml con el contenido del slide y un archivo dtd que lo valide, y probarlo con el xmlwriter.
  21. La sintaxis para la declaración de atributos sería la siguiente: &lt;!ATTLIST elem-name [attr-name attr-type default-value-clause]+&gt; En el primer ejemplo se está definiendo 3 atributos para el elemento direccion . El primero sería fijo ( ciudad ), el segundo ( calle ) sería obligatorio, y el tercero ( numero ) sería opcional. El cuadro de la derecha muestra un elemento válido para esa declaración. También es posible declarar los atributos en líneas separadas: &lt;!ATTLIST direccion ciudad CDATA # FIXED&gt; &lt;!ATTLIST direccion calle CDATA #REQUIRED &gt; &lt;!ATTLIST direccion numero CDATA #IMPLIED&gt; Los atributos pueden aparecer en el elemento en cualquier orden. Es decir, el siguiente elemento también sería válido: &lt; direccion numero=“5” calle=“Larios” ciudad=“Málaga” / &gt; La cláusula de valor por defecto ( default-value-clause ) puede tener los siguientes valores: REQUIRED. El atributo es obligatorio y no se especifica valor por defecto. IMPLIED. El atributo es opcional y no se especifica valor por defecto. FIXED. El atributo tiene un valor fijo e inmutable. Es un atributo obligatorio que no puede ser modificado. Si se declara con un valor por defecto, el atributo debe aparecer en cada elemento con ese valor. Por ejemplo, &lt;!empresa nombre CDATA #FIXED “Accenture”/&gt; no permitiría el siguiente elemento &lt;empresa nombre=“AC”/&gt; el atributo debe aparecer, y con el mismo nombre: &lt;empresa nombre=“Accenture”/&gt; Valor por defecto. El atributo es opcional. Si aparece, contendrá el valor especificado, y si no, cogerá el valor por defecto. En el ejemplo, si el atributo pais no aparece en la dirección, se tomará el valor “España”.
  22. Enumeración. Los posibles valores que aparecen en la enumeración son tokens. Un token permite los mismos caracteres que un nombre XML (letras, dígitos, guión bajo y punto), pero además permite que el token empiece por cualquiera de esos caracteres. En el ejemplo se está definiendo que el valor del elemento empleado debe ser “hombre” o “mujer”. Así mismo, está declarando que es un atributo obligatorio. De esta forma, el siguiente elemento sería incorrecto: &lt;empleado sexo=“H”/&gt; Tipos de atributo. En el cuadro de la izquierda se muestra una definición de atributo en un DTD, y en el de la derecha aparece un ejemplo válido de elementos XML para la definición anterior. CDATA es el tipo de dato más usado. Permite caracteres alfanuméricos. ID. Cada elemento debe tener un valor único en este atributo. Así, el ejemplo declara que no pueden haber dos empleados con el mismo empid . Los valores de estos atributos deben ser nombres XML válidos. Por esto, un valor no puede empezar por número, así que al id del empleado se le debe añadir un carácter válido al principio (en lugar de “120” se puede usar “A120”). Cada elemento puede tener como máximo un atributo de tipo ID. IDREF. En el ejemplo, el elemento empleado tiene como atributo opcional un supervisor , que debe contener el valor del empid de alguno de los elementos empleado . Además, está el tipo IDREFS, que permite almacenar varios valores separados por espacio.
  23. Las entidades predefinidas están para evitar usar símbolos que no están permitidos en los valores de los elementos y atributos. En el ejemplo, la entidad &amp;empresa; se sustituiría por su valor, obteniendo el resultado: &lt; empleado empresa= “ Coritel AOS &quot;&gt; El parser XML es el encargado de realizar esta sustitución. El valor de una entidad puede tener tanto un texto como una URI. Además, puede contener referencias a otras entidades, siempre y cuando no se produzcan ciclos en esas referencias.
  24. Crear un archivo xml con el documento del slide y otro dtd que lo valide. Se puede validar un documento XML con herramientas como XMLwriter. http://www.xmlwriter.com El atributo nohay se refiere al producto a enviar si no hubieran existencias del producto.
  25. XML Schema es un estándar para la validación de la estructura de un documento XML. Debido a algunas carencias en la definición de datos por parte de los DTDs, se creó el estándar XML Schema, que permite definir con más detalle la estructura de un documento XML, como los tipos de datos. Este tipo de mejoras eran necesarias. Por ejemplo, en la validación de una orden de compra, es necesario comprobar que no existen cantidades negativas o inserción de letras donde deben haber números. Este tipo de validaciones las puede realizar el XML Schema. Tras 2 años decidiendo que debía entrar en el estándar, en Mayo del 2001 el W3C lo convirtió en estándar. Se valida mediante un parser, usando un método estándar que recibe como entrada el documento XML y el XML Schema y devuelve si el documento es válido o no. Mejora con respecto a los DTDs Permite especificar el tipo de los datos (entero, decimal...) y restringir el rango de valores introducidos. Por ejemplo, especificar que el valor de un campo debe ser entre 1 y 999. También puede especificar que una cadena debe empezar por determinada letra o tener determinado número de caracteres. Los DTDs usan una sintaxis completamente diferente a la usada en los documentos XML. Los XML Schemas, al estar escrito respetando las normas XML, es más fácil de depurar por el programador y de manejar por el parser. Los XML Schemas pueden ser ampliados con módulos externos, de forma que un schema puede usar las declaraciones de tipos ya escritas en otro schema. Permite especificar el número de veces que aparece un elemento dentro de otro, y el orden en que éstos aparecen. En el DTD, para decir que un elemento debe aparecer 20 veces habría que poner 20 veces el nombre del elemento: &lt;!ELEMENT padre (hijo,hijo,hijo,...)&gt; En un DTD, todos los elementos se declaran en el primer nivel. De esta forma, el nodo raiz podría ser cualquiera de esos elementos. Sin embargo, en un XML Schema se declaran de forma anidada, de forma que un elemento es forzosamente hijo de otro. Aunque también se permite la declaración de varios elementos en el primer nivel.
  26. El atributo content permite: textOnly: sólo contiene texto eltOnly: sólo contiene elementos empty: el elemento está vacío ( por ejemplo: &lt;direccion ... /&gt; ) mixed: puede contener tanto elementos como texto El atributo order puede ser: seq: debe contener todos los elementos indicados y en el orden indicado one: sólo puede contener uno de los elementos indicados many: puede contener los elementos indicados 0 ó más veces y en cualquier orden.
  27. Antes de realizar los ejercicios es recomendable instalar la versión 3 o superior de MSXML.
  28. En este ejemplo, el atributo calidad sólo podría contener uno de los valores indicados: alta, media o baja.
  29. SAX es una API que permite que un mismo código que accede a un parser sirva para acceder a otro parser. Aunque esos dos parsers deben cumplir el estándar SAX. SAX en realidad es un estándar de facto , es decir, es una norma seguida por muchos parsers pero no está definido como estándar por ninguna organización (como el W3C).
  30. El DOM son un conjunto de métodos y propiedades que sirven para acceder a los datos de un documento XML. Esto se hace gracias a un parser que se encarga de leer el documento XML, ya sea desde un fichero o desde cualquier otra procedencia, y devuelve el objeto correspondiente para el acceso al DOM. Pero el estándar XML no define la forma de escribir o leer el documento en un archivo. El W3C definió en 1998 el estándar DOM Level 1, es decir, una serie de especificaciones que los objetos de cualquier librería deben seguir. Pero esto a veces no se cumple exactamente, por lo que la API de una librería y otra puede variar. En esta sección se usa la API definida por el parser de Microsoft (MSXML), válida para Internet Explorer.
  31. Pueden usarse los dos métodos de obtener un documento XML, pero el más común es el segundo, ya que permite que el archivo que contiene el XML sea usado por otras páginas HTML.
  32. Las propiedades y funciones más comunes para acceder a los datos de un documento XML son las siguientes: XMLDocument. documentElement. childNodes. Es una propiedad de solo lectura. Si el elemento no tiene hijos, devuelve una lista vacía. El elemento devuelto es del tipo NodeList. item(n) es un método del objeto NodeList. text devuelve el valor de un elemento, pero si éste tiene hijos, devuelve el valor de todos sus hijos separados por espacio. El ejemplo, que usa el documento XML de la página anterior, obtiene el elemento raiz ( clientes ), después el primer hijo (el primer nodo cliente ), de éste, su primer hijo ( nombre ) y de éste su valor (“Antonio”).
  33. En el ejemplo, el fragmento XMLCliente.XMLDocument.documentElement. getElementsByTagName(“nombre”) devolvería una lista con dos elementos, los dos tags nombre que existen a partir del elemento raíz.
  34. getAttribute(nombre) devuelve null en caso de que no exista el atributo.
  35. Ejercicio 1.1 Para probar la página se abrirá en el Explorer y se pulsará el botón “Acceder al XML” para que se muestren los mensajes.
  36. createTextNode crea un objeto Text , pero no es insertado automáticamente en el árbol XML, debe ser insertado por alguno de los métodos appendChild , replaceChild o insertBefore . Al crearse, su parentNode se establece e a null. El ejemplo muestra como insertar una etiqueta llamada apellido con el valor “Fernández” en el primer cliente, al mismo nivel que la etiqueta nombre . Primero se debe crear un objeto Element con la función createElement pasándole el nombre del tag, luego un objeto Text con la función createTextNode pasándole el valor que vamos a darle a la etiqueta. Después se añade el texto a la etiqueta con appendChild . Finalmente, se accede al primer elemento cliente con XMLCliente.XMLDocument.documentElement.firstChild y se le aplica la función appendChild para añadirle el elemento creado.
  37. removeChild . Se le pasa como parámetro un objeto, por lo que antes hay que acceder a él para pasárselo como parámetro. El elemento no tiene por qué ser un elemento hoja, al eliminarse un elemento con hijos, éstos también son eliminados. En el ejemplo, la expresión XMLCliente.XMLDocument.documentElement.childNodes.item(1) devuelve el segundo elemento cliente , y es pasado como parámetro a la función.
  38. setAttribute . removeAttribute . Elimina el atributo especificado. Si en el DTD se define algún valor por defecto para ese atributo, el atributo, en lugar de ser eliminado, toma inmediatamente ese valor.
  39. Ejercicio 2.1 Para probar la página se abrirá en el Internet Explorer y se pulsará el botón “Cambiar el XML”. Hay que tener en cuenta que los cambios no se guardan en el fichero, sólo en memoria. Por esto, si se quiere volver a probar la página hay que recargarla para que vuelva a obtener el xml del fichero, no se puede pulsar 2 veces el botón si recargarla.
  40. XSL es un estándar que sirve de hoja de estilos para proporcionar un formato a los documentos XML. Aunque ya existen otros formatos de hojas de estilos, como CSS, la principal diferencia de XSL radica en que permite modificar la propia estructura del XML. Así, CSS sólo da un aspecto al texto que ya hay, mientras que XSL además puede filtrar los datos, cambiar el orden de éstos o insertar sus propios datos en el resultado final. XSL fue definido por el W3C en 1997 como un borrador, es decir, fue publicada pero podía ser modificada. En 1999, se convirtió en una recomendación del W3C y se encuentra en la versión 1.0. XSL está formado por 3 partes: los lenguajes XSLT y XPath, y por Formatting Objects , un conjunto de elementos para el uso de características avanzadas de diseño de documentos. De esta forma quedan separados los datos y la presentación. El documento XML almacena los datos y la plantilla XSL se encarga del formato. El procesador XSLT es el encargado de realizar la transformación del documento XML aplicándole una plantilla XSL. El resultado también es un documento XML. Al ser HTML un subconjunto de XML, la salida puede ser definida en HTML. También se puede obtener el resultado en otros lenguajes de marcas, como WML (Wireless Markup Language). Existen tanto procesadores XSLT de libre distribución (Xalan, Saxon, XT) como otros que están incluidos en Sistemas Operativos o navegadores (MSXML viene con Internet Explorer) o en bases de datos relacionales (Oracle XML). El procesador XSLT puede actuar de dos formas: En el servidor: el cliente hace una petición al servidor, éste obtiene el documento XML y la hoja de estilos XSL, el propio servidor ejecuta el procesador XSLT y envía el resultado al cliente. En el cliente: el cliente hace una petición del XML, y éste se lo manda. Si el XML necesita una hoja de estilos XSL, se la pide al servidor y éste se la envía. El propio cliente ejecuta el procesador XSLT y muestra el resultado. Este es el modelo de trabajo de MSXML. Tiene la ventaja de que libera de trabajo al servidor.
  41. El namespace definido para xsl puede tener otro prefijo que no sea xsl , pero éste es el que se usa normalmente. También se puede hacer uso del siguiente namespace, que es el de la primera versión de xsl: http://www.w3.org/TR/WD-xsl pero carece de algunas características avanzadas, como funciones o cálculos aritméticos. Si el namespace http://www.w3.org/1999/XSL/Transform no funciona, significa que se debe instalar una versión más avanzada del parser. Pueden declararse plantillas para otros elementos que no sean el raíz, por ejemplo: &lt;xsl:template match=“/clientes/cliente”&gt; &lt;/xsl:template&gt; esta plantilla está definida para el elemento cliente hijo de clientes . Para ejecutarla, se debe llamar al elemento apply-templates : &lt;xsl:apply-templates select=“/clientes/cliente”/&gt; Pero si no se llama, sólo se ejecutará la plantilla del elemento raíz.
  42. Un documento XSL es también un documento XML, por lo que también podemos insertarle una cabecera. En el ejemplo especifica la versión de xml (1.0) y la codificación de los caracteres usados (ISO-8859-1, es decir, caracteres de países occidentales).
  43. Estos serían los pasos para aplicar una plantilla XSLT a un documento XML usando el Internet Explorer 5.
  44. XPath es un lenguaje no-XML (no usa tags) integrado como parte del estándar XSL. Define un lenguaje capaz de seleccionar una parte de un documento XML, como una lista de elementos o de valores. Las expresiones usadas en el atributo match de los elementos xsl:template usan el lenguaje Xpath, así como las usadas en elementos xsl:if , xsl:for-each , ... Las referencias absolutas comienzan con una barra desde el elemento raíz. Si se tiene una lista, los corchetes se pueden usar para obtener un elemento indicando su índice (siendo el primer elemento el número 0). Las referencias absolutas parten del nodo contextual. Si el tag template se aplica al nodo raíz ( / ), ése será el nodo contextual. Aunque puede cambiar al entrar, por ejemplo, en un bucle for-each . El nodo contextual pasaría a ser el nodo actual del bucle.
  45. El punto (.) y dos puntos (..) parten del nodo contextual. Por lo tanto, si estamos dentro de un bucle xsl:for-each , el punto se referirá al nodo actual. Los comodines se usan para poder referirse a cualquier elemento hijo (sólo los hijos directos) con *, o a cualquier atributo con *@. Así, la expresión /clientes/*/nombre cogería cualquier elemento nombre que descienda de un elemento descendiente de clientes .
  46. Predicados La expresión que aparece entre los corchetes suele ser una expresión booleana. Pueden usarse los operadores comunes (= , != , &lt; , &gt; , &lt;= , &gt;=), aunque normalmente es necesario sustituir el símbolo &lt; por su entidad equivalente &amp;lt; (lower than). También pueden usarse los operadores booleanos and , or y not .
  47. Soluciones /paises/pais/nombre /paises/pais[2]/ciudades/ciudad/nombre /paises/pais/ciudades/ciudad[poblacion &gt; 1000000]/nombre /paises/pais/ciudades/ciudad[(poblacion &gt; 50000) and (poblacion &amp;lt; 100000)]/@idCiudad /paises/pais[ciudades/ciudad/@idCiudad = ‘320’]/@idPais
  48. XHTML es la revisión de HTML para hacerlo compatible con XML. Así, un documento XHTML podrá ser tratado por cualquier herramienta que trate con documentos XML (editores, parsers, ...). De hecho, XHTML es un subconjunto de XML, es un lenguaje definido usando XML. HTML se encuentra actualmente en la versión 4, y esta será la última versión de este lenguaje. Debido a la demanda de un lenguaje más extensible y estándar, se creó XHTML 1.0. Todos los elementos usados en HTML 4 siguen siendo válidos en XHTML 1.0. Para la validación de los documentos XHTML pueden usarse 3 DTDs, dependiendo del tipo de documento a usar. Además de ajustarse a las reglas de XML, un documento XHTML debe seguir otra serie de reglas de construcción. Si una plantilla XSL devuelve una página HTML, ésta debe cumplir las reglas de construcción de XML, pero no hace falta que cumpla todas las reglas de XHTML. Por ejemplo, no es obligatorio que exista el tag head .
  49. Los scripts se meten en una sección CDATA para que no haya problemas con los caracteres &lt; y &amp;. CDATA trata los caracteres sin procesarlos. Así, pusiésemos fuera de la sección CDATA una comparación Javascript: if (x&lt;y) ... el símbolo &lt; sería tratado como el inicio de un tag y fallaría.
  50. Solución &lt;html&gt; &lt;head&gt; &lt;script language=&quot;JavaScript&quot; src=&quot;myscript.js&quot;&gt;&lt;/script &gt; &lt;/head&gt; &lt;body&gt; Pagina inicio &lt;br/&gt; &lt;b&gt;Formulario 1&lt;/b&gt; &lt;form name=“form1”&gt; &lt;img src=“imagen.gif” border=“0” /&gt; &lt;input type=“checkbox” checked=“checked” /&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt;
  51. Los elementos XSL deben usarse de manera que el resultado tenga estructura de árbol, al igual que XML. Todos los elementos deben tener un elemento de cierre. Las normas son las mismas que para los documentos XML. Dentro de un elemento pueden insertarse otros elementos. Así, dentro de un bucle for-each pueden insertarse, por ejemplo, elementos if o incluso otro elemento for-each , como ocurre en la mayoría de lenguajes de programación. xsl:value-of Inserta en el árbol resultante el resultado de evaluar la expresión contenida en el atributo select . El resultado dependerá del tipo de dato insertado en el atributo select . Si es un elemento (incluso el elemento raíz), devuelve su contenido o el contenido de todos sus hijos, quitando los tags y dejando sólo los valores de los elementos. Si es un atributo devuelve el valor del atributo. En el valor devuelto resuelve los valores de las entidades y las sustituye en el texto. Si se le pasa un conjunto de nodos, devuelve el valor del primer nodo. El ejemplo devuelve el valor del atributo idCliente del nodo contextual. Las operaciones aritméticas válidas son +,-,*,div,mod xsl:element El ejemplo crearía un elemento así en el árbol resultante: &lt;a&gt; Ir a siguiente página&lt;/a&gt; Este elemento además puede tener atributos, que deberán ser definidos con elementos xsl:attribute .
  52. xsl:attribute Añade un atributo al elemento que lo contiene en el árbol resultante. En todo caso debe preceder a cualquier otro contenido del elemento que lo contiene. En el ejemplo, dentro del elemento &lt;a&gt; se debe insertar tanto su atributo como su valor. Los atributos deben ir primero. Daría como resultado lo siguiente: &lt;a href=“http://www.com”&gt;Ir a inicio&lt;/a&gt; También pueden definirse una lista de atributos con el elemento &lt;xsl:attribute-set&gt; y usarlos en varios elementos. xsl:if Inserta el contenido en el árbol resultante si la evaluación de test devuelve true . El ejemplo inserta un mensaje si el nodo contextual no tiene un atributo idCliente .
  53. xsl:for-each Instancia su contenido en el árbol resultante tantas veces como elementos encuentre en el conjunto introducido en el atributo select . La expresión del atributo select debe ser una expresión XPath válida. En cada iteración, coge un elemento del conjunto como elemento actual, y cualquier expresión XPath que sea una referencia relativa, será relativa respecto a ese elemento actual. Dentro del elemento pueden insertarse otros elementos for-each , if o cualquier otro elemento xsl. Opcionalmente, puede contener un elemento &lt;xsl:sort&gt; para que itere sobre los elemento siguiendo un orden concreto. Si no se incluye este elemento, se itera según el orden de aparición de los elementos. Este elemento tiene la siguiente estructura: &lt;xsl:sort      select=&quot;expression&quot;      data-type=&quot;text&quot; | &quot;number&quot;     order=&quot;ascending&quot; | &quot;descending“ /&gt; siendo expression una expresión XPath que indica el campo por el que debe ordenarse, data-type indica si es una ordenación numérica o alfanumérica, y order indica si es ascendente o descendente. xsl:choose, xsl:when, xsl:otherwise Debe contener uno o más elementos xsl:when y cero o un elemento xsl:otherwise . Sólo instancia el contenido del primer elemento when que se cumpla, y si no se cumple ninguno, instancia el contenido del elemento otherwise . Si no se cumple ningún when y no existe elemento otherwise , entonces no devuelve nada.
  54. xsl:comment Este elemento no puede contener otros elementos. Sólo texto y referencias a entidades. Estas referencias serán reemplazadas por el texto asociado en el árbol resultante.
  55. Estas son las funciones más comunes que pueden ser usadas en XSLT, tomadas del estándar XPath. A parte de éstas, hay otras funciones de XPath y algunas funciones definidas por XSLT. Estas funciones pueden ser usadas en los tags xsl:value-of .
  56. Las versiones 5 y 5.5 del Internet Explorer contienen un parser antiguo (MSXML) que no permite aplicar todas las ventajas del estándar XSL. Se debe instalar la versión 3 de MSXML o superior para poder realizar los ejercicios del tutorial. Pero, después de instalarla, IE seguirá usando la primera versión, puesto que la versión 3 estará desactivada. Se pueden instalar varias versiones del MSXML sin pisar una a la otra, pero sólo habrá una activa que se use en las aplicaciones de Microsoft. Para activarla se debe ejecutar el xmlinst.exe
  57. Ejercicio 1.1 Para probar el xml, abrirlo desde el Internet Explorer. Si se usan caracteres extraños, se debe agregar el atributo encoding=“ISO-8859-1” a la cabecera: &lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt; También se pueden añadir caracteres ASCII con la expresión &amp;#65; siendo el 65 el código del carácter.
  58. La presentación de páginas HTML con contenido XML es una de los usos más extendidos de XML, pero también pueden usarse para el intercambio de datos entre máquinas de forma que no hayan problemas de formato, ya que XML es un estándar basado en formato de texto, ideal para el manejo de información en Internet. Este intercambio de información se hace normalmente usando entornos de programación Java o Microsoft. El uso de XML para presentación de datos HTML usando XSL es el caso que hemos estado viendo durante los capítulos anteriores. XML proporciona los datos y la plantilla XSL le aplica una transformación para obtener una página HTML. Este proceso se hacía en el cliente. Microsoft Internet Explorer 5.0 contiene el parser MSXML que permite acceder a documentos XML y aplicarle transformaciones XSL. Netscape Navigator no tiene soporte XML hasta la versión 6.0. Usando Java, el acceso a datos del documento XML y posible transformación por XSL se realiza en el servidor. Sun posee una librería de clases (JAXP) de libre distribución que proporciona todas estas funciones. Aunque también existen otras librerías de libre distribución creadas por terceras partes. Estas clases pueden ser usadas tanto en JSP como en clases Java. En entornos Microsoft, el objeto COM MSXML permite el acceso a documentos XML ya sea en el cliente con el IE (que ya contiene el MSXML) o en el servidor con ASP o Visual Basic.
  59. JAXP es el conjunto de clases que Sun pone a disposición del que lo necesite que permite el manejo de documentos XML, soportando los estándares de XML y XSL definidos por el W3C. Sun permite además la descarga de otras utilidades que hacen uso de XML, como JAXM (Java API for XML Messaging) que permite el intercambio de mensajes XML usando el protocolo SOAP (Simple Object Access Protocol). Todas estas aplicaciones se pueden descargar a la vez con el Java XML Pack. Los paquetes que comienzan con org.w3c.dom están bajo licencia del W3C, y el resto están bajo licencia de Apache ( http://xml.apache.org ). El código fuente también está disponible. La instalación tan solo consiste en descomprimir el archivo zip y añadir al classpath los archivos jar del parser (crimson.jar) y del procesador XSLT (xalan.jar).
  60. JAXP contiene clases y métodos que permiten no sólo la lectura de datos de un documento XML, sino también la modificación de sus elementos, atributos, aplicación de hojas de estilos XSLT,... Aquí se muestra las partes más importantes de un código que quisiera acceder a un documento XML almacenado en un archivo, usando JAXP. Al comienzo, deben importarse las clases necesarias: las clases de JAVAXP, las excepciones para el control de posibles errores (por ejemplo, que no se encuentre un determinado nodo)
  61. Primero se declara la variable donde se almacenará el documento XML ( document ). Se declara estática para que pueda ser accedida desde cualquier método de la clase y, una vez cargado el XML, no se pierda su valor. Al ser estática, debe declararse fuera del método main(). Se instancia la clase DocumentBuilderFactory que nos devolverá un parser. Con el método newDocumentBuilder () obtenemos el parser (variable builder ). Después se le pasa un objeto File al método parse, con el archivo del xml, y devuelve el documento. Después pueden usarse los métodos tradicionales para el acceso al documento, considerando que el método document.getDocumentElement() devuelve el elemento raíz.
  62. La ayuda para estos objetos se puede encontrar en el fichero comprimido que contiene las clases de JAXP. Para la clase Text, el método que más se usa es getNodeValue(), heredado de Node y que devuelve el valor del texto.
  63. La expresión document.getDocumentElement().getChildNodes() obtendrá la siguiente lista: 0. Elemento Text 1. Elemento Nodo cliente 2. Elemento Text 3. Elemento Nodo cliente 4. Elemento Text Esto es debido a que es posible insertar texto entre dos elementos cualesquiera. Aunque estos textos estén vacíos, el método getChildNodes() los devuelve como hijos. Los índices comienzan por 0. Para obtener el valor de un Element, hay que obtener sus hijos de tipo Text.
  64. Instalación de JDK. Comprobar la versión del JDK instalado con el comando: java –version Si es inferior a la 1.1.8, descargar una versión posterior e instalarla. Instalación de JAXP. Descomprimir el archivo zip en un directorio del disco duro (por ej. C:\\Jaxp) y añadir al classpath los archivos jar del parser (crimson.jar) y del procesador XSLT (xalan.jar). Instalación de un servidor Web Java. Cualquier servidor web puede servir. Un ejemplo es el iPlanet Web Server FastTrack Edition, servidor gratuito que puede ser descargado de la web de iplanet. Recordemos que iplanet es el nombre con el que se conoce a la unión de Netscape y Sun. Antes Sun mantenía su JavaWeb Server, pero tras esta unión se ha dejado de mejorar esta herramienta, que se ha quedado en la versión 2.
  65. El objetivo de esta práctica es la creación de una clase java que acceda a un documento XML almacenado en un archivo y obtenga sus datos. Se debe instalar el JDK antes de realizarla. También deben instalarse las clases de JAXP. Ejercicio 1.1 Al ejecutar la clase debe mostrar el nombre del primer cliente. Ejercicio 1.2 Se deben insertar las líneas necesarias explicadas en las páginas anteriores en el sitio correspondiente para que el archivo xml sea leído con la línea document = builder.parse(xmlFile); Ejercicio 1.3 Para hacer este ejercicio se deberá mirar la API de las clases de JAXP, que está en el directorio docs/api dentro del directorio de instalación de la librería JAXP. Hay que tener cuidado con la función getChildNodes(), porque devuelve una lista de nodos de los hijos, además de insertar nodos de Texto entre ellos. Así, si tenemos los tags &lt;clientes&gt; &lt;cliente&gt;&lt;/cliente&gt; &lt;cliente&gt;&lt;/cliente&gt; &lt;clientes&gt;
  66. Aquí se muestra un ejemplo que obtiene un documento XML de datos y una plantilla XSLT de dos archivos xml y xsl respectivamente. El programa mostrará por la salida (System.out) el resultado de aplicarle la plantilla XSLT al documento XML. Para aplicarle una plantilla XSLT a un documento XML, hay que añadirle estos includes a la clase Java. El Transformer es el procesador XSLT encargado de hacer esa transformación.
  67. Aquí se explica el significado de cada línea de código: Al igual que en el ejemplo anterior, se declara el documento donde se guardarán los datos del XML. Se instancia el la clase DocumentBuilderFactory que es la que creará el parser. Se crean dos objetos de tipo File, stylesheet guardará el fichero xsl y datafile el fichero que contenga el documento xml. Se crea el parser (variable builder ) llamando al método newDocumentBuilder () del objeto factory . Se obtiene el documento del xml de datos con la función parse del objeto builder . Se instancia la clase TransformerFactory , que es la que creará el procesador XSLT (objeto Transformer ). Se crea el objeto stylesource , que guarda el origen de la plantilla XSLT. En este caso, el origen es el archivo que contiene el fichero xsl ( stylesheet ). Se crea el procesador XSLT (objeto transformer ) usando el objeto tFactory de tipo TransformerFactory . Se declara un objeto DOMSource , que especifica el origen del documento XML de datos. En este caso es el documento obtenido anteriormente ( document ). Se especifica a dónde se mandará el resultado de la transformación. En este caso es System.out. Si se quiere mandar a un fichero, habría que pasarle un objeto de tipo FileWriter al constructor del StreamResult . Por ejemplo: StreamResult result = new StreamResult( new FileWriter(&quot;salida.htm&quot;) ); Ejecutar la transformación llamando al método transform del transformer . El primer parámetro es el origen de los datos ( source ) y el segundo es la salida del resultado ( result ). Recordemos que el transformer ya está asociado a una hoja de estilos.
  68. El objetivo de esta práctica es la aplicación de una plantilla XSL a un documento XML estando ambos almacenados en archivos. Ejercicio 2.1 El resultado será una página web que puede ser abierta en cualquier browser.
  69. Para guardar un documento XML en un archivo o en otra salida se pueden usar los mismos objetos ya usados en el ejemplo anterior. Pero ahora, el transformer lo construiremos sin argumento (sin indicarle la hoja de estilos XSLT), de forma que no hará ninguna transformación. En el resultado se pasará un objeto FileWriter con el archivo de salida.
  70. El objetivo de esta práctica es la modificación de un documento XML y posterior almacenamiento de las modificaciones. Ejercicio 3.1 Habrá que hacer uso de la api de JAXP para saber los métodos necesarios. Tras compilar la clase y ejecutarla, se abrirá el archivo clientes.xml en el notepad para comprobar que se ha insertado el dni en el segundo cliente.
  71. Existen otros parsers creados por terceras partes, también de libre distribución, que pueden ser usados y están disponibles en Internet.
  72. Para la realización de este ejercicio se deberá instalar algún servidor web que soporte jsp, como JavaWebServer o iPlanet Web Server.
  73. MSXML es un objeto COM que incluye un parser XML y un procesador XSLT. Este objeto es usado por las aplicaciones Microsoft, su navegador IE, sus sistemas operativos y el servidor IIS (Internet Information Server). Está incluido en el Internet Explorer, aunque también se pueden descargar las últimas versiones desde la web de Microsoft ( http://msdn.microsoft.com/xml ). Microsoft permite que se puedan instalar nuevas versiones del objeto sin tener que pisar versiones anteriores. Por ejemplo, la librería msxml4.dll contiene la versión 4 del parser, pero no pisa la versión 3 contenida en msxml3.dll. Para seleccionar qué versión del objeto se desea utilizar se ha creado la aplicación xmlinst.exe. La versión que trae el Internet Explorer es la más antigua. Ésta se introdujo cuando la especificación XSL no era más que un borrador, por lo que no soporta algunas características avanzadas, como las funciones o las operaciones aritméticas. Para usar estas características se debe instalar la versión 3.0 o superior y ejecutar xmlinst.exe para que se use la nueva versión instalada.
  74. Las funciones Load y LoadXML del objeto DOMDocument sirven, respectivamente, para cargar un documento XML desde un archivo XML o desde una cadena. Ambos devuelven true si el documento se ha cargado correctamente, y false si el documento no es válido.
  75. Este ejemplo muestra como obtener un documento XML de un archivo y aplicarle una hoja de estilos XSL. Primero se declaran dos objetos DOMDocument , uno para el documento XML ( domXml ) y otro para el documento XSL ( domXsl ). La variable result será una cadena que guardará el resultado de la transformación. Después se crean los documentos domXml y domXsl . Luego se cargan los documentos desde sus respectivos archivos. Por último, se realiza la transformación llamando al método transformNode del documento y pasándole como parámetro la plantilla XSL. El resultado es una cadena que, en su caso, contendrá el código de la página HTML.
  76. Para la realización de este ejercicio se deberá instalar un servidor web que soporte asp, como IIS o Personal Web Server.