XML

Introducción HTML5 HTML (Hypertext Markup Language) es un lenguaje de marcado. Sirve para definir la estructura y la se

Views 377 Downloads 3 File size 4MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Introducción HTML5

HTML (Hypertext Markup Language) es un lenguaje de marcado. Sirve para definir la estructura y la semántica de nuestra página web. Fue creado y es mantenido por W3C (World Wide Web Consortium) HTML: etiquetas Las etiquetas sólo pueden ser de dos tipos: 1.Las que tienen una apertura y un cierre Ejemplo: Contenido Google Tenemos un elemento a donde el valor del atributo href es http://www.google.com, qué su contenido es Google

y

Las etiquetas están siempre contenidas entre y el cierre sólo incluye el nombre del elemento precedido de la barra “/”. Ejemplo las etiquetas siempre están contenidas entre los símbolos < > 2. Elementos autocontenidos (no se cierran explícitamente)

Ejemplos de etiquetas Ejemplos de etiquetas en HTML5 elemento: html, head, meta, title, body, img… atributo: charset, src, alt, … valor: UTF-8, "url" (la URL a un recurso), "texto",



Anidación de etiquetas

Título de la página

La etiqueta head es el padre de la etiqueta title y meta. La etiqueta title y meta son hijas de la etiqueta head. Orden

de apertura

y

cierre

Cuando se anidan etiquetas, la primera etiqueta en cerrarse tiene que ser la última que se abrió.

El orden es muy importante

La forma correcta de hacerlo sería:

El orden es muy importante



Otros aspectos No todas las etiquetas son anidables entre sí; por ejemplo: una etiqueta body no puede contener una etiqueta head. Es muy importante añadir la sangría en el código para distinguir entre las etiquetas. No existe un límite máximo de anidamiento. Estructura

básica

de

una

página

Estructura inicial



Título de la página

Estructura

básica

de

una

página

: indicar al navegador que el código HTML en el que está escrita la página es en la versión 5, osea que es HTML5. ... : indica la raíz del documento y todas las etiquetas deben estar incluidas dentro. Además, especifica del idioma. ... :se usa para envolver otras etiquetas que ofrecen información principalmente a: al navegador, a los buscadores y a otras páginas (como pueden ser redes sociales, etc). La información especificada dentro del head no se muestra dentro de la página web que ve el usuario. ... :se usa para envolver otras etiquetas que ofrecen información principalmente a: al navegador, a los buscadores y a otras páginas (como pueden ser redes sociales, etc). La información especificada dentro del head no se muestra dentro de la página web que ve el usuario. : le indica al navegador qué tipo de caracteres contiene la página. ... : indica el título de nuestra página. Este se muestra en la pestaña del navegador.

...

: contiene todo el contenido visible por el usuario.

Etiquetas básicas

