• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Manual XML
 

Manual XML

on

  • 4,235 views

Manual XML, DTD, XSL

Manual XML, DTD, XSL

Statistics

Views

Total Views
4,235
Views on SlideShare
4,234
Embed Views
1

Actions

Likes
1
Downloads
0
Comments
0

1 Embed 1

https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Manual XML Manual XML Presentation Transcript

    • XML eXtended Markup Language
    • Origen y Objetivos de XML
      • HTML y XML tienen un antepasado común: el lenguaje SGML.
      • HTML, XML, SGML son lenguajes de marca.
      • Intenta recoger lo mejor de HTML y SGML.
    • Origen y Objetivos de xml
      • En XML la presentación está separada del contenido, pudiendo de esta manera visualizar un documento de diferentes maneras.
      • Un documento XML puede también tener distintos usos y destinos.
    • Aplicaciones de XML
      • Las aplicaciones de XML no se circunscriben tan sólo alrededor de las aplicaciones para internet.
      • El caso de Microsoft....
      • El caso de Borland....
      • Bases de datos XML....
      • EDI-XML....
    • documentos xml
      • DTD (definición de tipo de documento)
      • Encabezado
      • Elementos
      • Atributos
      • Entidades
      • Vínculos
      • Estilos (visualización)
    • Documentos xml Fichero DTD Fichero XML Fichero XSL DEFINICIÓN DATOS VISUALIZACIÓN LENGUAGE XML
    • Documentos xml
      • <?xml version=&quot;1.0&quot; standalone=&quot;yes&quot;?>
      • <DATAPACKET Version=&quot;2.0&quot;>
      • <METADATA>
        • <FIELDS>
          • <FIELD attrname=&quot;IDADMCOMPANY&quot; fieldtype=&quot;string&quot; WIDTH=&quot;25&quot;/>
          • <FIELD attrname=&quot;IDUSER&quot; fieldtype=&quot;string&quot; WIDTH=&quot;8&quot;/>
          • <FIELD attrname=&quot;PWD&quot; fieldtype=&quot;string&quot; WIDTH=&quot;2000&quot;/>
          • </FIELDS>
          • </METADATA>
          • <ROWDATA>
              • <ROW RowState=&quot;5&quot; IDADMCOMPANY=&quot;23072002214424000&quot; IDUSER=&quot;CSTADMIN&quot; PWD=&quot;master&quot;/>
              • <ROW RowState=&quot;4&quot; IDADMCOMPANY=&quot;23072002214424000&quot; IDUSER=&quot;mene&quot; PWD=&quot;mene&quot;/>
              • <ROW RowState=&quot;4&quot; IDADMCOMPANY=&quot;23072002214424000&quot; IDUSER=&quot;felipe&quot; PWD=&quot;felipe&quot;/>
              • <ROW RowState=&quot;5&quot; IDADMCOMPANY=&quot;23072002214424000&quot; IDUSER=&quot;pablo&quot; PWD=&quot;pablo&quot;/>
              • <ROW RowState=&quot;13&quot; IDADMCOMPANY=&quot;23072002214424000&quot; IDUSER=&quot;pablo&quot; PWD=&quot;vitale&quot;/>
              • <ROW RowState=&quot;12&quot; IDADMCOMPANY=&quot;23072002214424000&quot; IDUSER=&quot;pablo&quot; PWD=&quot;pablo&quot;/>
              • <ROW RowState=&quot;12&quot; IDADMCOMPANY=&quot;23072002214424000&quot; IDUSER=&quot;CSTADMIN&quot; PWD=&quot;master&quot;/>
              • <ROW RowState=&quot;5&quot; IDADMCOMPANY=&quot;&quot; IDUSER=&quot;mene&quot; PWD=&quot;mene5/>
              • </ROWDATA>
        • </DATAPACKET>
    • Estructura del documento xml
      • Las estructuras básicas del documento xml
        • El prólogo
        • El elemento del documento
        • Contenido
        • Atributos
        • Entidades
        • Comentarios
    • Estructura del documento xml
      • El prólogo
        • Contiene información relativa al documento
        • Contiene la declaración de XML
        • Contiene la vinculación con su DTD
        • Contiene instrucciones que deben ser ejecutadas por la aplicación que lo procese (instrucciones de proceso)
        • Contiene la vinculación con su hoja de estilo correspondiente.
    • Estructura del documento xml
        • Declaración XML
          • <?xml version=“1.0” rmd=“ALL” ?>
          • <?xml version=“1.0” encoding=“ISO-8859-1” ?>
          • <?xml version=“1.0” standalone=“yes” ?>
      Instrucción de proceso Declaración de marca requerida Juego de codificación de caracteres utilizado en el documento España ¿tiene DTD? No tiene DTD
    • Estructura del documento xml
        • Declaración de tipo de documento
        • <!DOCTYPE biblioteca SYSTEM “biblio.dtd”>
        • <!DOCTYPE biblioteca [ ...... ]>
      Declaración de tipo de documento Fichero externo DTD Declaración de tipo de documento Declaración interna DTD
    • Estructura del documento xml
        • Instrucciones de procesamiento
          • La instrucción de procesamiento es procesada por la aplicación que procesa el fichero XML.
          • La instrucción de procesamiento incluirá argumentos entendibles por dicha aplicación.
          • La declaración XML y la declaración de hoja de estilo son instrucciones de procesamiento.
          • Empiezan con <? Y terminan con ?>
            • <?application “argumento” “...” .... ?>
      Instrucción de proceso Argumentos
    • Estructura del documento xml
        • Declaración de hoja de estilo
          • Pueden usarse dos tipos de hojas de estilo para XML, las hojas de estilo propias de XML (XSL) y las hojas de estilo en cascada (CSS).
          • Para una hoja tipo XSL el atributo TYPE toma el valor “text/xsl”
          • Para una hoja tipo CSS el atributo TYPE toma el vaor “text/css”
          • <?xml-stylesheet type=“text/xsl” href=“archivo.xsl” ?>
      Instrucción de proceso Tipo de hoja Archivo
    • Estructura del documento xml
      • El elemento del documento
        • El elemento del documento es el elemento de mayor nivel e incluye todos los demás elementos y contenido.
        • También es conocido como elemento raíz.
            • <LIBRO>
            • ....
            • </LIBRO>
    • Estructura del documento xml
      • Elementos
        • Son los principales componentes de marca definidos en la DTD.
        • Aparecen en los documentos en forma de etiquetas.
        • Los elementos pueden contener otras elementos y estar definidos por atributos.
        • Con excepción de los elementos definidos como EMPTY que pueden contener atributos pero no otros elementos.
    • Estructura del documento xml
          • <LIBRO>
            • <TITULO>Las recetas de mama</TITULO>
            • <AUTOR>Milagros Sánchez</AUTOR>
            • <EDITORIAL>San Luciano</EDITORIAL>
            • <CUBIERTA TIPO=“Blanda” />
            • <CATEGORIA CLASE=“NOFICCION” />
            • <ISBN>0-000-00000-0</ISBN>
            • <NOTA NUMERO=“5” />
            • <COMENTARIOS> Es un libro con recetas tradicionales muy apreciado por los entendidos, pues incluye ejemplos con una gran inventiva y modos de aprovechar alimentos de valor incalculable, no conocidos por gran parte de los entendidos.
            • </COMENTARIOS>
          • </LIBRO>
      EMPTY Contenido Atributo
    • Estructura del documento xml
      • Entidades
        • A las entidades definidas en la DTD se puede hacer referencia en el documento XML.
            • <editorial>&nombreeditorial; </editorial>
        • Para visualizar el valor de la entidad nombreeditorial es necesario declarar la entidad nombreeditorial.
            • <!ENTITY nombreeditorial “alfaguara”>
              • El resultado:
            • <editorial> alfaguara </editorial>
    • Estructura del documento xml
      • Secciones CDATA
        • Las secciones CDATA no son analizadas por el procesador XML.
        • Se utilizan en el caso de que nos nos interese que determinada cadena sea analizada por el procesador...
    • Estructura del documento xml
      • Secciones CDATA
        • En el caso de que como contenido de un valor queramos introducir código HTML como este:
            • <elemento> <HTML> .... </HTML> </elemento>
          • Esto no sería posible ya que el analizador de XML procesaría los simbolos “<“ y “>” como parte del documento XML.
          • Para evitar esto tendríamos que escribir el contenido de la siguiente manera:
            • <elemento> &lt;HTML&gt; .... &lt;HTML&gt; </elemento>
    • Estructura del documento xml
      • Secciones CDATA
        • Para evitar el arduo trabajo que puede suponer esto podemos utilizar una sección CDATA:
            • <elemento>
              • <![CDATA [ <HTML> .... </HTML> ]]>
            • </elemento>
        • El único carácter reservado dentro de la sección CDATA es ]].
    • Estructura del documento xml
      • Comentarios
        • Los comentarios comienzan con <!-- y terminan por -->.
        • Cualquier cosa que se incluya entre las etiquetas inicial y final del comentario serán ignoradas por el procesador XML.
        • No pueden aparecer dentro de etiquetas.
            • <!-- Este es un comentario -->
    • Documentos XML válidos y bien formados
      • Documentos bien formados
        • Los documentos bien formados sigue las reglas básicas de XML para diseño de documentos.
      • Documentos válidos
        • Los documentos válidos han de estar bien formados.
        • Han de respetar las normas dictadas por su DTD.
    • Documentos XML válidos y bien formados
      • ¿qué es un documento bien formado?
        • Es una declaración XML con una declaración de marca obligatoria.
        • Es un solo elemento de documento en el que todos los demás elementos se encuentran anidados.
        • Todas las entidades usadas en su interior se declaran en la DTD interna.
        • Todos los elementos, atributos y entidades que se utilicen deben escribirse con una sintaxis correcta.
    • Documentos XML válidos y bien formados
      • ¿qué es un documento válido?
        • Un documento válido es un documento bien formado que también respeta las leyes establecidas por su DTD.
        • Contiene únicamente elementos definidos en su DTD junto con sus elementos y atributos obligatorios.
        • Sigue las pautas marcadas por los modelos de contenido de su DTD.
    • Documentos XML válidos y bien formados
      • Si se trabaja con un documento XML sin ninguna DTD asociada mas allá de sus definiciones internas de entidades, el documento solo ha de estar bien formado.
    • Documentos XML válidos y bien formados
      • Documentos bien formados
        • Es una declaración XML con una declaración de marca obligatoria.
          • <?XML VERSION=“1.0” ?>
          • El atributo RMD adoptará uno de los siguientes valores:
            • ALL (debe procesar todas las DTD) (* valor por defecto)
            • INTERNAL (debe procesar solo la DTD interna)
            • NONE (no debe procesar ninguna DTD)
          • <?XML VERSION=“1.0” RMD=“INTERNAL” ?>
    • Documentos XML válidos y bien formados
      • Documentos bien formados
        • Un solo elemento de documento en el que todos los demás elementos y contenidos se encuentren anidados.
          • Un solo elemento raíz.
              • <BIBLIOTECA>
              • <LIBRO>
              • .....
              • </LIBRO>
              • <LIBRO>
              • ....
              • </LIBRO>
              • </BIBLIOTECA>
    • Documentos XML válidos y bien formados
      • Documentos bien formados
        • Todas las entidades usadas en su interior se deben declarar en su DTD interna.
          • Todas las entidades han de definirse en la DTD del documento.
          • No importa el lugar de la DTD donde se declare una entidad, mientras que se declare.
    • Documentos XML válidos y bien formados
      • Documentos bien formados
        • Todos los elementos, atributos y entidades que utilice deben escribirse con una sintaxis correcta.
          • Todos los elementos que no sean vacíos (EMPTY) deben tener su etiqueta inicial y final.
          • Los elementos vacíos deben tener una barra inclinada al final de su etiqueta inmediatamente antes del signo mayor que (/>).
          • Todos los valores de los atributos deben escribirse entre comillas.
          • Todas las referencias a entidades no binarias deben comenzar con el signo & y terminar con un ;.
          • Todos los elementos deben encontrarse anidados de manera correcta.
    • Documentos XML válidos y bien formados
      • Documento válido
        • Es un documento que respeta las reglas de su DTD además de estar bien formado.
          • Usar el elemento de documento especificado por la DTD en el prólogo de los documentos.
            • <!DOCTYPE documento SYSTEM “doc.dtd”>
          • Incluir todos los atributos que se hayan definido como obligatorios con la palabra clave REQUIRED.
          • Respetar con exactitud los modelos de contenido definidos para todos los elementos.
            • Que elementos deben anidarse dentro de otros...
    • DTD
      • Las DTDs definen la marca que se usará para describir los contenidos de un documento.
      • La mayoría de los documentos XML se diseñan siguiendo una DTD determinada.
      • La DTD es parte del documento XML aunque se almacene en un fichero distinto.
    • DTD
      • La DTD incluye información acerca de:
        • Declaraciones de elementos
        • Declaraciones de listas de Atributos
        • Modelos de Contenido
        • Declaraciones de entidades
    • DTD
      • Todas las estructuras de una DTD se diseñan para que describan minuciosamente la marca que se podrá usar en sus documentos.
      • Todos los aspectos de la marca deben especificarse en la DTD.
        • Los atributos que puede usar cada elemento.
        • Los tipos de valores de los atributos.
        • Los valores predeterminados de los atributos.
    • DTD
      • Declaraciones de Elementos.
        • Especifica un elemento de Marca.
        • Cada etiqueta que se usa en el documento XML ha sido definida mediante una declaración en la DTD.
              • <!ELEMENT Libro>
              • <!ELEMENT Titulo>
              • <!ELEMENT Autor>
              • <!ELEMENT Editorial>
              • <!ELEMENT cubierta EMPTY>
              • <!ELEMENT categoria EMPTY>
              • <!ELEMENT isbn>
              • <!ELEMENT nota EMPTY>
              • <!ELEMENT comentarios>
    • DTD
      • Declaraciones de Atributos
        • Las declaraciones de listas de atributos definen conjuntos de atributos que puede adoptar un elemento especifico.
        • Los atributos de la lista podrán ser usados tan solo por ese elemento en particular.
              • <!ATTLIST CUBIERTA TIPO (BLANDA | DURA) “BLANDA” #REQUIRED>
              • <!ATTLIST CATEGORIA CLASE (FICCION| FANTASIA | CFICCION | MISTERIO | TERROR | NOFICCION | HISTORICO | BIOGRAFIA) “FICCION” #REQUIRED>
              • <!ATTLIST NOTA TYPE(1 | 2 | 3 | 4 | 5) “3” #REQUIRED>
    • DTD
      • Modelos de contenido
        • Es parte de la declaración de un elemento que describe que tipo de contenido puede anidarse en su interior.
          • Contenido de Datos (#PCDATA)
              • <!ELEMENT editorial (#PCDATA)>
          • Contenido de Elementos
            • Elementos anidados
          • Contenido Mixto
            • Tanto datos como elementos
    • DTD
      • En nuestro ejemplo los elementos pueden ser anidados de esta manera:
              • Libro
              • Titulo
              • Autor
              • Editorial
              • Cubierta
              • Categoria
              • ISBN
              • Nota
              • Comentarios
    • DTD
      • La declaración de los elementos en la DTD sería:
      • <!ELEMENT Libro (Titulo, autor, editorial, cubierta, categoria, isbn, nota, comentarios?)>
      • <!ELEMENT Titulo (#PCDATA)>
      • <!ELEMENT autor (#PCDATA)>
      • <!ELEMENT editorial (#PCDATA)>
      • <!ELEMENT cubierta EMPTY>
      • <!ELEMENT categoria EMPTY>
      • <!ELEMENT isbn (#PCDATA)>
      • <!ELEMENT nota EMPTY>
      • <!ELEMENT comentarios (#PCDATA)>
    • DTD
      • Declaraciones de entidades
        • La declaración de una entidad crea una entidad, que es esencialmente un sobrenombre que asocia a un nombre especifico con un grupo de datos.
        • Los datos de asociados con este nombre pueden tener los siguientes formatos:
          • Entidad Interna:
            • Asocia el nombre a un texto incluido en la propia declaración de la entidad.
              • <!ENTITY XML “Extensible Markup Language”>
    • DTD
          • Entidad de texto externa
            • Asocia el nombre a un bloque de texto almacenado en el exterior del documento.
          • Entidad binaria externa
            • Asocia el nombre a un objeto de datos no XML tal como un archivo gráfico, un documento de procesado de texto, o un archivo de sonido almacenado en el exterior del documento.
            • <!ENTITY imagen 1 “/graphics/imagen1.gif” NDATA GIF SYSTEM>
          • Entidad de carácter o numérica
            • Utilizada específicamente para contener caracteres no ASCII en los ficheros XML.
    • DTD
      • El resultado final
      • <!ELEMENT Libro (Titulo, autor, editorial, cubierta, categoria, isbn, nota, comentarios?)>
      • <!ELEMENT Titulo (#PCDATA)>
      • <!ELEMENT autor (#PCDATA)>
      • <!ELEMENT editorial (#PCDATA)>
      • <!ELEMENT cubierta EMPTY)>
              • <!ATTLIST CUBIERTA TIPO (BLANDA | DURA) “BLANDA” #REQUIRED>
      • <!ELEMENT categoria EMPTY)>
              • <!ATTLIST CATEGORIA CLASE (FICCION| FANTASIA | CFICCION | MISTERIO | TERROR | NOFICCION | HISTORICO | BIOGRAFIA) “FICCION” #REQUIRED>
      • <!ELEMENT isbn (#PCDATA)>
      • <!ELEMENT nota EMPTY>
              • <!ATTLIST NOTA NUMERO (1 | 2 | 3 | 4 | 5) “3” #REQUIRED>
      • <!ELEMENT comentarios (#PCDATA)>
      Opcional
    • DTD
      • Declaraciones avanzadas de elementos
        • Los elementos que contienen otros elementos pueden declarar la aparición obligatoria u opcional así como el número de veces que aparecerá un elemento determinado.
          • <!ELEMENT LIBROS (titulo)>
            • Indica que el elemento libros estará formado por el elemento titulo que es obligatorio y aparecerá una sola vez.
          • <!ELEMENT LIBROS (titulo?)>
            • Indica que el elemento libros estará formado por el elemento titulo que es opcional pero que si aparece lo hará una sola vez.
    • DTD
          • <!ELEMENT LIBROS (titulo+)>
            • Indica que el elemento libros estará formado por el elemento titulo que es obligatorio y puede aparecer una o mas veces.
          • <!ELEMENT LIBROS (titulo*)>
            • Indica que el elemento libros estará formado por el elemento titulo que es opcional y puede aparecer una o mas veces.
    • DTD
      • Declaración avanzada de elementos
        • Declaración para seleccionar elementos
          • <!ELEMENT LIBROS (titulo | autor | editorial)>
            • En este caso no tienen por que aparecer todos los elementos, aparecerá tan sólo uno que será seleccionado de entre los declarados.
            • Se pueden usar declaraciones de ocurrencia como:
              • <!ELEMENT LIBROS (titulo | autor+ | editorial)>
            • <!ELEMENT LIBROS (titulo* | autor* | editorial*)>
              • Indica que pueden aparecer mas de un solo elemento y en la cantidad que consideremos oportuna.
            • <!ELEMENT LIBROS (titulo | autor | editorial)*>
              • Indica que pueden usarse cualquiera de los declarados, en el orden que se crea oportuno.
    • DTD
      • Declaración avanzada de elementos
        • Elementos vacíos
          • Para declarar elementos que no serán contenedores, es decir tan solo tienen atributos pero no contenido se utiliza la cláusula EMPTY.
            • <!ELEMENT Cubierta EMPTY>
          • En este caso el elemento dentro del documento XML se cerrará en la propia declaración.
            • <Cubierta />
    • DTD
      • Modelos de contenido avanzado para entidades.
        • Elementos con contenido mixto
          • Los elementos con contenido mixto pueden contener a su vez datos y elementos, y pueden combinarse de igual manera que hemos visto anteriormente para los elementos.
            • <!ELEMENT LIBRO (#PCDATA | Titulo)>
    • DTD
        • Elementos con cualquier tipo de contenido
          • Pueden contener cualquier tipo de dato o elemento que sea definido por la DTD.
          • En este caso el contenido no tiene por que seguir un orden concreto.
            • <!ELEMENT LIBRO ANY>
    • DTD
      • Declaración Avanzada de Atributos
        • Declaración de tipo de atributo
          • Cadena de caracteres CDATA
          • <!ATTLIST CUBIERTA TIPO CDATA (Blanda | Dura) ,”blanda” #REQUIRED>
          • identificador único ID
            • En el documento XML no puede haber dos atributos ID con el mismo valor
            • El valor del atributo sólo puede empezar por un carácter no numérico.
          • <!ATTLIST LIBRO CODIGO CDATA ID>
    • DTD
          • Referencia a un identificador IDREF
            • Hace referencia a un atributo tipo ID.
            • Tan sólo hace referencia a un valor.
          • <!ATTLIST AUTOR CODIGO IDREF>
          • Referencia a varios identificadores IDREFS
            • Hace referencia a atributos tipo ID.
            • Puede hacer referencia a varios valores.
            • Los valores en el documento XML se separan con espacio no con coma.
          • <!ATTLIST AUTOR CODIGO IDREFS>
    • DTD
          • Referencia a una entidad ENTITY
            • Hace referencia a una entidad interna o externa que haya sido definida en la DTD.
            • Tan sólo hace referencia a una entidad.
          • <!ATTLIST CAPITULO1 TEXTO ENTITY>
          • Referencia a varias entidades ENTITIES
            • Hace referencia a entidades internas y externas declaradas en la DTD.
            • Puede hacer referencia a varias entidades.
            • Los valores en el documento XML se separan con espacio no con coma.
          • <!ATTLIST CAPITULO1 TEXTO ENTITIES>
    • DTD
          • Referencia a una notación NOTATION
            • Hace referencia a una notación declarada en la dtd.
          • <!ATTLIST LIBRO TIPOFICHERO NOTATION (notation1)>
          • <!ATTLIST LIBRO TIPOFICHERO NOTATION (notation1 | notation2)>
    • DTD
        • Atributos Obligatorios y Opcionales
          • Atributos Obligatorios #REQUIRED
            • <!ATTLIST LIBRO Titulo CDATA #REQUIRED>
          • Atributos opcionales #IMPLIED
            • <!ATTLIST LIBRO Titulo CDATA #IMPLIED>
        • Atributos con valor fijo #FIXED
            • <!ATTLIST LIBRO Titulo CDATA #FIXED “El quijote”>
    • DTD
      • Las DTDs pueden estar incluidas dentro del mismo documento XML o pueden ser almacenadas en un fichero externo con extensión .dtd.
      • En cualquier caso el documento XML debe hacer referencia mediante la declaración <!DOCTYPE a la definición de tipo de documento (DTD) correspondiente.
    • DTD
          • <!DOCTYPE bibioteca [
      • <!ELEMENT Libro (Titulo, autor, editorial, cubierta, categoria, isbn, nota, comentarios?)>
      • <!ELEMENT Titulo (#PCDATA)>
      • <!ELEMENT autor (#PCDATA)>
      • <!ELEMENT editorial (#PCDATA)>
      • <!ELEMENT cubierta EMPTY)>
              • <!ATTLIST CUBIERTA TIPO (BLANDA | DURA) “BLANDA” #REQUIRED>
      • <!ELEMENT categoria EMPTY)>
              • <!ATTLIST CATEGORIA CLASE (FICCION| FANTASIA | CFICCION | MISTERIO | TERROR | NOFICCION | HISTORICO | BIOGRAFIA) “FICCION” #REQUIRED>
      • <!ELEMENT isbn (#PCDATA)>
      • <!ELEMENT nota EMPTY>
              • <!ATTLIST NOTA NUMERO (1 | 2 | 3 | 4 | 5) “3” #REQUIRED>
      • <!ELEMENT comentarios (#PCDATA)>
      • ]
    • DTD
          • <!DOCTYPE bibioteca SYSTEM “biblio.dtd”>
    • DTD
      • Podemos encontrar declaraciones externas e internas de DTD en un mismo documento.
        • Las DTDs internas se usarían en este caso, para almacenar la definición de instrucciones de proceso especificas y declaraciones de entidades particulares de el documento en cuestión.
    • DTD
          • <!DOCTYPE bibioteca SYSTEM “biblio.dtd”> [
          • <!ELEMENT libro (titulo, autor, editorial, cubierta,categoria,isbn,nota,comentarios?,fechapub,condicion,valor)>
          • <!ELEMENT categoria EMPTY>
            • <!ATTLIST CATEGORIA CLASE (FICCION | FANTASIA | CFICCION | MISTERIO | TERROR | NOFICCION | HISTORICO | BIOGRAFIA | RARO ) “RARO” #REQUIRED>
          • <!ELEMENT fechapub (#PCDATA)>
          • <!ELEMENT condicion (#PCDATA)>
            • <!ATTLIST CONDICION ESTADO (POBRE | NORMAL | BUENO | EXCELENTE ) #REQUIRED>
          • <!ELEMENT valor (#PCDATA)>
            • <!ATTLIST VALOR FUENTE CDATA #REQUIRED>
          • ]
    • Ejercicios
      • Ejercicio 1
        • Escribir un documento XML válido de la siguiente DTD.
        • <!ELEMENT Clientes (Cliente)* >
        • <!ELEMENT Cliente (Nombre,Direccion,Poblacion,Provincia,Telefono,Acciones*)>
        • <!ELEMENT Nombre (#PCDATA)>
        • <!ELEMENT Direccion (#PCDATA)>
        • <!ELEMENT Poblacion (#PCDATA)>
        • <!ELEMENT Provincia (#PCDATA)>
        • <!ELEMENT Telefono (#PCDATA)>
        • <!ELEMENT Acciones (#PCDATA)>
        • <!ATTLIST Acciones
        • Tipo (Visita | Llamada | Fax | eMail) &quot;eMail&quot;
        • fecha CDATA #REQUIRED
        • Contacto CDATA #IMPLIED
        • Descripcion CDATA #IMPLIED>
    • Ejercicios
      • Ejercicio 2
        • Sobre el siguiente documento XML escribir la DTD correspondiente para que sea válido.
        • <Telefonos>
        • <Moviles>
        • <TelefonoMovil Marca=&quot;Nokia&quot; Modelo=&quot;5115&quot; SERIE=&quot;qwer34568&quot; Color=&quot;Negro&quot; Tecnologia=&quot;GSM&quot;/>
        • </Moviles>
        • <Fijos>
        • <TelefonoFijo Marca=&quot;Philips&quot; Modelo=&quot;3245&quot; SERIE=&quot;qeq543&quot; Color=&quot;Negro&quot; Inalambrico=&quot;No&quot;/>
        • </Fijos>
        • </Telefonos>
    • Ejercicios
      • Ejercicio 3
        • Sobre el siguiente supuesto escribir un documento XML que contenga datos de la estructura definida en la DTD que también deberá ser escrita:
          • El supuesto se basa en una empresa concesionario de coches y tenemos que controlar el stock de los coches que tenemos.
          • Entre los coches podemos encontrar de dos tipos nuevos y usados.
    • Ejercicios
          • Los nuevos son todos de la misma marca y por tanto estára definida por defecto.
            • De los nuevos no tenemos matricula pero si el número de serie del bastidor.
            • También es necesario el modelo.
            • La fecha de compra.
            • Segmento (utilitario, comercial, berlina, compacto)
            • Color
            • Tapiceria
            • Opciones (aa, Llantas, pintura metalizada, elevalunas, climatizador).
            • Código interno de identificación único
    • Ejercicios
          • Usados
            • Matricula
            • Número de serie del bastidor (opcional).
            • Marca
            • Modelo
            • Motor (gasolina, diesel)
            • La fecha de compra.
            • Año de fabricación.
            • Kilómetros
            • Segmento (utilitario, comercial, berlina, compacto)
            • Color
            • Tapicería
            • Opciones (aa, Llantas, pintura metalizada, elevalunas, climatizador).
            • Estado general (Muy bueno, bueno, regular, malo, muy malo)
    • Ejercicios
          • Usados
            • Categoria (km0, seminuevo, usado)
            • Ultimo Propietario
              • Nombre
              • Apellidos
              • Dirección
              • Poblacion
              • Provincia
              • Telefono
              • DNI
            • Código interno de identificación único
          • Todos los coches a su vez están situados en diferentes concesionarios
    • Ejercicios
          • Sobre los concesionarios es necesario almacenar la siguiente información
            • Nombre del concesionario
            • Dirección
            • Población
            • Provincia
            • Nombre del encargado de vehículos nuevos
              • Teléfono
            • Nombre del encargado de vehículos usados
              • Teléfono
            • Teléfono
    • Hojas de estilo
      • Los documentos XML pueden formateados mediante dos tipos de hojas de estilo:
        • CSS (Cascade StyleSheets)
        • XSL (XSLT)
    • Hojas de estilo CSS
      • Definen tipos de letra, tamaños, colores, etc...
      • Las hojas de estilo pueden ser declaradas de tres formas:
        • Mediante un archivo vinculado
        • Mediante el elemento <LINK> de HTML
        • Mediante una instrucción en XML
    • Hojas de estilo CSS
      • Tenemos varias posibilidades para definir un estilo: especificarlo directamente en la etiqueta en la que queremos usarlo, definirlo aparte y aplicarlo en las etiquetas que queramos, o definir estilos globales para las etiquetas (que podrán ser cambiados en las que no se desee aplicarlos).
      • Para aplicar un estilo a una etiqueta concreta, usaremos la sintaxis:
        • <etiqueta STYLE=&quot;propiedad1:valor;...;propiedadN:valor&quot;> ... </etiqueta>
      • Etiqueta es la etiqueta de HTML en la que queremos dar una apariencia concreta (<P>, <B>, <I>, ...). STYLE es el parámetro que indica que vamos a aplicar el estilo definido a continuación a la etiqueta en la que se encuentra. La definición del estilo son pares propiedad:valor separados por punto y coma. Propiedad será la característica de la etiqueta que queramos modificar (el color, el tamaño de la fuente, el tipo de letra, ...) y valor es el valor que queremos darle (color negro, 8 puntos de tamaño de letra, ...).
      • Por ejemplo, si tenemos un texto en negrita y queremos que salga con un tamaño de letra 14 y en color rojo, haremos:
        • <B STYLE=&quot;font-size:14pt;color:red&quot;>es más grande y está en rojo</B>
    • Hojas de estilo CSS
      • Si queremos definir estilos que se apliquen a todas las etiquetas del documento, es decir, queremos que todo el documento tenga un cierto tipo de letra, que las tablas tengan otro, que las cabeceras tengan un color determinado, para ello, definiremos estilos globales por medio de la etiqueta <STYLE> ... </STYLE>.
      • <STYLE TYPE=&quot;text/css&quot;> <!--    Etiqueta1, Etiqueta2 : {propiedad1:valor}    Etiqueta3 : {propiedad1:valor;...;propiedadS:valor}    Etiqueta4 : {propiedad1:valor;...;propiedadT:valor}    .Clase1 : {propiedad1:valor;...;propiedadT:valor} //--> </STYLE>
      • Se puede aplicar el mismo estilo a varias etiquetas, escribiéndolas separadas por comas y, a continuación, la especificación del estilo según pares propiedad:valor separados por punto y coma y encerrados entre llaves {}. En un bloque de estilo global podremos definir cuantos estilos queramos. Aparece un .Clase1; se refiere a las llamadas clases, que nos permitirán que una etiqueta concreta tenga una apariencia distinta a la definida como global.
    • Hojas de estilo CSS
      • Es recomendable que definamos estos estilos globales dentro de la cabecera del documento (entre <HEAD> ... </HEAD>) para asegurarnos de que se aplicarán a todas las etiquetas para las que se haya definido un estilo.
          • <HTML> <HEAD> <TITLE> Ejemplo con bloque de estilo </TITLE> <STYLE TYPE=&quot;text/css&quot;> <!-- BODY {font-family:Verdana,sans-serif;font-size:x-small; margin-left:0.25in; margin-right:0.25in} H2 {font-family:Verdana,sans-serif;font-size:14pt;color:red} B, TD {font-family:Verdana,sans-serif;font-size:x-small;color:olive} TH {font-family:Verdana,sans-serif;font-size:x-small; color:white;background-color:#0080C0} PRE, TT, CODE {font-family:Courier New,Courier;font-size:9pt;color:maroon} //--> </STYLE> </HEAD> <BODY BGCOLOR=white>
          • .....
          • </BODY>
          • </HTML>
    • Hojas de estilo CSS
      • Para definir una hoja de estilo externa al documento HTML, utilizaremos la sintaxis:
        • <LINK rel=“stylesheet” type=“text/css” href=“archivo.css”>
      • La escritura de la hoja de estilos interna y externa es la misma.
    • Hojas de estilo CSS
      • Sintaxis básica de la hoja de estilo para HTML
        • BODY
        • {
        • FONT-FAMILY: verdana;
        • COLOR: red;
        • FONT-SIZE: 20pt;
        • }
        • .miclase {FONT-FAMILY: arial;}
      Etiqueta a la que hace referencia Propiedades clase a la que hace referencia
    • Hojas de estilo CSS
      • Clases
        • Una clase es una definición de un estilo que en principio no está asociado a alguna etiqueta HTML, pero que podemos asociar, en el documento, a etiquetas concretas.
        • Para ello, en primer lugar definimos la clase (en el bloque de estilos o en la hoja externa) como un estilo más.
        • .Nombre_de_la_Clase {propiedad1:valor;...;propiedadN:valor}
        • Escribiendo un punto seguido del nombre que le queramos dar a la clase, y definiendo el estilo como lo definimos para cualquier otra etiqueta: propiedad:valor separados por punto y coma y encerrados entre llaves.
        • Para aplicar el estilo de una clase a una etiqueta concreta, utilizaremos el parámetro CLASS .
        • <etiqueta CLASS=&quot;Nombre_de_la_Clase&quot;> ... </etiqueta>
    • Hojas de estilo CSS
      • Propiedades Básicas
        • alignment
          • left / center / right / justify
          • Define la alineación horizontal.
        • background-attachment
          • fixed / scroll
          • Fijar la imagen de fondo.
        • background-color
          • (color)
          • Define el color de fondo  
        • background-image
          • (url)
          • Define una imagen de fondo.
        • backgrounnd-position
          • bottom / center / left / middle / right / top
          • Define la posición de la imagen de fondo
        • background-repeat
          • no-repeat / repeat / repeat-x / repeat-y
          • Modifica el efecto de mosaico del fondo.
    • Hojas de estilo CSS
        • border-color
          • (color)
          • Definir el color de un marco.
        • border-style
          • dashed / dotted / double / groove / inset / none / outset / ridge / solid
          • Definir el tipo de marco.
        • clip
          • h1 { clip:rect (10 x auto x 10 x auto) }
          • Limita el area de muestra  
        • color
          • (color)
          • Define el color de un elemento.
        • display
          • inline / block
          • Define el salto de línea automático.
        • font-family
          • (tipo de letra)
          • Define la familia de fuentes.
    • Hojas de estilo CSS
        • font-size
          • (tamaño) 12pt / 12%
          • Define el tamaño de la fuente.  
        • font-strech
          • ultra-condensed/extra-condensed/condensed/semi-condensed/normal/semi-expanded/expanded
          • /extra-expanded / ultra-expanded
          • Modifica el espacio entre caracteres de la fuente.  
        • font-style
          • normal / italic
          • Seleccionar el estilo de fuente normal o cursiva  
        • font-weight
          • normal / bold / bolder / light / lighter / 100-900
          • Define la intensidad de la fuente.  
        • letter-spacing
          • normal / (valor numerico)
          • Distancia entre las letras.  
        • line-height
          • (valor)
          • Define la altura de una línea de texto.  
    • Hojas de estilo CSS
        • margin-left
          • (valor numerico)
          • Define el margen izquierdo  
        • margin-right
          • (valor numerico) 
          • Define el margen derecho.
        • margin-top
          • (valor numerico)
          • Define el margen superior.
        • margin-bottom
          • (valor numerico)
          • Define el margen inferior.
        • padding-bottom
          • (valor numerico)
          • Indica la distancia inferior entre el borde y el elemento correspondiente.
        • padding-left
          • (valor numérico)
          • Indica la distancia izquierda entre el borde y  el elemento
    • Hojas de estilo CSS
        • padding-right
          • (valor numérico)
          • Indica la distancia derecha entre el borde y el elemento.
        • padding-top
          • (valor numérico)
          • Indica la distancia superior entre el borde y el elemento.
        • position
          • absolute / relative
          • Indica la posición absoluta o relativa de un texto o gráfico.
        • size
          • auto / landscape / portrait / (2 valores numericos)
          • Define el tamaño o posición de la página
        • text-align
          • align / left / right / center / justify
          • Define la alineación vertical del texto.
        • text-decoration
          • none / underline / overline / line-throught / blink
          • Decoración del texto. 
    • Hojas de estilo CSS
        • text-indent
          • (valor numerico)
          • Permite sangrar la primera línea de un párrafo.
        • text-shadow
          • (color) / none
          • Representar un texto con sombreado
        • text-transform
          • none / capitalize / unpercase / lowercase
          • Transformar el tamaño de las letras (mayúscula / minúscula).
        • word-spacing
          • normal / (valor numerico)
          • Define la distancia entre palabras.
        • z-index
          • (valor numerico)
          • Define la posición dentro de varias capas (cuando hay elementos que se superponen).
    • Hojas de estilo CSS
      • Ejemplo
      • /* Definición de estilos en un archivo aparte */ /* Estilo para el documento */ BODY {font-family:Verdana,sans-serif;font-size:x-small; margin-left:0.25in; margin-right:0.25in} /* Estilo para la cabecera de nivel 2 */ H2 {font-family:Verdana,sans-serif; font-size:14pt;color:red} /* Estilos para otras etiquetas */ B, TD {font-family:Verdana,sans-serif;font-size:x-small; color:olive} TH {font-family:Verdana,sans-serif;font-size:x-small; color:white;background-color:#0080C0} PRE, TT, CODE {font-family:Courier New,Courier; font-size:9pt;color:maroon}
    • Hojas de estilo CSS
      • Aplicar hojas de estilo CSS a documentos XML.
        • La declaración de los diferentes estilos se realiza exactamente igual que en el caso de HTML.
        • Las etiquetas a las que se aplica son las propias etiquetas del documento XML.
    • Hojas de estilo CSS
      • Aplicar hojas de estilo CSS a documentos XML.
        • Para hacer referencia al fichero externo CSS utilizamos la declaración:
        • <?xml-stylesheet type=“text/css” href=“archivo.css” ?>
      CSS
    • XSL
      • XSL por medio de XSLT (XSL Transformation) permite definir una presentación o formato para un documento XML.
      • Define una transformación entre un documento XML de entrada, y uno de salida.
      • Un documento XSL especifica como va a ocurrir la transformación
    • XSL
      • El documento final puede ser cualquier cosa (HTML, PDF, RTF, etc.) .
      • Cada regla se compone de un patrón (pattern) y una acción o plantilla (t emplate).
      • Existen varios procesadores de XSLT
        • IE5
        • Saxon ( http:// users.iclway.co.uk / mhkay / saxon )
        • Varios procesadores desarrollados en JAVA
      • La recomendación actual de W3C es:
        • Recommendation 16 noviembre 1999
        • http://www.w3c.org/TR/xslt
    • XSL
      • Elementos básicos de XSLT
        • <xsl:stylesheet>
          • Es el elemento raíz de la hoja de estilo XSL.
          • Contiene al resto de elementos de formato.
          • Es obligatorio.
        • <xsl:template>
          • Define el modelo que será aplicado a un nodo del documento XML al que está asociado.
            • Incluye tres atributos
              • Name (nombre asociado al modelo)
              • Match (nodo que será afectado por el modelo)
              • Mode (permite que un elemento tenga varios modelos)
    • XSL
        • <xsl:apply-templates>
          • Indica al procesador XSL que busque el modelo apropiado para aplicar a cada elemento hijo.
          • Tiene dos atributos
            • SELECT (selecciona el nodo al que será aplicado el modelo).
            • MODE (selecciona el modelo que será aplicado)
        • <xsl:value-of>
          • Permite insertar el valor de un nodo.
          • Puede ser un elemento o un atributo.
          • Tiene dos atributos
            • SELECT (especifica el nodo o atributo del que será extraido el valor)
            • Disable-output-escaping (yes/no, si verdadero inserta &lt; “<“)
    • XSL
        • <xsl:for-each order-by=”....” select=”...”> </xsl:for-each>
          • Crea un bucle para aplicar distintos valores de un nodo.
          • atributos
            • SELECT (el nodo que se utilizará para el bucle)
            • ORDER-BY (Al hacer el bucle ordena por el valor del nodo.
    • XSL
        • <xsl:attribute name=”...”> </xsl:attribute> 
          • Crea un atributo dentro del documento XSL. 
        • <xsl:element name=”....”> </xsl:element> 
          • Crea un elemento dentro del documento XSL.
    • XSL
        • <xsl:if test=”.....”> </xsl:if>  
          • Crea un condicional (la condición se sitúa en el valor del atributo “test”). El siguiente ejemplo pondría color a una tabla, fila si, fila no con el color amarillo. 
        • <xsl:template match=&quot;elemento1&quot;>
        • <tr>
          • <xsl:if test=&quot;position() mod 2 = 0&quot;>
            • <xsl:attributename=&quot;bgcolor&quot;>yellow</xsl:attribute>
          • </xsl:if>
        • <xsl:apply-templates/>
        • </tr>
        • </xsl:template>
    • XSL
        • <xsl:choose> </xsl:choose> 
          • Crea un condicional del tipo “Case” donde mediante la sentencia <xsl:when test=”....”> </xsl:when> establecemos las distintas opciones de la sentencia condicional. 
        • <xsl:choose>
          • <xsl:when test=”...”> </xsl:when> 
          • <xsl:when test=”...”> </xsl:when> 
          • <xsl:when test=”...”> </xsl:when> 
        • </xsl:choose>
    • XSL
          • También dentro del elemento choose podemos encontrar el elemento <xsl:otherwise> </xsl:otherwise> para referirnos a las opciones que no coincidan con ninguna de las condiciones contenidas en el elemento “choose”.
          • <xsl:choose>
            • <xsl:when test=”...”> </xsl:when> 
            • <xsl:when test=”...”> </xsl:when> 
            • <xsl:when test=”...”> </xsl:when> 
            • <xsl:otherwise> </xsl:otherwise> 
          • </xsl:choose>
    • XSL
      • El elemento stylesheet.  
        • <xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;>   
        • </xsl:stylesheet>
        • El elemento “stylesheet” es el elemento raíz de una hoja de estilo XSLT, es decir todas las hojas de estilo XSLT deben comenzar con <xsl:stylesheet> y terminar con </xsl:stylesheet> dentro del elemento “stylesheet” también definimos mediante atributos la versión de XSL con la que estamos trabajando así como la URI de lo que llamamos “namespace” (definición de las reglas semánticas y sintácticas redactadas por el consorcio a las que hace referencia el analizador de XSL), de todas maneras es opcional hacer referencia al “namespace”. 
        • Al igual que cualquier documento XML todos los elementos que formen parte de la hoja de estilo deben partir de su elemento raíz en este caso <xsl:stylesheet>.
        • También podremos encontrar el ejemplo anterior de esta otra forma:  
          • <xsl:transform version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;>   
          • </xsl:transform> 
        • En este caso los dos ejemplos son iguales y perfectamente válidos ya que <xsl:stylesheet> tiene el mismo significado que <xsl:transform> para el analizador.
    • XSL
      • El elemento xsl:stylesheet puede contener cualquiera de los siguientes elementos entre otros:
        •           xsl:import
        •           xsl:include
        •           xsl:strip-space
        •           xsl:preserve-space
        •           xsl:output
        •           xsl:key
        •           xsl:decimal-format
        •           xsl:namespace-alias
        •           xsl:attribute-set
        •           xsl:variable
        •           xsl:param
        •           xsl:template
      • Estos elementos son también llamados elementos “top-level”.
    • XSL
      • <xsl:stylesheet version=&quot;1.0“ xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;> 
      • <xsl:import href=&quot;...&quot;/>
      • <xsl:include href=&quot;...&quot;/>
      • <xsl:strip-space elements=&quot;...&quot;/>
      • <xsl:preserve-space elements=&quot;...&quot;/>
      • <xsl:output method=&quot;...&quot;/>
      • <xsl:key name=&quot;...&quot; match=&quot;...&quot; use=&quot;...&quot;/>
      • <xsl:decimal-format name=&quot;...&quot;/>
      • <xsl:namespace-alias stylesheet-prefix=&quot;...&quot; result-prefix=&quot;...&quot;/>
      • <xsl:attribute-set name=&quot;...&quot;> ... </xsl:attribute-set>
      • <xsl:variable name=&quot;...&quot;>...</xsl:variable>
      • <xsl:param name=&quot;...&quot;>...</xsl:param>
      • <xsl:template match=&quot;...&quot;> ... </xsl:template>
      • <xsl:template name=&quot;...&quot;> ... </xsl:template>
      • </xsl:stylesheet>
    • XSL
      • El orden en el que los elementos “top_level” sean declarados no es significante y es transparente para los analizadores.
    • XSL
      • <xsl:value-of select>
        • Existe también una sintaxis simplificada para aquellas hojas de estilo que tengan como función tan lo extraer valores a partir del elemento raíz del documento XML. Para ello utilizamos la etiqueta <xsl:value-of select> tal como podemos ver en el ejemplo:  
        • <xsl:version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot; xmlns=&quot;http://www.w3.org/TR/xhtml1/strict&quot;>
        • <html>
        • <head>
        • <title>Informe Resumen de Gastos</title> </head>
        • <body>
        • <p>Total Gastos: <xsl:value-of select=&quot;informe-gastos/total&quot;/></p>
        • </body>
        • </html>
    • XSL
      • En el ejemplo podemos observar en primer lugar como estamos ya insertando HTML
      • dentro de la hoja de estilo y como entre el código HTML podemos encontrar los
      • elementos XSL como el elemento <xsl:value-of select=&quot;informe-gastos/total&quot;/> que es
      • el encargado de extraer del documento XML el valor correspondiente al elemento
      • “ informe-gastos/total” , por supuesto hacemos referencia a determinado valor
      • utilizando las reglas semánticas del lenguaje XPATH.
      • El ejemplo anterior también podríamos haberlo realizado de esta otra forma:  
          • <xsl:stylesheet version=&quot;1.0&quot;xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Trans form&quot;xmlns=&quot;http://www.w3.org/TR/xhtml1/strict&quot;> 
          • <xsl:template match=&quot;/&quot;>
          • <html>
          • <head>
          • <title> Informe Resumen de Gastos </title> </head>
          • <body>
          • <p>Total Gastos: <xsl:value-of select=&quot;informe-gastos/total&quot;/></p>
          • </body>
          • </html>
          • </xsl:template>
          • </xsl:stylesheet>
    • XSL
      • La principal diferencia entre los dos ejemplos se centra como puede verse
      • en la existencia en el segundo del elemento <xsl:template> que tiene como
      • función situarse en un determinado nodo de la estructura del documento
      • XML mediante el atributo “match” en el ejemplo <xsl:template match=&quot;/&quot;> el
      • analizador se situará en el nodo raíz del documento XML, para a partir de
      • ahí mediante el elemento <xsl:value-of select= “....”/> extraer los valores de
      • los elementos.
    • XSL
      • Ejemplo 1 – el fichero XML
        • <?xml version =“1.0” encoding=“UTF-7”?> <?xml-stylesheet href =“links1.xsl” type=“text/xsl”?> <links> <item href=“http://www.microsoft.com” title=“Micosoft”/> <item href=“http://www.dell.com” title=“Dell”/> </links>
    • XSL
      • Ejemplo 1 – el fichero XSL
        • <?xml version =“1.0” encoding=“UTF-7”?> <xsl:stylesheet xmlns:xsl =“http://www.w3.org/TR/WD-xsl”> <xsl:template match=“/”> <UL> <xsl:for-each select=“links/item”> <LI><A> <xsl:attribute name=“href”> <xsl:value-of select =./ @href / > </xsl:attribute> <xsl:value-of select= ./ @title /> </A></LI> </xsl:for-each> </UL> </xsl:template> </xsl:stylesheet>
    • XSL
          • En el documento XML no encontramos con varios elementos “item” que se repiten
          • y que contienen distintos valores, si lo que pretendemos es que la hoja de estilo
          • muestre los distintos valores hemos de realizar un bucle para que el navegador
          • lea los distintos valores del elemento, tal como vemos:
      •   < xsl:for-each select=“links/item &quot;>
      • <b>< xsl:value-of select =./ @href / > </b>< br/>
      • </xsl:for-each>  
      • En el ejemplo podemos ver como creamos un bucle con la sentencia “for each” del
      • elemento “ links/item . En la sentencia anterior habíamos hecho un
      • “ template match=/” que nos situaba en la raíz del árbol del documento
      • XML, por tanto al realizar el bucle debemos situarnos en el nodo correcto
      • del árbol.
      • Tal como vemos en el ejemplo para hacer referencia al valor de un atributo
      • utilizamos la “@”.
    • XPATH
      • Como nos movemos por los nodos en el documento XSL.
        • El Lenguaje XPATH es una sintaxis que nos ayuda a construir cadenas de texto para localizar determinados recursos dentro de documentos XML.
        •   Usamos el lenguaje XPATH cuando queremos hacer referencia a determinado contenido de un elemento en un documento XML. 
        • La base de la utilización del lenguaje XPATH se centra en la estructura en árbol de los elementos de un documento XML y como estos elementos mantienen entre sí una relación jerárquica. Cada elemento representa una estructura jerárquica de elementos por sí mismo.
        • XPATH no es ni más ni menos que un conjunto de reglas semánticas para representar la estructura jerárquica de un determinado elemento. XPATH puede recordarnos a la manera de moverse por los directorios que se utiliza en UNÍX o MSDOS.
    • XPATH
      • Veamos un ejemplo:
      • Select=”monitor”
      • En este ejemplo se indica al analizador que seleccione el elemento, o elementos “monitor” pero tenemos que tener en cuenta que solo seleccionará el elemento “monitor” que dependa directamente del elemento en el cual estamos situados en este mismo momento. En el siguiente documento:
      •     <?xml version=”1.0”?>
          • <!DOCTYPE [
          • <!ELEMENT monitores (monitor)*>
          • <!ELEMENT monitor (#PCDATA)>
          • <!ATTLIST monitor marca CDATA #REQUIRED>
          • ]>
          • <monitores>
          • <monitor marca=”Fujitsu”> 23456723 </monitor>
          • </monitores>
      • Si estamos situados en el elemento raíz “monitores” entonces si encontrará el elemento “monitor” pero si estamos situados en el elemento “monitor” no encontrará ningún elemento “monitor” ya que el elemento monitor no posee ningún subelemento.
    • XPATH
      • Como señalamos anteriormente el XPATH es un lenguaje que guarda un gran parecido con el URI (Universal Resource Identifier) así si queremos hacer referencia a un elemento contenido dentro de otro elemento utilizaremos la “/” tal como lo hacemos en URI.
      • <?xml version=”1.0”?>
        •   <!DOCTYPE [
        • <!ELEMENT perif (monitores,impresoras)>
        • <!ELEMENT monitores (monitor)*>
        • <!ELEMENT monitor (#PCDATA)>
        • <!ATTLIST monitor marca CDATA #REQUIRED>
        • <!ELEMENT impresoras (impresora)*>
        • <!ELEMENT impresora (#PCDATA)>
        • <!ATTLIST impresora marca CDATA #REQUIRED>
        • ]>
        • <perif>
        •   <monitores>
        • <monitor marca=”Fujitsu”> 23456723 </monitor>
        • </monitores>
        •   <impresoras>
        • <impresora marca=”Epson”> 2345674423 </impresora>
        • </impresoras>
        • </perif>
      •    Así en el ejemplo mostrado si estamos situados en la raíz del documento XML y queremos referirnos al contenido
      • de impresora lo haremos de la siguiente manera:
      • Select=”impresoras/impresora”
    • XPATH
      • Pero XPATH además nos brinda la posibilidad de referirnos a determinada repetición de un elemento concreto de un documento XML.
      • Así si el documento XML fuera como el que sigue:
      •  
        •   <?xml version=”1.0”?>
        • <!DOCTYPE [
        • <!ELEMENT perif (monitores+,impresoras+)>
        • <!ELEMENT monitores (monitor)*>
        • <!ELEMENT monitor (#PCDATA)>
        • <!ATTLIST monitor marca CDATA #REQUIRED>
        • <!ELEMENT impresoras (impresora)*>
        • <!ELEMENT impresora (#PCDATA)>
        • <!ATTLIST impresora marca CDATA #REQUIRED>
        • ]>
    • XPATH
        • <perif>
        •   <monitores>
        • <monitor marca=”Fujitsu”> 23456723 </monitor>
        • </monitores>
        •   <impresoras>
        • <impresora marca=”Epson”> 2345674423 </impresora>
        • </impresoras>
        •   <impresoras>
        • <impresora marca=”Nec”> 234474423 </impresora>
        • <impresora marca=”Hp”> 23456785674423 </impresora>
        • </impresoras>
        •   <impresoras>
        • <impresora marca=”Epson”> 25674423 </impresora>
        • <impresora marca=”Nec”> 234114423 </impresora>
        • <impresora marca=”HP”> 234567113 </impresora>
        • <impresora marca=”Lexmark”> 5674423 </impresora>
        • </impresoras>
        • </perif>
      •   Con esta sentencia XPATH
      •   Select=”impresoras[3]/impresora[2]”
      •   Estaríamos haciendo referencia al segundo elemento impresora contenido en el tercer elemento impresoras y el contenido resultante sería: “234114423”
    • XPATH
      • Debemos tener en cuenta que XPATH no es un lenguaje para efectuar consultas (querys), XPATH es un lenguaje que permite al procesador de XSLT obtener los contenidos de los diferentes elementos de un documento XML.
      • Por último no olvidemos nunca que nos movemos por una estructura jerárquica de elementos.
      • A continuación definiremos los distintos patrones que pueden ser utilizados en XPATH 
        •   /
          • Especifica el hijo inmediato, también puede ser utilizado para referirse al elemento raíz.
        • //
          • Selecciona a cualquier nivel dentro de la estructura de árbol.
        • .
          • Selecciona el nodo actual.
        • *
          • Selecciona todos los elementos del nodo actual.
        • @
          • Selecciona un atributo especifico.
        • @*
          • Selecciona todos los atributos del nodo actual.
    • XPATH
      • Funciones XPath más comunes
        • number last()
          • Devuelve la posición del ultimo elemento del documento.  
        • number position()
          • Devuelve la posición del elemento del documento en esa iteración.  
        • number count()
          • Devuelve el número de nodos existentes el nodo especificado.  
        • string local-name(node-set)
          • Devuelve el nombre del nodo seleccionado, o el nombre del primer nodo creado en el documento.
        • string concat(cadena1, cadena2, [cadena3, [cadena4], ...])
          • Devuelve la concatenación de los argumentos.  
        • boolean starts-with(cadena1, cadena2)
          • Devuelve true si el cadena1 comienza con los caracteres del cadena2.
        • boolean contains(cadena1, cadena2)
          • Devuelve true si el cadena1 contiene el cadena2.
        • string substring-before(cadena1, cadena2)
          • Devuelve el substring de la cadena1 que ocurre antes de que se encuentre la cadena2. Si la cadena1 no contiene a la cadena2 devolverá una cadena vacía.
        • string substring-after(cadena1, cadena2 )
          • Devuelve el substring de la cadena1 que ocurre después de que se encuentre la cadena2. Si la cadena1 no contiene a la cadena2 devolverá una cadena vacía.
    • XPATH
        • string substring(cadena1, inicio, [longitud])
          • Devuelve el substring de la cadena 1 desde la posición de inicio con la longitud que se le indique. Si no se indica la longitud cogerá hasta el final de la cadena.
        • number string-length(cadena1)
          • Devolverá el tamaño de la cadena seleccionada.  
        • string normalize-space(cadena1)
          • Devuelve la cadena1 eliminando los espacios en blanco múltiples, dejándolos como un espacio único.  
        • string translate(cadena1, cadena2, cadena3)
          • Devuelve la cadena1 con los caracteres de la cadena2 sustituidos por los de la cadena3.
    • http://www.hermenegildoromero.com Hermenegildo Romero [email_address]