: representa un párrafo.
: representa un salto de línea.
    : representa una lista, en donde el orden de los elementos no es importante. : representa una lista de elementos, donde el orden de los elementos es importante.
  • : representa un elemento de la lista y su padre siempre tiene que ser una etiqueta ol o ul. : representa algo muy importante , serio (para avisos o precauciones) o urgente (qué debe ser leído antes).

    podrá ver.

    : :

    sirve para enfatizar contenido.

    se utiliza para añadir comentarios dentro del código qué el usuario no

    Resumen h1 = heading1; h2 = heading 2; p = paragraph br = break line ul = unordered list ol = ordered list li = list item em = emphasis

    ...

    XML (Extensible Markup Language)

    XML es un lenguaje que permite definir lenguajes de marca adecuados a un tipo específico de contenido. XML resuelve los siguientes problemas de HTML Problemas de HTML  

     

    Distinta apariencia según versión o tipo de navegador. En ocasiones se usa como lenguaje de formato (presentación) en vez de lenguaje para definir contenidos, se indica cómo se representa la información, no lo que realmente es. Sólo se le da un uso: páginas web. Resulta insuficiente a la hora de definir contenidos

    HTML / XML

    La segunda versión del documento tiene más significado, es más interpretable al haber usado un lenguaje cercano al tipo de contenido. Ventajas de XML         

    Fácilmente procesable por máquinas y humanos. Separa la información (contenido) de su presentación (formato). Definiendo distintas presentaciones, un mismo documento puede visualizarse de distintas formas. Formato ideal para transacciones B2B (business-to-business). Permite técnicas de extracción de información y minería de datos. Las estrictas reglas para la composición de un documento XML permite su fácil análisis sintáctico Los lenguajes específicos basados en XML son llamados vocabularios. Se definen mediante un DTD (Document Type Definition) o un Schema, describiendose en éstos los elementos, atributos, modelos de contenido y entidades que componen el vocabulario XML

    XML para circuito

    El vocabulario se ha llamado electrónica, y está compuesto por los elementos {circuito, descripción, generador, resistencia, condensador, inductancia}. Haciendo uso de este vocabulario, se crea el documento propuesto Declaración y XML-prólogo

    XML-elementos Los elementos XML pueden tener contenido (más elementos, caracteres o ambos a la vez) o bien ser elementos vacíos. Siempre empieza con (puede contener atributos) y termina con .

    XML-atributos   

    Los elementos pueden tener atributos. Es una manera de incorporar propiedades a los elementos de un documento. Los atributos están delimitados con comillas dobles (“) o comillas simples ('). Un elemento con contenido puede modelarse como un elemento vacío con atributos.

    Secciones CDATA Permiten especificar datos utilizando cualquier carácter. Tienen la característica de no ser interpretados como marca XML. Empiezan por "". Las secciones no se pueden anidar

    XML-documentos bien formados      

    Los elementos existentes en un documento XML deben seguir una estructura estrictamente jerárquica, cumpliendo una serie de reglas: Sólo puede existir un elemento raíz. Los elementos deben estar correctamente anidados. Los elementos no pueden solaparse entre ellos. Deben estar correctamente cerrados. Los valores de los atributos deben ir entre comillas. Se puede usar comilla simple (‘) si el valor contiene comillas dobles (“).

    XML trata a las mayúsculas y las minúsculas como caracteres diferentes Ejemplos

    DTD (Definición de tipo de documento) La definición de tipo de documento o DTD se usa para construir un lenguaje XML. Contiene un conjunto de reglas sintácticas que definen los elementos, atributos y cómo se relacionan. Presentan un problema: este documento no está formado por elementos pertenecientes a un vocabulario XML, no siguen una sintaxis propia de XML. Por ello se plantea una propuesta alternativa a ellos, los denominados Schemas. DTD Los DTD pueden residir en un fichero externo, o estar contenidos en el propio documento XML. No es obligatorio que un documento XML lleve asociado un DTD. Todo documento XML que se ajusta a su DTD se denomina documento válido. Sin DTD Aquellos documentos que no tienen DTD no son válidos, esto no quiere decir que no sea correcto o bien formado.

    Con DTD

    DTD

    Espacios de nombres   

    Los espacios de nombres se definen cuando se usan elementos que pertenecen a distintos vocabularios en un mismo documento XML. La aplicación que procesa el documento debe soportarlos. Un escenario donde se usan es en las transformaciones XSLT.

    Espacio de nombres ● ●

    Para definir un espacio de nombres hay que añadir el prefijo "xmlns".

    No existe conflicto cuando un documento usa un nombre de elemento que existe en los XSD o DTD referenciados. Un nombre de elemento puede tener varias definiciones, para ello se pueden definir varios prefijos En el siguiente ejemplo, el elemento pertenece a dos vocabularios distintos:

    DTD y XML SCHEMA DTD DTD - Document Type Definition.  Define la gramática a seguir en el documento  XML para que éste sea considerado como válido.  Puede incluirse en un fichero externo al XML, y/o  incluirse dentro del propio fichero XML. DTD. Declaración de tipo (i)

    DTD. Declaración de tipo (ii)

    DTD. Elemento raíz  

    Toda DTD debe tener uno y sólo un elemento raíz (también conocido como elemento documento). Este elemento raíz debe coincidir con el nombre que aparece a continuación del DOCTYPE.

    DTD. Contenido Un documento DTD puede contener: • Declaraciones de elementos. • Declaraciones de atributos para un elemento. • Declaraciones de entidades. • Declaraciones de notaciones. • Instrucciones de procesamiento. • Comentarios. • Referencias a entidades de parámetro. DTD. Elementos (i) A partir del elemento raíz, pueden opcionalmente colgar (de forma jerárquica) otros elementos.

    DTD. Elementos (ii) Contenido de un elemento: • EMPTY: El elemento está vacío (puede contener atributos). Ej.: • ANY: El elemento puede almacenar cualquier tipo de contenido. Ej.: • Otros elementos: Un elemento puede contener uno o más elementos hijos en una cierta secuencia. Ej.: • #PCDATA: Texto a procesar por el parser. Ej.: • Mixto: el elemento puede incluir secuencias de caracteres opcionalmente mezcladas con elementos hijos. DTD. Elementos (iii) Secuencias de hijos de un elemento: • Secuencia: – Secuencia en orden: hijos separados por comas. – Opciones: hijos separados por | (barra) – Conjuntos de elementos pueden agruparse entre paréntesis. • Cardinalidad: un elemento, o un conjunto de ellos puede repetirse 0, 1 ó más veces: – elemento Elemento repetido 1 única vez –? Elemento repetido 0 ó 1 vez –* Elemento repetido 0 ó más veces –+ Elemento repetido 1 ó más veces

    DTD. Elementos (iv)





    DTD. Atributos (i)   

    Un elemento puede opcionalmente declarar uno o más atributos • Los atributos de un elemento pueden incluirse en una o más declaraciones . Si se hace en la misma declaración, basta con separar con un espacio (espacio, tabulador, retorno de carro).

    DTD. Atributos (ii) Tipo cadena: CDATA

    • Tipo enumerado:

    • Tipo simbólico: – ID: valdrá como identificador en el resto del documento, sólo un atributo ID por cada elemento. – IDREF, IDREFS: su valor debe coincidir con algún otro atributo de tipo ID en el resto del documento XML. IDREFS separa las referencias por espacio. Ej.: “ID1 ID2 ID3”. – ENTITY, ENTITIES: su valor debe coincidir con una o más entidades no analizadas. – NMTOKEN, NMTOKENS: su valor ha de ser una cadena de tipo token. Ej.: DTD. Atributos (iii) Modificadores: • #REQUIRED: Este atributo debe introducirse obligatoriamente. Ej.: • #IMPLIED: Indica que el atributo es opcional. • ValorPredeterminado: Si se omitiese el atributo, los procesadores recogerían este valor por omisión. Ej.: • #FIXED: se incluya o no se incluya el atributo, los procesadores siempre obtendrán este mismo valor

    DTD. Problemas       

    Una DTD no sigue el formato de un documento XML estándar. Esto representa un problema para los parsers. No se soportan distintos tipos de datos al estilo de los lenguajes de programación. No se pueden crear tipos de datos personalizados. No se soportan los espacios de nombres. El número de ocurrencias no se puede controlar al 100%. Por estas y otras razones, surgen los Schemas (Esquemas) XML.

    XML Schema     

    XML Schema es una alternativa más potente a las DTDs. XML Schema permite escribir esquemas detallados para documentos XML, utilizando la sintaxis estándar de XML. XML Schema describe la estructura de un documento XML. El lenguaje XML Schema también se denomina XML Schema Definition (XSD).

    ¿Para que sirve un XML Schema? El objetivo de un XML Schema es definir los elementos que permiten construir un documento XML válido, igual que las DTDs. Un XML Schema define: • los elementos que pueden aparecer en un documentos • atributos que pueden aparecer en un documento • qué elementos son elementos hijos • el orden de los elementos hijos • el número de elementos hijos • si un elemento está vacío o puede incluir texto • los tipos de datos de sus elementos y atributos • los valores por defecto y fijos para elementos y atributos XML Schema es el sucesor de DTD´s En un futuro, los XML Schema serán utilizados en la mayoría de las aplicaciones Web y reemplazarán a las actuales DTDs: • Los XML Schemas son extensibles. • Los XML Schemas son más ricos semánticamente que las DTDs. • Los XML Schemas están escritos siguiendo la sintaxis estándar de XML. • Los XML Schemas soportan tipos de datos. • Los XML Schemas soportan namespaces. XML Schema es un estándar de W3C

    XML Schema soporta tipos de datos La característica mas importante de los XML Schemas es que soportan tipos de datos. Los tipos de datos permiten: • describir qué elementos están permitidos • validar si los datos son correctos • trabajar con los datos de una base de datos • definir Facets (restricciones) • definir patrones de datos (formatos) • convertir datos considerando diferentes tipos de datos XML Schema utiliza sintaxis de XML Otra característica importante de los XML Schemas es que están escritos en XML. Beneficios: • No hay necesidad de aprender un lenguaje nuevo. • Se puede utilizar un editor de XML para editar el XML Schema. • Se puede utilizar un procesador de XML para procesar un XML Schema. • Se puede manipular un XML Schema utilizando XML DOM. • Se puede transformar un XML Schema utilizando XSLT. Transmisión de datos sin ambigüedad   

    Cuando se transmite información desde un emisor a un receptor, es necesario que ambas partes conozcan el mismo protocolo de comunicación. Con XML Schemas, el emisor puede describir los datos de manera que el receptor lo entienda. Una fecha como: "03-11-2006", dependiendo del país, puede ser interpretada como "3 de noviembre" y en otros países como "11 de marzo".

    Con lo cual, al definir un elemento de la siguiente manera: • 2006-03-11 se asegura un mutuo entendimiento sobre el contenido, porque el tipo de dato “date” requiere el formato “YYYY-MMDD”. Los XML Schema son extensibles  

    Los XML Schemas son extensibles porque están escritos en XML. Con una definición de XML Schemas extensible se podrá: • reutilizar el Schema en otros Schemas • crear tipos de datos propios derivados de los tipos estándar • referenciar varios Schemas en el mismo documento

    No es suficiente que el XML Schema esté bien formado Un documento XML bien formado es un documento que cumple las reglas sintácticas de XML como: • Empezar con la declaración XML. • Tener un único elemento raíz. • Las etiquetas de apertura deben tener sus correspondientes etiquetas de cierre. • Los elementos son “case-sensitive”. • Todos los elementos deben cerrarse. • Todos los elementos tienen que estar adecuadamente anidados. • Los atributos deben estar entre comillas. • Se deben utilizar las entidades para utilizar caracteres especiales. A pesar de que los documentos estén bien formados pueden seguir teniendo errores.

    Ejemplo XML Schema

    Referencia a un XML Schema Cómo se referencia un archivo XML Schema desde un documento XML.

    XML Schema. Elemento raíz El elemento es el elemento raíz (elemento documento) de todo XML Schema:

    XML Schema. Elementos simples (i)    

    Un elemento simple es un elemento XML que sólo puede contener texto. No puede contener ni elementos ni atributos. Sin embargo, la restricción "sólo texto" no es del todo cierta. El texto puede contener muchos tipos de datos. Puede ser de uno de los tipos incluidos en la definición de XML Schema (boolean, string, date, etc.), o puede ser de un tipo definido por el usuario. Además, se pueden añadir restricciones (facets) a los tipos de datos, para limitar así su contenido, o para requerir que ciertos datos sean conformes a un patrón específico.

    XML Schema. Elementos simples (ii) La sintaxis de un elemento simple es: donde xxx es el nombre del elemento e yyy es el tipo de datos del elemento. Los tipos de datos más comunes en XML Schema son: • xs:string • xs:decimal • xs:integer • xs:boolean • xs:date XML Schema. Elementos simples (iii)

    XML Schema. Elementos simples (iv)  

    Se pueden especificar valores por defecto o valores fijos para los elementos simples. Se asignará automáticamente el valor por defecto si no se especifica otro valor para el elemento.



    Se asignará automáticamente un valor para el elemento, pero en este caso, dicho valor no puede ser modificado

    XML Schema. Atributos (i)   

    Los elementos simples no pueden tener atributos. Un elemento con atributos será considerado un tipo complejo (complex type). Sin embargo, los atributos se definen como un tipo simple

    donde xxx es el nombre del elemento e yyy es el tipo de datos del atributo. XML Schema. Atributos (ii) Código en XML:

    Código en XML Schema:

    XML Schema. Atributos (iii)  

    Se pueden especificar valores por defecto o valores fijos para los atributos. Se asignará automáticamente el valor por defecto si no se especifica otro valor para el atributo.



    Se asignará automáticamente un valor para el atributo, pero en este caso, dicho valor no puede ser modificado

    Por defecto los atributos son opcionales, pero se puede hacer que éstos sean requeridos

    XML Schema. Restricciones (i) Las restricciones en XML Schema se denominan “FACETS”

    XML Schema. Restricciones (ii) Para limitar el contenido de un elemento XML a un conjunto de valores, se utilizará la restricción enumeration.

    XML Schema. Restricciones (iii) Otra alternativa:

    XML Schema. Restricciones (iv) Para limitar que el contenido de un elemento XML solo pueda tener una serie de números o letras se deberá utilizar la restricción pattern.

    XML Schema. Restricciones (v) Los únicos valores permitidos son tres letras de la ‘a’ a la ‘z’ escritas en mayúscula.

    Los únicos valores permitidos son tres letras de la ‘a’ a la ‘z’ escritas en mayúscula o en minúscula:

    El único valor permitido es una de las siguientes letras: ‘x’, ‘y’, o ‘z’:

    Los únicos valores permitidos son cinco dígitos comprendidos entre ‘0’ y ‘9’:

    XML Schema. Restricciones (vi) Los únicos valores permitidos son cero o más ocurrencias de letras en minúscula desde la ‘a’ a la ‘z’:

    Los únicos valores permitidos son una o más ocurrencias de dos letras. En cada par de letras, la primera irá en minúscula y la segunda en mayúscula. Por ejemplo, "sToP" sería validado por el patrón, pero no "Stop“, "STOP“ ó "stop":

    Los únicos valores permitidos son exactamente ocho caracteres, donde esos caracteres pueden ser letras minúsculas, letras mayúsculas o un dígito del 0 al 9:

    XML Schema. Restricciones (vii) Para especificar como se van a tratar los caracteres en blanco, se utilizará la restricción whiteSpace

    XML Schema. Restricciones (viii)

    Si se desea que XML elimine todos los espacios en blanco; LF, CR, tabulaciones, los espacios de principio y de final de cadena, y los espacios intermedios (dejando para este caso sólo uno):

    XML Schema. Restricciones (ix)

    XML Schema. Restricciones (x)

    XML Schema. Elementos complejos (I) Un elemento complejo es un elemento XML que puede tener más elementos y/o atributos. Hay cuatro clases de elementos complejos: • Elementos vacíos. • Elementos que contienen otros elementos. • Elementos que contienen sólo texto. • Elementos que contienen ambos: otros elementos y texto. Nota: Cada uno de estos elementos pueden contener atributos.

    XML Schema. Elementos complejos (ii) Elemento XML complejo vacío:

    Elemento XML complejo que contiene sólo otros elementos:

    Elemento XML complejo que contiene sólo texto:

    Elemento XML complejo que contiene ambos (texto y otro elementos):

    XML Schema. Elementos complejos (iii) Se puede definir un elemento complejo en XML Schema de dos formas distintas : 1. El elemento “empleado" se puede declarar directamente nombrando el elemento :

    XML Schema. Elementos complejos (iv) 2. El elemento “empleado" se puede declarar directamente nombrando el elemento :

    Usando este método, muchos elementos se pueden referir a la misma definición de tipo complejo

    XML Schema. Elementos complejos (v) Además, se puede describir un elemento complejo basándose en otro elemento complejo añadiendo más elementos:

    XML Schema. Elementos complejos vacíos Definición en XML Schema

    XML Schema. Elementos complejos con sólo elementos La etiqueta indica que los elementos definidos deben aparecer en el orden descrito dentro del elemento “persona”.

    Elementos complejos con texto y otros elementos Para permitir que aparezcan caracteres entre los elementos hijos, el atributo mixed debe estar a "true".

    XML Schema. Indicadores para elementos complejos Permiten realizar el control de qué elementos van a ser utilizados en un documento XML. Hay siete tipos de indicadores: • Indicadores de orden: – All – Choice – Sequence • Indicadores de ocurrencia: – maxOccurs – minOccurs • Indicadores de grupo: – Group name – attributeGroup name XML Schema. Indicadores de orden

    XML Schema. Indicadores de ocurrencia Indicador : El número máximo de veces que se puede dar un elemento. Indicador : El número mínimo de veces que un elemento puede aparecer

    Por defecto, = “1”

    XML Schema. Indicadores de grupo de elementos Define grupos de elementos para poder referenciarlos varias veces.

    XML Schema. Indicadores de grupos de atributos Define grupos de atributos para poder referenciarlos varias veces.

    XML Schema. (i) El elemento permite extender documentos con elementos que no han sido descritos en el Schema. Familia.xsd

    Después del elemento se podrían poner otros elementos que no están definidos en el Schema.

    XML Schema. (ii)

    XML Schema. (i) El elemento permite extender documentos con atributos que no han sido descritos en el Schema.

    Cuando se describa una persona en el documento XML se podrá extender con atributos de otro Schema. XML Schema. (ii)

    XML Schema. String El tipo de dato String permite contener cualquier tipo de caracteres, LF (line feeds), CR (carriage returns), y tabulaciones

    XML Schema. normalizedString El tipo de datos normalizedString permite contener cualquier carácter pero el procesador de XML sustituye los LF, CR y caracteres de tabulación por espacios.

    XML Schema. Token El tipo de datos token permite contener cualquier carácter, pero el procesador de XML eliminará los LF, CR, caracteres de tabulación, espacios al principio, espacios al final, y espacios entre medias

    XML Schema. Cadenas de caracteres

    XML Schema. Fechas

    XML Schema. Decimal El tipo de dato decimal se utiliza para especificar valores numéricos decimales.

    XML Schema. Integer El tipo de dato integer sirve para poder describir números sin la parte fraccional.

    XML Schema. Datos numéricos

    XSLT / XPath Documentos XML – Documentos de texto con etiquetas – Contienen esencialmente información (no se entra en detalles de presentación) – La información se organiza jerárquicamente – Aunque son legibles por un humano, se supone que la información se procesará – Así se obtendrán formas de (re)presentación más adecuadas – Es posible que esas representaciones impliquen también seleccionar información • Necesidad de algún medio para expresar la transformación de un documento XML – En otro documento XML (seleccionando, reordenando, calculando...) – En un documento que una persona pueda utilizar de manera directa (leer, imprimir...) Pensemos en nuestra propia solución • Fichero XML de ejemplo:

    Justificación de XSLT (III) • Supongamos que necesitamos extraer sólo la información de nombre y fecha de nacimiento • Supongamos que, dependiendo del caso, necesitamos que la fecha aparezca en español, o en inglés, o con el año de dos dígitos, o sólo el año, o... • Del mismo documento pueden extraerse otros muy diversos:

    Nomenclatura de las tecnologías • XSLT: eXtensible Stylesheet Language for Transformations. Permite definir cómo se transforma un documento XML en otro documento XML Además de XML, se puede generar como salida HTML y texto • XSL-FO: eXtensible Stylesheet Language – Formatting Objects. Conversión del XML en un formato “imprimible” y legible por una persona (ej.: PDF). Inicialmente, este era el propósito del XSL • XPath: Una sintaxis para aludir a diversas partes de un documento XML La parte de transformaciones ganó en importancia, y se llega a la terminología actual:

    Estructura básica de una hoja XSLT (I) • Una hoja XSLT transforma un documento XML en: – Otro documento XML – Un documento HTML – Texto • La hoja XSLT consta de una serie de reglas • Una hoja XSLT es también un documento XML (!) Estructura básica de una hoja XSLT (II)

    Procesadores XSLT • Existen varias formas de realizar la transformación – Procesador XSLTPROC – Procesador MSXML • Un ejecutable que se limita a llamar a la biblioteca de transformación de Internet Explorer – Se puede invocar a la biblioteca de transformación desde un programa – Enlace entre el fichero XML y la hoja XSLT • El fichero se puede ver directamente en Internet Explorer o en otro navegador que soporte XSLT • Desventaja: el fichero queda "ligado" a esa vista, por lo menos si se abre directamente • Bajo la etiqueta del fichero XML, se añade

    Estructura básica de una hoja XSLT (III) • La hoja XSLT contiene básicamente tres tipos de elementos: – Elementos de XSLT. Pertenecen al namespace xsl, y por tanto sus etiquetas llevan el prefijo xsl: . Son el equivalente a las palabras clave del lenguaje de programación (definidos por el estándar e interpretados por cualquier procesador de XSLT) – Elementos LRE (Literal Result Elements). Son elementos que no pertenecen a XSLT, sino que se repiten en la salida sin más (ejemplo: un elemento ) – Elementos de extensión. Son elementos no-estándar (al igual que los LRE), que son manejados por implementaciones concretas del procesador. Normalmente, no los utilizaremos xsl:stylesheet • Es el elemento raíz de una hoja XSL • Se puede utilizar también xsl:transform (son prácticamente equivalentes) • Atributos principales: – version: Suele ser 1.0 – xmlns:xsl: Asigna el namespace xsl (las etiquetas de XSL empiezan por el prefijo xsl:). El valor para XSLT suele ser http://www.w3.org/1999/XSL/Transform • Otros atributos: – extension-element-prefixes: Sirve para declarar los prefijos de elementos que deben considerarse elementos de extensión y no LRE (se incluyen separados por espacios) – exclude-result-prefixes: Sirve para hacer que los elementos de ciertos namespaces (prefijos) no se reproduzcan en la salida

    Elementos del nivel superior • Son elementos hijos de xsl:stylesheet • Además, son hijos directos (tampoco pueden anidarse) • Dos excepciones: xsl:variable y xsl:param • No son instrucciones sobre cómo procesar elementos, sino estructuras contenedoras para instrucciones • Son los siguientes:

    xsl:output • Define qué tipo de salida se va a generar como resultado • Atributos: – method: puede tomar los valores xml, html y text (y también un valor de extensión, con el prefijo correspondiente) – encoding: define la forma de representar caracteres que se adoptará en la salida. Ejemplos: • iso-8859-1, UTF-8, UTF-16... • windows-1252 (genera los caracteres acentuados con la codificación de Windows) – omit-xml-declaration: valores yes o no. Indica si se genera o no la declaración – indent: valores yes o no. Si es yes, el procesador (para salidas xml o html) indentará el resultado xsl:template (I) • El bloque fundamental de una hoja XSLT • Un template tiene dos elementos principales: – Una expresión de emparejamiento – Las instrucciones de procesamiento que contiene • Si la expresión de emparejamiento coincide con un elemento del fichero XML, el template entra en acción y se ejecutan las instrucciones de procesamiento • Las instrucciones de procesamiento pueden ser instrucciones de XSLT propiamente dichas o bien LREs • Al procesar un template, se va construyendo el árbol resultado, en el que se incorpora el resultado de ejecutar instrucciones o bien los LREs (directamente)

    xsl:template(II) • Atributos: – match: Su valor es una expresión que se usa para seleccionar nodos del árbol de entrada (cuando encaja, el template entra en acción) – name: Además de cuando encaja, un template puede invocarse explícitamente (en ese caso se necesita que tenga un nombre) • Ejemplo:

    Recapitulando... • Elemento fundamental: xsl:stylesheet, en el que incluimos versión (1.0) y el namespace xsl • Dentro de él, los elementos del nivel superior • Utilizamos xsl:output para decir si la salida es XML, HTML o texto normal, y algunos detalles más de cómo se genera • Utilizamos xsl:template como bloque básico • Problemas (en este punto): – No hemos visto cómo escribir expresiones match para los templates – No hemos visto qué instrucciones podemos utilizar para generar la salida – Con lo visto hasta ahora, prácticamente sólo podemos procesar el nodo raíz y generar una salida constante (LRE) • Primer problema: cómo procesar más allá del nodo raíz xsl:apply-templates • El procesador empareja con sus reglas por defecto (recorre todo) • Si encuentra una regla concreta, aplica esa (no sigue procesando los hijos de ese nodo, salvo que se lo indiquemos) • xsl:apply-templates se utiliza para indicar al procesador que intente emparejar templates con cierto nodo o conjunto de nodos (nodeset) • Atributos: – select: Su valor es una expresión XPath de conjunto de nodos. El procesador intentará emparejar ese conjunto de nodos con sus templates respectivos • Ejemplo: apply-templates1 • xsl:apply-templates permite realizar un tratamiento recursivo de todos los elementos del árbol fuente

    xsl:value-of • Resuelto cómo procesar más allá del nodo raíz • Pero hasta ahora sólo hemos generado salidas constantes (LREs) • ¿Cómo averiguar el contenido de un nodo? • xsl:value-of – Permite evaluar una expresión XPath – El contenido del nodo actual viene dado por la expresión “.” • Ejercicio: modificar el anterior para que escriba los valores reales de día, mes y año • Resumen: – xsl:stylesheet • xsl:output • xsl:template match=... – xsl:value-of select=... – xsl:apply-templates select=... • Esos match y select requieren de XPath Introducción a XPath • XPath es una especificación del W3C (aprobada el mismo día que XSLT) • Define cómo acceder a partes de un documento XML • Se basa en relaciones de “parentesco” entre nodos • Su estilo de notación es similar a las rutas de los ficheros, pero se refiere a nodos en un documento XML – Ejemplo: /fecha/dia • XPath se usa en XSLT, pero también en XSL-FO, XPointer, XLink, y otros • En XSLT, XPath se utiliza en los valores de atributos (tales como match o select) • Frecuentemente, como expresión de emparejamiento Términos básicos en XPath • Nodo actual (current node) – Es un nodo que está seleccionado cuando se va a evaluar una expresión XPath – Constituye el punto de partida al evaluar la expresión • Nodo contexto (context node) – Para evaluar una expresión, se van evaluando subexpresiones parciales – Cada vez que se evalúa una subexpresión se obtiene un nuevo conjunto de nodos (node-set) que es el nuevo contexto para evaluar la siguiente subexpresión • Tamaño del contexto (context size) – El número de nodos que se están evaluando en un momento dado en la expresión XPath

    Expresiones XPath • Una expresión XPath arroja (tras ser evaluada) una expresión de 4 tipos posibles: conjunto de nodos (node-set), booleano, número, cadena • Tokens válidos en una expresión XPath – Paréntesis y similares: ( ) { } [ ] – Elemento actual . y elemento padre .. – Atributo @, elemento * y separador :: – La coma , – El nombre de un elemento – Tipo de nodo (comment, text, processing instruction, node) – Operadores: and, or, mod, div, *, /, //, |, +, -, =, !=, = – Nombres de función – Nombre de eje (axis): ancestor, ancestor-or-self, attribute, child, descendant, descendant-orself, following, following-sibling, namespace, parent, preceding, preceding-sibling, self – Literales, entre comillas dobles o simples (se pueden anidar alternadas) – Números – Referencias a variables ($nombreVariable) Expresiones XPath • Hay que considerar una expresión XPath como un “predicado”, que devuelve todo lo que encaja con dicho predicado • Lo que devuelve es procesado por la regla XSL • Las expresiones XPath se usan sobre todo en los atributos match, select y test Node-set Node-set – Grupo de nodos (no ordenado) resultado de evaluar una expresión XPath – Los nodos pueden ser de 7 tipos

    Los elementos de un node-set son siempre hermanos (da igual lo que fuesen originalmente) – Sus hijos originales no están incluidos (no hablamos de “subárboles”), pero se puede acceder a ellos

    Location path (ruta de localización) • Se corresponde con la idea intuitiva de “ruta de directorio” • Un location path siempre devuelve un node-set • Tipos de rutas de localización – Patrones (patterns): sólo permiten el uso de los ejes child y attribute (se verá después) – Absolutas: parten de la raíz – Relativas: no parten de la raíz (depende del nodo de contexto, context node). Este cambia con cada /, que actúa como separador de los pasos de localización. En cada paso se selecciona un nuevo node-set que pasa a ser el nodo de contexto Pasos de localización • Paso de localización: cada paso de una ruta de localización (separados por /) • Un paso de localización consta de: – Eje (axis). Es la relación entre el nodo de contexto y el paso – Prueba de nodo (node test). Es el “nombre de directorio” – Predicado (predicate). Expresión XPath entre corchetes. • El eje a veces está implícito (no se pone). El predicado es opcional

    Prueba de nodo (node test) • La forma más simple es escribir simplemente el nombre del nodo (su etiqueta) • También se puede utilizar el asterisco * que simboliza cualquier nombre • Ejemplos: – /universidad/euitio/alumnos/alumno Encaja con cualquier nodo “alumno” que sea hijo de un nodo “alumnos” que sea hijo de un nodo “euitio” que sea hijo del nodo “universidad” que será el nodo raíz – /universidad/* Encaja con cualquier nodo que sea hijo del nodo “universidad” que será el nodo raíz – universidad/* Encaja con cualquier nodo que sea hijo de un nodo “universidad” que sea hijo del nodo de contexto • IMPORTANTE: // indica “que sea hijo de cualquiera

    Ejes (axis) • El eje denota la relación de un paso de localización con su nodo de contexto • Hay una serie de ejes posibles: ancestor, ancestor-or-self, attribute, child, descendant, descendant-or-self, following, following-sibling, namespace, parent, preceding, precedingsibling, self • El eje y la prueba de nodo se separan mediante el operador :: • Equivale a “que es un”, pero sus argumentos se leen de derecha a izquierda • child está implícito y casi nunca se pone. Para el nodo raíz, está implícito self (self denota al nodo de contexto) • Ejemplos: – /universidad/euitio Equivale de manera implícita a /self::universidad/child::euitio – /universidad/euitio/following-sibling::* Todos los nodos que son “hermanos después de” euitio (en el orden del documento) que es hijo de universidad Predicado • Añade un nivel de verificación al paso de localización • Expresión booleana • Dada la prueba de nodo, y dado el eje, del conjunto de nodos resultante quedan sólo los que cumplan el predicado • En el predicado pueden intervenir funciones XPath (ojo con las expresiones, > ‡ >) Funciones XPath • Hay una gran variedad de funciones – boolean(): convierte a booleano. Aplicada a un conjunto de nodos, devuelve true si no es vacío. not(), true() – count(): Devuelve el número de nodos en un conjunto de nodos – name(): Devuelve el nombre de un nodo (su etiqueta). local-name(), namespace-uri() – position(): Devuelve la posición de un nodo en su contexto (empieza en 1) last() – Biblioteca de strings. normalize-space(), string(), concat(), stringlength() – sum() Acceso a atributos • Se puede acceder a un elemento atributo gracias al eje attribute:: • Contiene todos los nodos atributo del nodo contexto • Una abreviatura de esto es la arroba @ • Ejemplo: – Nodos de nombre “edad” que son atributos de nodos “individuo” Acceso a elementos de otro documento XML • Muy importante: se puede acceder a datos de otro fichero XML • Uso de la función document()

    Recapitulando... • Con XPath podemos – Seleccionar los nodos para la aplicación de templates – Obtener valores (bastante elaborados) – La selección de nodos puede basarse en similitud de nombres, en el eje y/o en ciertas condiciones (predicado) Instrucciones XSL • No son elementos de nivel superior; son las instrucciones contenidas dentro de los templates • Indican cómo realizar el procesamiento • xsl:value-of es un caso simple • Otras instrucciones permiten realizar tratamientos condicionales, iteraciones, construcción de elementos en el árbol resultado, etc. Ordenar: xsl:sort • xsl:sort – Se especifica dentro de xsl:apply-templates o xsl:for-each – ¿Podría haber sido un atributo? – Su atributo es select – Indica cómo se establece el orden Condicional: xsl:if • xsl:if – Atributo: test – El valor del atributo es una expresión booleana – Las instrucciones que contiene se ejecutan sólo si la condición se cumple Condicional: xsl:choose • xsl:choose • Contiene elementos xsl:when – Atributo: test (similar al de xsl:if) – Son los diferentes “casos” de una sentencia CASE • Caso por defecto: xsl:otherwise (sin atributos) Iteración: xsl:for-each • xsl:for-each – Atributo: select – Aplica las instrucciones de su interior para todos y cada uno de los nodos del conjunto de nodos dado por select

    Construcción de elementos en el árbol resultado (I) • ¿Cómo generar un elemento con cierta etiqueta y “construir” sus atributos? • A veces la sintaxis no nos lo permite directamente. Posible ejemplo:

    • Se pueden utilizar los llamados AVT (Attribute Value Template): las expresiones entre llaves se evalúan como si hubiera un value-of – Para poner llaves "de verdad", poner cada una dos veces • Se pueden necesitar instrucciones para “construir” dichos elementos • xsl:element – Construcción de un elemento en el árbol resultado – Atributos: name • xsl:attribute – Añadir un atributo al elemento en cuestión – Atributos: name – El valor está encerrado como texto libre dentro de xsl:attribute Construcción de elementos en el árbol resultado (II) Ejemplo: código XSLT equivalente

    Introducción. XPath es un lenguaje de consulta que permite recuperar información de un documento XML. Obtiene su denominación por el uso que hace de una notación de caminos para navegar a través de la estructura jerárquica de un documento XML. Fue creado para su uso con el estándar XSLT en el que además de direccionar partes de un documento XML, está diseñado de modo que tiene un subconjunto natural que puede usarse para cotejar, es decir, comprobar si un nodo encaja con un patrón o no.

    XPath opera sobre la estructura lógica abstracta de un documento XML, más que en su sintaxis superficial y modela el documento XML como un árbol de nodos. Hay diferentes tipos de nodos, incluyendo nodos elemento, nodos atributo y nodos texto. XPath define un modo de calcular un valor de cadena para cada tipo de nodo. Algunos tipos de nodo también tienen nombres. La construcción sintáctica básica en XPath es la expresión. Las expresiones son evaluadas para producir un objeto, que tendrá uno de los siguientes cuatro tipos básicos: • Conjunto de nodos (una colección desordenada de nodos sin duplicados). • booleano (verdadero o falso). • número (un número en punto flotante). • cadena (una secuencia de caracteres UCS). Terminología. El funcionamiento de XPath se basa en la representación del documento XML como un árbol de nodos. En las siguientes ilustraciones se muestra un ejemplo de cómo sería esta representación:

      

    Comienza por un elemento raíz. Despliega una serie de elementos intermedios que dependen del elemento raíz. Finaliza en varios elementos finales (también denominados nodos hoja).

    A continuación, se muestran algunos conceptos de interés









    Nodo actual (Current): nodo que está seleccionado cuando se evalúa una expresión XPath, es decir, es el comienzo desde donde se empieza a evaluar dicha expresión. En el ejemplo, si el nodo actual fuera el nodo alumno con texto "Nando" y se buscaran el resto de alumnos, se perderían los anteriores. Nodo contexto (Context): son aquellos nodos que son evaluados de forma parcial para obtener el resultado de la evaluación de la expresión XPath. Hay que tener en cuenta que en cada evaluación de las subexpresiones se obtiene un nuevo conjunto de nodos que pasa a ser el nuevo contexto a evaluar en las siguientes subexpresiones. Tamaño del contexto: es el número de nodos que se están evaluando en la expresión XPath en un momento dado. También se denomina tamaño contextual y siempre se corresponde con un entero positivo (no nulo). Posición del contexto: es la posición que ocupa dentro del documento el nodo contexto. También se denomina posición contextual y siempre se corresponde con un entero positivo (no nulo) menor o igual que el tamaño contextual.

    Modelos de datos. Como se comentó anteriormente, XPath opera sobre un documento XML considerándolo como un árbol de nodos. En el modelo de datos se describe la forma en que XPath modela un documento XML como un árbol. Este modelo es solamente conceptual y no impone ninguna implementación en particular. Los documentos XML sobre los que opera XPath deben ser acordes con la Recomendación de Espacios de Nombres XML. Para cada tipo de nodo, se determinar un valor de cadena. Para algunos tipos de nodo, el valor de cadena es parte del nodo; para otros tipos de nodo, se calcula a partir del valor de cadena de nodos descendientes. Hay siete tipos de nodos: nodos raíz, nodos elemento, nodos texto, nodos atributo, nodos espacio de nombres, nodos instrucción de procesamiento y nodos comentario. Los nodos raíz y los nodos elemento poseen una lista ordenada de nodos hijo. Los nodos nunca comparten un hijo: si un nodo no es el mismo nodo que otro, entonces ninguno de los hijos del primer nodo será el mismo nodo que ninguno de los hijos del otro nodo. Todos los nodos salvo el nodo raíz tienen exactamente un padre, que es o bien un nodo elemento o bien el nodo raíz. Un nodo raíz o un nodo elemento es el padre de cada uno de sus nodos hijo. Los descendientes de un nodo son los hijos del nodo y los descendientes de los hijos del nodo. 1. Nodo raíz (root): es la raíz del árbol. No aparecen nodos raíz salvo como raíz del árbol. Se reconoce por su identificador "/". Es muy importante no confundirlo con el elemento raíz del documento, de hecho el elemento raíz está contenido en el nodo raíz. Esta diferencia se aclara viendo el ejemplo:  

    Nodo raíz : es el elemento "/" del árbol. Elemento raíz : es el elemento "universidad".

    2. Nodo elemento (element): cada nodo elemento del árbol de nodos representa un elemento del documento.   

    Cada nodo elemento puede tener hijos que serán otros nodos elemento y/o nodos hoja (nodos comentario, nodos instrucción de procesamiento y nodos texto). Los nodos elemento pueden tener un identificador único (ID) si el documento XML se acompaña de un DTD que especifique dicho atributo. En el ejemplo, entre todos los nodos elemento se puede observar el nodo elemento “carrera” con seis nodos elementos hijos “alumnos”.

    3. Nodos atributo (attribute): cada nodo elemento tiene asociado un conjunto de nodos atributo; el elemento es el padre de cada uno de esos nodos atributo; sin embargo, los nodos atributo no son hijos de su elemento padre. Los elementos nunca comparten nodos atributo. En el ejemplo de la Ilustración 16 un atributo sería “nombre”, que diferencia el tipo de asignatura.

    4. Nodo texto (text): hace referencia a todos los caracteres que no están limitados por etiquetas. En cada nodo texto se agrupan todos los datos de caracter que sea posible: un nodo texto nunca tiene un hermano inmediatamente anterior o siguiente que sea nodo texto ni contiene ningún tipo de hijos. Los nodos texto siempre tienen al menos un caracter. Los caracteres dentro de comentarios, instrucciones de procesamiento y valores de atributos no producen nodos texto. En el ejemplo los nodos texto serían los delimitados por la etiqueta “alumno”, es decir: “Pepi”, “Fernando”, “Carolina”, “María”, “Álvaro” y “Nando”. 5. Nodo instrucción de procesamiento (processing Instruction): hay un nodo instrucción de procesamiento por cada instrucción de procesamiento, salvo para aquellas que aparezcan dentro de la declaración de tipo de documento. 6. Nodo espacio de nombres (namespace): cada elemento tiene un conjunto asociado de nodos espacio de nombres, uno para cada uno de los distintos prefijos de espacio de nombres con efecto sobre el elemento y uno para el espacio de nombres por defecto si hay alguno con efecto sobre el elemento. El elemento es el padre de cada uno de los nodos espacio de nombres; sin embargo, los nodos espacio de nombres no son hijos de su elemento padre. Los elementos nunca comparten nodos espacio de nombres. 7. Nodo comentario (comment): corresponde con cada comentario del documento XML, salvo aquellos que aparecen dentro de la declaración de tipo de documento.

    Una ruta de localización (location path) es uno de los tipos de expresiones más importantes que se pueden especificar en XPath, el resultado generado siempre es un node-set. La ruta de localización siempre comenzará a aplicarse desde el nodo contextual, a menos que se indique lo contrario estableciendo una ruta explícita. Existen distintos tipos de rutas de localización: Relativas: consiste en una secuencia de uno o más pasos de localización separados por “/” comenzando desde el nodo contextual, no el nodo raíz. En cada paso se selecciona un nuevo node-set que pasa a ser el nuevo nodo contextual. • Absolutas: comienzan por "/", lo que significa que se aplicará desde el nodo raíz, seguido opcionalmente por una ruta de localización relativa. • Patrones : obligan al uso de los ejes "child" y “attribute”. En la Tabla 27 se muestran algunos ejemplos de rutas de localización con la sintaxis no abreviada y la abreviada

    Pasos de localización. Paso de localización es el nombre con el que se denomina a cada cambio que se produce en una ruta de localización, es decir, a cada cambio de “/”. Un paso de localización se compone de: • Eje (axis): especifica la relación entre el nodo seleccionado por el paso de localización y el nodo contextual. • Nodo prueba (node test): es el elemento filtrado. En el caso de rutas de directorios sería el propio nombre del directorio y para cualquier nombre se utiliza “*”. • Predicado (predicate): expresión XPath entre corchetes definiendo aún más la consulta y el conjunto de nodos seleccionados por el paso de localización. El predicado es opcional. La sintaxis de un paso de localización queda defina por:

    La sintaxis del paso de localización es el nombre de eje y el nodo prueba separados por dos caracteres de dos puntos, seguido de cero o más expresiones, cada una entre corchetes. Las tablas que se muestran a continuación exponen los diferentes tipos de pasos de localización y operadores de los que se pueden hacer uso para una consulta XPath:

    Expresiones. En XPath una expresión es el elemento base que se utiliza para producir un resultado. Estableciendo una similitud con cualquier lenguaje de programación, una expresión vendría a ser una instrucción. Mediante las expresiones se van a poder seleccionar nodos o conjuntos de nodos. Al evaluar una o varias expresiones se genera un resultado, este resultado podrá ser uno de los siguientes tipos: 1. Conjunto de nodos (Node-set): es un conjunto de nodos (sin duplicados y sin orden) que se genera como resultado de evaluar una expresión XPath. Estos nodos pueden ser de cualquiera de las tipologías anteriormente descritas, pero suelen corresponderse con los tipos: elemento, atributo y texto. Los elementos que componen un node-set son siempre hermanos con independencia de lo que fueran antes de la ejecución de la expresión XPath. Sus hijos originales no están incluidos, pero se puede acceder a ellos. Para poder evaluar una o varias expresiones se tiene en cuenta el "contexto", es decir: nodo contextual, posición contextual, tamaño contextual, asignación de variables, biblioteca de funciones y declaraciones de espacios de nombres aplicables a la expresión. Una expresión XPath genera como resultado una lista de referencias (vacía / un nodo / varios nodos) a los elementos que encajan en el patrón buscado. 2. Cadena: un conjunto de caracteres. 3. Número: representa un número en punto flotante. Algunos operadores relacionados son: “+” adición; “-“ substracción; “*” multiplicación; “div” división en punto flotante o “mod” resto de división con truncamiento. 4. Booleano: representa uno de dos valores : verdadero / falso. Algunos operadores relacionados son: “or” disyunción; “and“ conjunción; “=” igualdad; “!=” diferencia, “” mayor que. Funciones. En XPath está permitido el uso de funciones que facilitan realizar algunas operaciones necesarias para evaluar expresiones. Cada función se especifica utilizando un prototipo de función, que da el tipo devuelto, el nombre de la función y el tipo de los argumentos. Si un tipo de argumento es seguido por un signo de interrogación, entonces el argumento es opcional; en otro caso, el argumento es obligatorio. Estas funciones se resumen en las siguientes tablas según su tipo

    Ejes. Un eje se define como la relación existente entre un paso de localización y su nodo contextual. También se puede definir como un conjunto de nodos relativos al nodo contextual. En la sintaxis de un paso de localización (Eje::NodoPrueba[Predicado]) se puede observar que el eje y el nodo de prueba se encuentran separados por los caracteres “::” y se puede traducir por “NodoPrueba[Predicado]”. Los ejes que se pueden utilizar son:

    Predicados. Un predicado es una “condición” que permite seleccionar un nodo con unos determinados atributos o característica, es decir, un predicado filtra un conjunto de nodos con respecto a un eje para producir un nuevo conjunto de nodos. Su sintaxis viene dada entre corchetes ([predicado]) y tiene un valor booleano. Entre los corchetes se pueden colocar:

    Conclusión. XPath es un lenguaje de consulta para localizar elementos dentro de cualquier documento XML. Se ha expuesto la estructura de XPath y se ha descrito su funcionamiento junto con todas las herramientas que posee para una consulta y filtrado más definidos de un documento XML. En este capítulo se ha querido mostrar el gran potencial de este lenguaje que se ha elegido para la Gestión de Guías de Práctica Clínica, siendo suficiente lo aquí reflejado para las consultas que se quieren realizar