XML
Transcripción
XML
T Tema 3. IV. XML IV XML Arquitecturas Distribuidas 09/10 1 IV. XML 1. 2. 3 3. 4. 5. 6 6. ¿Qué es XML? Estructura de un documento XML Importancia de XML Problemas de XML Conformidad y validez E Estructura DTD XML DTD XML 3.1. Elementos 3.2. Atributos 3.3. Notaciones 3.4. Entidades 35 3.5. Instrucciones de procesado (PI) p ( ) 7. Interpretación de un documento XML por un navegador 8. XHTML 9. Tecnologías relacionadas con XML 9 5.1. Espacios de nombres 5.2. XSchema 5 3 Lenguajes de estilo y transformación para XML 5.3. Lenguajes de estilo y transformación para XML Arquitecturas Distribuidas 09/10 2 ¿Qué es XML? (I) ¿Q () y Lenguaje de Marcas eXtendido. y Meta‐lenguaje g j p para lenguajes de marcas particulares g j p (como SGML): permite crear otros lenguajes de marcas y Proporciona las reglas sintácticas que permiten crear lenguajes que están bien formados y puedan ser validados y Cuando uno crea un documento XML, define sus propias etiquetas. No está limitado en qué o cómo se describen los datos. datos y Mientras el documento esté bien formado es XML aceptable y Cada lenguaje particular (e.g. XHTML, MathML, SVG) es una aplicación de XML li ió d XML y Proporciona información acerca de los datos (metadatos) Arquitecturas Distribuidas 09/10 3 ¿Qué es XML? (I) ¿Q () y Separa los datos de su representación (formato) particular y XML no es HTML mejorado, sino SGML simplificado. j , G p y Simplifica el procesado e intercambio de la información, es independiente de la plataforma. y Proporciona reglas sintácticas para crear lenguajes que deben estar bien formados y pueden ser validados y Es usado por muchas otras tecnologías y en muchos ámbitos (e.g. ámbitos (e g los ficheros de configuración de las tecnologías de Microsoft son XML). Arquitecturas Distribuidas 09/10 4 Estructura de un documento XML Estructura de un documento XML y Prólogo (declaraciones) y cuerpo. <?xml version="1.0" [parámetros opcionales]> Declaraciones de las reglas del documento <raiz> Contenido </raiz> PRÓLOGO CUERPO y Parámetros opcionales en la declaración: y standalone: indica si el documento es autocontenido. d ld d y encoding: juego de caracteres del documento. Arquitecturas Distribuidas 09/10 5 Estructura de un documento XML Estructura de un documento XML y Ejemplo documento XML simple: <?xml version="1.0" encoding='UTF-8‘?> <dni> <id> d 568 568767331X 6 33 </id> / d <nombre> Pepe </nombre> <apellidos> Pérez </apellidos> <nacimiento> <lugar> g Murcia </lugar> / g <fecha> 1/1/1983 </fecha> </nacimiento> </dni> MARCAS Arquitecturas Distribuidas 09/10 6 Estructura de un documento XML Estructura de un documento XML y Ejemplo documento XML simple: <?xml version="1.0" encoding='UTF-8'> Una aplicación podría <dni> usar el DNI para enviar a <id> d 568 568767331X 6 33 </id> / d l la máquina que los á i l <nombre> Pepe </nombre> <apellidos> Pérez </apellidos> imprime los comandos <nacimiento> <lugar> g Isla p perejil j </lugar> / g oportunos <fecha> 1/1/1983 </fecha> </nacimiento> </dni> Arquitecturas Distribuidas 09/10 7 Estructura de un documento XML Estructura de un documento XML y Ejemplo documento XML simple: <?xml version="1.0" encoding='UTF-8'> Una aplicación podría usar el DNI para enviar a <id> d 568 568767331X 6 33 </id> / d l la máquina que los á i l <nombre> Pepe </nombre> <apellidos> Pérez </apellidos> imprime los comandos <nacimiento> <lugar> g Isla p perejil j </lugar> / g oportunos Otra aplicación podría <fecha> 1/1/1983 </fecha> </nacimiento> usar el DNI para enviar al </dni> usuario un correo para p recordarle que debe renovarlo. <dni> Arquitecturas Distribuidas 09/10 8 Estructura de un documento XML Estructura de un documento XML y Ejemplo documento XML simple: <?xml version="1.0" encoding='UTF-8'> Una aplicación podría usar el DNI para enviar a <id> d 568 568767331X 6 33 </id> / d l la máquina que los hace á i l h <nombre> Pepe </nombre> <apellidos> Pérez </apellidos> los comandos oportunos <nacimiento> <lugar> g Isla p perejil j </lugar> / g Otra aplicación podría <fecha> 1/1/1983 </fecha> Otra aplicación podría </nacimiento> usar el DNI para enviar al </dni> usar los datos para usuario un correo para p contrastar la veracidad l id d recordarle que debe en una compra a través renovarlo. de Internet de Internet. <dni> Arquitecturas Distribuidas 09/10 9 Estructura de un documento XML Estructura de un documento XML XML PROPORCIONA UN <?xml version="1.0" encoding='UTF-8'> MÉTODO PARA ESTRUCTURAR Una aplicación podría usar el DNI para enviar a <dni> INFORMACIÓN, O <id> d 568 568767331X 6C33Ó </id> /, d l la máquina que los hace á i l h <nombre> Pepe </nombre> <apellidos> Pérez </apellidos> los comandos oportunos INDEPENDIENTEMENTE DE LA <nacimiento> <lugar> g Isla p perejil j </lugar> / g Otra aplicación podría <fecha> 1/1/1983 </fecha> Otra aplicación podría APLICACIÓN QUE LA PROCESE Ó Q O </nacimiento> usar el DNI para enviar al </dni> usar los datos para usuario un correo para p Y PARA DOTARLA DE contrastar la veracidad l id d recordarle que debe en una compra a través renovarlo. SIGNIFICADO de Internet. de Internet y Ejemplo documento XML simple: Arquitecturas Distribuidas 09/10 10 Importancia de XML p y XML permite especificar la semántica de los datos que contiene: ¿qué ¿q significan? g y HTML, por el contrario, permite definir la estructura de un documento pero no la semántica de los datos que contiene y Separación S ió de los datos d l d t de la forma en que d l f se procesan = independiente del dominio de aplicación y Permitir q que los datos “perduren” más p allá de la tecnología g y Legible por los humanos (Human‐readable): ¿por qué? al menos hay una oportunidad de discernir el significado en el futuro (si p de abrir el archivo)) somos capaces y Estándar y MUY utilizado Arquitecturas Distribuidas 09/10 11 Problemas de XML y Tremendamente redundante (desde el punto de vista de una máquina). Muy poco eficiente en el uso de de una máquina) Muy poco eficiente en el uso de recursos y Ancho de banda, latencia, almacenamiento. Ancho de banda latencia almacenamiento y Proliferación de lenguajes y Necesitamos un parser/aplicación N it / li ió para cada uno de ellos d d ll Arquitecturas Distribuidas 09/10 12 Conformidad y validez Conformidad y validez y En un documento bien formado (well‐formed) y Se cierran todos los elementos abiertos HTML: <h2> <b> Nombre: </b> <h3> <i> Pepe Pérez </i> XML: <h2> <b> Nombre: </b> </h2> <h3> <i> Pepe Pérez </i> </h3> Arquitecturas Distribuidas 09/10 13 Conformidad y validez Conformidad y validez y En un documento bien formado (well‐formed) y Se identifican los elementos vacíos HTML: <b> Nombre: </b> <i> Pepe Pérez </i> <br> XML: <b> Nombre: </b> <i> Pepe Pérez </i> <br/> Elemento vacío: <TAG/> Arquitecturas Distribuidas 09/10 14 Conformidad y validez Conformidad y validez y En un documento bien formado (well‐formed) y Los valores de los atributos siempre están presentes y van entre comillas (“valor” o ‘valor’) ( ) HTML: <li compact> <li type=disc> XML: <li compact="compact“> <li type="disc"> Arquitecturas Distribuidas 09/10 15 Conformidad y validez Conformidad y validez y En un documento bien formado (well‐formed) y En elementos y atributos, las mayúsculas y minúsculas son letras distintas HTML: <LI type=disc> == <li type=disc> == <Li tYPe=disc> XML: <LI type='disc'> yp != <li type='disc'> yp != <Li tYPe='disc'> Arquitecturas Distribuidas 09/10 16 Conformidad y validez Conformidad y validez y En un documento bien formado (well‐formed) y Los elementos deben estar bien anidados HTML: El analizador (parser) intenta arreglarlo HTML: <b> <u> Número de DNI: 568767331X </b> </u> XML: <b> <u> Número de DNI: 568767331X </b> / </u> / XML: El analizador (parser) debe dar error! Arquitecturas Distribuidas 09/10 17 Conformidad y validez Conformidad y validez y En un documento bien formado (well‐formed) y Todas las entidades deben estar declaradas HTML: <b> Nombre Apellidos </b> XML: <b> Nombre Apellidos </b> •XML: necesita una declaración previa. •XML sólo entiende por defecto: & (&) < (<) > (>) "e; (“) y ' (‘) & (&), < (<), > (>), "e; ( ) y ' ( ) Arquitecturas Distribuidas 09/10 18 Conformidad y validez Conformidad y validez y En un documento bien formado (well‐formed) y Puede contener comentarios XML: <!–<! Comentario --> > y Puede contener datos que no se analicen sintácticamente XML: <![CDATA [datos que no se analizan]]> Arquitecturas Distribuidas 09/10 19 Conformidad y validez Conformidad y validez y XML admite una declaración de Definición del Tipo de Documento (DTD): “Conjunto que describe de reglas que debe respetar un documento perteneciente a un lenguaje XML específico Define la estructura de un documento: específico. Define la estructura de un documento: elementos, contenidos de cada elemento, orden, atributos de cada elemento, etc.” y Un documento es conforme ó valido si y sólo si: y Está bien formado y Tiene un DTD y respeta sus reglas Arquitecturas Distribuidas 09/10 20 Estructura DTD XML Estructura DTD XML y Declaración del DTD: <?xml version="1.0"> <!DOCTYPE nombre [ REGLAS SINTACTICAS (declaraciones internas) ]> <nombre> ... </nombre> Arquitecturas Distribuidas 09/10 21 Estructura DTD XML Estructura DTD XML y Declaración “externa”: <?xml version="1.0"> URL donde se ubica el URL d d bi l documento con el DTD DTD. <!DOCTYPE nombre (SYSTEM|PUBLIC) URL [ ]> <nombre> ... </nombre> SYSTEM si es SYSTEM i un DTD propio i Arquitecturas Distribuidas 09/10 PUBLIC si es un DTD estándar. 22 Estructura DTD XML Estructura DTD XML y Declaración “mixta”: <?xml version="1.0"> <!DOCTYPE nombre (SYSTEM|PUBLIC) URL [ Reglas sintácticas (declaraciones internas) ]> <nombre> ... </nombre> DTD es la suma de las partes DTD l d l t externas e internas Arquitecturas Distribuidas 09/10 23 Estructura DTD XML Estructura DTD XML y Observación: <?xml version="1.0"> <!DOCTYPE nombre [ REGLAS SINTACTICAS (declaraciones internas) ]> <nombre> ... </nombre> Nombre indica cómo se N b i di ó llama la raíz del documento Arquitecturas Distribuidas 09/10 24 Estructura DTD XML y Reglas del DTD: <!DOCTYPE nombre [ REGLAS SINTACTICAS: ELEMENTOS: ATRIBUTOS: <!ELEMENT elemento (contenido)> <!ATTLIST elemento atributo tipo descripción ... > ENTIDADES: INTERNAS: <!ENTITY [%] entidad “cualquier texto”> EXTERNAS: <!ENTITY [%] entidad URL> PREDEFINIDAS: & < etc NOTACIONES: <!NOTATION ! nombre identificador> INSTRUCCIONES: <?... > ] y Utiliza Utili la sintaxis l i t i de SGML, simplificando d SGML i lifi d las l posibilidades ibilid d Arquitecturas Distribuidas 09/10 25 Elementos en DTD XML Elementos en DTD XML y Declaración de los elementos: <!ELEMENT elemento (contenido)> Nombre del N b d l nuevo elemento Indica la declaración de un nuevo elemento Declaración del tipo de D l ió d l ti d contenido (elementos y datos) que puede incluir el elemento, cuántos y en qué orden aparecen. Arquitecturas Distribuidas 09/10 26 Elementos en DTD XML Elementos en DTD XML Clases de contenido para elementos (5 posibilidades): <!--Elemento vacío--> <!ELEMENT elemento EMPTY> <!--Puede contener cualquier elemento--> <!ELEMENT elemento ALL> (datos) ) con entidades (q (que <!--Contenido es una cadena de caracteres ( deben ser procesadas)--> <!ELEMENT elemento (#PCDATA)> p de otros elementos, , según g una fórmula--> <!--Elemento compuesto <!ELEMENT elemento formula(elementos)> <!--Elemento con contenido mixto (otros elementos y #PCDATA)--> ( , # #PCDATA)> ) <!ELEMENT elemento formula(elementos, Arquitecturas Distribuidas 09/10 27 Elementos en DTD XML Elementos en DTD XML Clases de contenido para elementos (fórmulas): y Sintáxis muy similar a SGML. y Indican el número de veces que puede aparecer un componente d l d d (cardinalidad): * (cero o más veces) ( ) + (una o más veces) ? (cero o una vez) y Indican el orden en que deben/pueden aparecer los elementos I di l d d b / d l l t (atención: el operador & no existe, diferencia con SGML): a,b (b a continuación de a) a|b (b ó a) (conjunto) (agrupación, si existe operador posterior afecta a todo el conjunto) j ) Arquitecturas Distribuidas 09/10 28 Elementos en DTD XML Elementos en DTD XML Ejemplos de fórmulas: <!ELEMENT a (b,c)> (b c)> <a> <b>contenido de b</b> <c>contenido de c</c> </a> <a> <c>contenido de c</c> <b>contenido de b</b> </a> <a> <b>contenido de b</b> </a> <a></a> Arquitecturas Distribuidas 09/10 29 Elementos en DTD XML Elementos en DTD XML Ejemplos de fórmulas: <!ELEMENT a (b,c)> (b c)> <a> <b>contenido de b</b> <c>contenido de c</c> </a> VÁLIDA! Á <a> <c>contenido de c</c> <b>contenido de b</b> </a> NO VÁLIDA! <a> <b>contenido de b</b> </a> <a> </a> NO VÁLIDA! NO VÁLIDA! Arquitecturas Distribuidas 09/10 30 Elementos en DTD XML Elementos en DTD XML Ejemplos de fórmulas: <!ELEMENT a (b? (b?, c)+> <a> <c>contenido de c</c> </a> <a> <b>contenido <c>contenido <c>contenido <b>contenido <c>contenido de de de de de b</b> c</c> c</c> b</b> c</c> </a> Arquitecturas Distribuidas 09/10 31 Elementos en DTD XML Elementos en DTD XML Ejemplos de fórmulas: <!ELEMENT a (b? (b?, c)+> <a> <c>contenido de c</c> </a> VÁLIDA! <a> <b>contenido <c>contenido <c>contenido <b>contenido <c>contenido de de de de de b</b> c</c> c</c> VÁLIDA! b</b> c</c> </a> Arquitecturas Distribuidas 09/10 32 Elementos en DTD XML Elementos en DTD XML Ejemplos de fórmulas: <!ELEMENT a (#PCDATA, (#PCDATA (b|c), (b|c) d+, d+ #PCDATA)> <a> Cualquier cadena de texto forma un #PCDATA. Además es posible que nos encontremos entidades delimitadas por & y ;. <b> contenido de b </b> <d> contenidio de d </d> Cualquier otra cadena de datos. <a> <a> <c> contenido de c </c> <d> contenido de d </d> Nota: #PCDATA puede ser una cadena vacía. </a> Arquitecturas Distribuidas 09/10 33 Elementos en DTD XML Elementos en DTD XML Ejemplos de fórmulas: <!ELEMENT a (#PCDATA, (#PCDATA (b|c), (b|c) d+, d+ #PCDATA)> <a> Cualquier cadena de texto forma un #PCDATA. Además es posible que nos encontremos entidades delimitadas por & y ;. <b> contenido de b </b> <d> contenidio de d </d> Cualquier otra cadena de datos. <a> Ejemplo 1) Interpretación del #PCDATA en un <a> <c> contenido de c </c> navegador: Las entidades se <d> contenido de d </d> Nota: #PCDATA puede ser substituyen por su valor </a> “ l” ‘ ’ ‘ ’. “real”: ‘á’ y ‘&’ Arquitecturas Distribuidas 09/10 una cadena vacía. 34 Elementos en DTD XML Elementos en DTD XML Ejemplos de fórmulas: <!ELEMENT a (#PCDATA, (#PCDATA (b|c), (b|c) d+, d+ #PCDATA)> <a> Cualquier cadena de texto forma un #PCDATA. Además es posible que nos encontremos Ejemplo 2) #PCDATA puede entidades delimitadas por & y ;. <b> contenido de b </b> ser una cadena vacía. <d> contenidio de d </d> Cualquier otra cadena de datos. <a> <a> <c> contenido de c </c> <d> contenido de d </d> Nota: #PCDATA puede ser una cadena vacía. </a> Arquitecturas Distribuidas 09/10 35 Elementos en DTD XML Elementos en DTD XML Ejemplos de fórmulas: <!ELEMENT a (#PCDATA, (#PCDATA (b|c), (b|c) d+, d+ #PCDATA)> <a> Cualquier cadena de texto forma un #PCDATA. Además es posible que nos encontremos entidades delimitadas por & y ;. <b> contenido de b </b> <d> contenidio de d </d> VÁLIDA! Cualquier otra cadena de datos. <a> <a> </a> <c> contenido de c </c> <d> contenido de d </d> VÁLIDA! Nota: #PCDATA puede ser una cadena vacía. Arquitecturas Distribuidas 09/10 36 Atributos en DTD XML Atributos en DTD XML y Declaración de los atributos (parámetros): Nombre del elemento para el N b d l l l que se declaran los atributos <!ATTLIST elemento atributo1 tipo descripción atributo2 tipo p descripción p ... > Indica el comienzo de una nueva lista de atributos Declaración de parámetros (uno por línea) Arquitecturas Distribuidas 09/10 37 Atributos en DTD XML Atributos en DTD XML Tipos de parámetros: Nota: De momento no nos fijaremos en la descripción y Indican los posibles valores que puede contener el atributo: CDATA (character data: cualquier carácter y ciertas entidades) <!ATTLIST a parametro CDATA descripción> p p > <a parametro="Cualquier cadena con entidades como &"/> NMTOKEN (named token: una cadena de letras, números o ciertos token: una cadena de letras números o ciertos <!ATTLIST a símbolos: como el nombre de una variable en Java) parametro NMTOKEN descripción> > <a parametro="Algo_sin_espacios_quizas_con_123456"/> / Arquitecturas Distribuidas 09/10 38 Atributos en DTD XML Atributos en DTD XML NMTOKENS (named token list: secuencia de NMTOKEN separados por espacios) <!ATTLIST a parametro NMTOKENS descripción> > <a parametro="Token1 Token2 Token3 ..."/> ID (unique identifier: identificador que debe ser diferente para cada elemento, misma sintaxis que NMTOKEN) <!ATTLIST a parametro ID descripción> > <a parametro="1"/> < parametro="2"/> <a t "2"/> <a parametro="uno"/> <a parametro="uno"/> VÁLIDO! NO VÁLIDO! Arquitecturas Distribuidas 09/10 39 Atributos en DTD XML Atributos en DTD XML IDREF (identifier reference: identificador único de otro elemento que debe existir en el documento) <!ATTLIST a parametro IDREF descripción> > <!ATTLIST b otroparametro ID descripción> > <b otroparametro="uno"/> <a parametro= parametro="uno"/> uno /> VÁLIDO! <b otroparametro= otroparametro="uno"/> uno /> <a parametro="otro"/> NO VÁLIDO NO VÁLIDO! Arquitecturas Distribuidas 09/10 40 Atributos en DTD XML Atributos en DTD XML IDREFS (identifier reference list: lista de IDREF separados por espacios) <!ATTLIST a parametro IDREFS descripción> > <!ATTLIST b otroparametro ID descripción> > <!ATTLIST c otroparametromas ID descripción> > <b otroparametro="ID1"/> <b otroparametro="ID2"/> <c otroparametro= otroparametro="ID3"/> ID3 /> <a parametro="ID1 ID2 ID3 ..."/> Arquitecturas Distribuidas 09/10 41 Atributos en DTD XML Atributos en DTD XML ENTITY (entity name: nombre de una entidad general declarada en el documento) <!ENTITY unaentidad SYSTEM "foto.png"> p g Lo o entenderemos <!ATTLIST a parametro ENTITY descripción> mejor al estudiar > entidades! <a parametro="unaentidad"/> ENTITIES (identifier reference list: lista de ENTITY separadas por espacios) <!ENTITY unaentidad SYSTEM "foto.png"> <!ENTITY otraentidad SYSTEM "foto2.png"> <!ATTLIST a parametro ENTITIES descripción> > <a parametro="unaentidad otraentidad"/> Arquitecturas Distribuidas 09/10 42 Atributos en DTD XML Atributos en DTD XML NOTATION (notation list: lista de NOTATION separados por espacios) <!NOTATION jpg SYSTEM "/usr/bin/gimp"> / / /g p Lo o entenderemos <!ATTLIST a parametro NOTATION descripción> mejor al estudiar > notaciones! <a parametro="jpg"/> ENUMERACIÓN: Declaración especial (no usa palabra reservada): ( l | l (valor1 | valor2 | ...) | ) <!ATTLIST a parametro (valor1|valor2|...) descripción> > <a parametro="valor1"/> <a parametro="valor2"/> <a parametro="otrovalornoenumerado"/> Arquitecturas Distribuidas 09/10 NO VÁLIDO! Á 43 Atributos en DTD XML Atributos en DTD XML Descripción de parámetros: y Pueden indicar valores por defecto. p <!ATTLIST a color NMTOKEN azul> > <a/> <a color="rojo"/> <!ATTLIST a color (azul|rojo) azul> > <a color="verde"/> Arquitecturas Distribuidas 09/10 44 Atributos en DTD XML Atributos en DTD XML Descripción de parámetros: y Pueden indicar valores por defecto. p <!ATTLIST a color NMTOKEN azul> > No se indica nada del color, por tanto es <a/> azul Se cambia el color a <a color="rojo"/> rojo j <!ATTLIST a color (azul|rojo) azul> > <a color="verde"/> Definición no válida! Arquitecturas Distribuidas 09/10 45 Atributos en DTD XML Atributos en DTD XML Descripción de parámetros: y Indican características especiales: p #REQUIRED (el usuario debe proporcionar un valor siempre) #IMPLIED (el parámetro es opcional) #FIXED (debe aparecer y el usuario no puede alterarlo) ( ) <!ATTLIST a identidad ID #REQUIRED> color (azul|rojo|verde) #IMPLIED> tipo (antiguo|nuevo) #FIXED nuevo > <a identidad="1"/> <a identidad= identidad="2" 2 color= color="verde"/> verde /> <a color="rojo"/> <a tipo="antiguo“/> Arquitecturas Distribuidas 09/10 46 Notaciones en DTD XML y XML se diseñó principalmente como contenedor de información de “texto”. y Hay mucha información representada de modo binario: imágenes, vídeo, audio, etc. y XML posibilita la coexistencia con información binaria, a través del mecanismo de las notaciones. y Las notaciones son etiquetas especiales que indican al procesador de XML el tipo de la i f información que está analizando. ió tá li d Arquitecturas Distribuidas 09/10 47 Notaciones en DTD XML “Algo” que indique el tipo de notación ÆPROBLEMA PORTABILIDAD y Declaración: <!NOTATION nombre (PUBLIC|SYSTEM) identificador> Indica si el identificador es público o privado Nombre de la la notación Indica el comienzo de un nuevo identificador de notación Arquitecturas Distribuidas 09/10 48 Notaciones en DTD XML Notaciones en DTD XML y Ejemplos de uso: <!ELEMENT foto EMPTY> <!ATTLIST foto fuente NOTATION #REQUIRED > <!NOTATION jpeg SYSTEM "image/jpeg"> <!NOTATION png SYSTEM "image/png"> <foto fuente="pepe"/> <foto fuente="maria"/> <foto fuente="paco"/> Arquitecturas Distribuidas 09/10 49 Notaciones en DTD XML Notaciones en DTD XML y Ejemplos de uso: y Notación incluída en parámetros p <!ELEMENT programa (#PCDATA)> <!ATTLIST programa lenguaje NOTATION (lisp|c) #REQUIRED > <!NOTATION lisp SYSTEM "IEEE 1178-1990"> <!NOTATION png SYSTEM "ISO/IEC 9899:1999"> <programa lenguaje="c"> int fact(int n) { if(n==1) return 1; return n*fact(n-1); } </programa> <programa lenguaje="lisp"> (defun fact (lambda (n) (if (=n 1) 1 (fact (- n 1))))) </programa> Arquitecturas Distribuidas 09/10 50 Notaciones en DTD XML Notaciones en DTD XML y Ejemplos de uso: y Notación incluída en parámetros p El qué hacer con cada trozo de código qué ace co cada t o o de cód go no está determinado (depende de la <!ELEMENT programa (#PCDATA)> <!ATTLIST programa aplicación final). Lo importante es lenguaje NOTATION (lisp|c) #REQUIRED que la Notación los diferencia! > <!NOTATION lisp SYSTEM "IEEE 1178-1990"> <!NOTATION png SYSTEM "ISO/IEC 9899:1999"> <programa lenguaje="c"> int fact(int n) { if(n==1) return 1; return n*fact(n-1); } </programa> La parte en rojo es #PCDATA <programa lenguaje="lisp"> (defun fact (lambda (n) (if (=n 1) 1 (fact (- n 1))))) </programa> Arquitecturas Distribuidas 09/10 51 Notaciones en DTD XML y Solución poco portable. y La asignación g de identificadores es arbitraria. y El procesado final de los datos no está prefijado, esto no es problemático, ya que es una característica de XML: cada aplicación que lo usa decide cómo procesar los datos, es decir, interpreta la semántica de los datos según las marcas. Arquitecturas Distribuidas 09/10 52 Entidades en DTD XML Entidades en DTD XML y Son declaraciones abstractas que pueden usarse para definir otras partes de un documento XML (elementos, atributos, etc). y Una definición menos formal: Son declaraciones especiales que se cambian por trozos de código. y Analogía con macros en lenguaje C: <!entity CAPACIDAD "200"> #define CAPACIDAD 200 int a=CAPACIDAD; Arquitecturas Distribuidas 09/10 <p> La capacidad del sistema es de &CAPACIDAD; bits por segundo. 53 Entidades en DTD XML Entidades en DTD XML y Según la aplicación, el formato del código y su ubicación existen e isten varios arios tipos de entidades, cada de entidades cada una se declara con una sintaxis propia. Arquitecturas Distribuidas 09/10 54 Entidades en DTD XML Entidades en DTD XML y Entidades Genéricas: <!ENTITY nombre #PCDATA> y Permiten la substitución de una cadena de texto. Permiten la substitución de una cadena de texto Ejemplo: <!ENTITY minombre "Pepe Perez"> p Oí g gritar mi nombre: &minombre; ; </p> /p <p> Arquitecturas Distribuidas 09/10 55 Entidades en DTD XML Entidades en DTD XML y Entidades Genéricas: <!ENTITY nombre #PCDATA> y Permiten la substitución de una cadena de texto. Permiten la substitución de una cadena de texto Ejemplo: <!ENTITY minombre "Pepe Perez"> <p> Oí gritar mi nombre: &minombre; </p> Arquitecturas Distribuidas 09/10 56 Entidades en DTD XML Entidades en DTD XML y Entidades externas genéricas: <!ENTITY nombre (PUBLIC|SYSTEM) URL> y Permiten la substitución por un texto contenido en una fuente externa. Ejemplo: <!ENTITY minombre SYSTEM "/home/pepe/minombre.txt"> <p> Oí gritar mi nombre: &minombre; </p> Arquitecturas Distribuidas 09/10 57 Entidades en DTD XML Entidades en DTD XML y Entidades parámetro: y Las entidades estudiadas hasta ahora ejercían cambios j en el contenido del XML. y Las entidades parámetro hacen lo mismo PERO EN EL PROPIO DTD Æ Ver ejemplos a continuación. Arquitecturas Distribuidas 09/10 58 Entidades en DTD XML Entidades en DTD XML y Entidades parámetro: <!ENTITY ! % nombre (CDATA)> y Entidades parámetro externas: Entidades parámetro e ternas <!ENTITY % nombre (PUBLIC|SYSTEM) URL> y Ahora se referencian como: %nombre; <--NO COMO &nombre;--> Arquitecturas Distribuidas 09/10 59 Entidades en DTD XML Entidades en DTD XML y Ejemplo: <!ENTITY % contenidoppal "nombre|apellidos|direccion"> nombre|apellidos|direccion > <!ENTITY % idattr "id ID #REQUIRED"> <!ELEMENT dni (%contenidoppal, datosnacimiento)> <!ATTLIST dni %idattr; tipodni (antiguo|nuevo|electonico) #REQUIRED nuevo > y Esto es como escribir: <!ELEMENT dni (nombre|apellidos|direccion, datosnacimiento)> <!ATTLIST dni id ID #REQUIRED tipodni (antiguo|nuevo|electonico) #REQUIRED nuevo > Arquitecturas Distribuidas 09/10 60 Instrucciones de Procesado (PI) en DTD XML en DTD XML y Son declaraciones especiales cuyo significado depende del procesador del XML: <?instruccion (datos)?> Estan delimitadas por “<?” y “?>” Arquitecturas Distribuidas 09/10 61 Instrucciones de Procesado (PI) en DTD XML en DTD XML y Los procesadores interpretan sólo aquellas PI que conocen: <?instruccion (datos)?> El nombre de la instrucción es cualquier palabra. Los q p procesadores del XML ejecutarán PI que reconozcan. eco o ca . Arquitecturas Distribuidas 09/10 Los datos son información opcional que se le pasa al procesador. 62 Instrucciones de Procesado en DTD XML en DTD XML y Ejemplo: <hmtl> <?php echo h "H "Hola l mundo d en PHP!<b PHP!<br>\n" >\ " ?> </ht l> </html> La declaración indica que es una orden de PHP. El procesado asociado d depende del navegador: d d l d Apache interpretará los “datos” como un lenguaje de programación. IIS pasará esta orden por alto. Arquitecturas Distribuidas 09/10 63 Instrucciones de Procesado en DTD XML en DTD XML y Ejemplo: <hmtl> <?php echo h "H "Hola l mundo d en PHP!<b PHP!<br>\n" >\ " ?> </ht l> </html> La declaración indica que es una orden de PHP. El procesado asociado d depende del navegador: d d l d Apache interpretará los “datos” como un lenguaje de programación. IIS pasará esta orden por alto. Arquitecturas Distribuidas 09/10 64 Interpretación de un documento XML por un navegador por un navegador y El comportamiento final depende del navegador particular: y Al menos debe informar si el documento está bien formado o no Ejemplo: formado o no. Ejemplo: <?xml version="1.0"?> <a> Hola <b> Prueba </a> </b> Arquitecturas Distribuidas 09/10 65 Interpretación de un documento XML por un navegador por un navegador y El comportamiento final depende del navegador particular: y Al menos debe informar si el documento está bien formado o no Ejemplo: formado o no. Ejemplo: <?xml version="1.0"?> <a> <b> </a> </b> Arquitecturas Distribuidas 09/10 66 Interpretación de un documento XML por un navegador por un navegador y Ejemplo corregido: <?xml version="1.0"?> <a> Hola <b> Prueba </b> </a> Arquitecturas Distribuidas 09/10 67 Interpretación de un documento XML por un navegador por un navegador y Ejemplo corregido: <?xml version="1.0"?> <a> Hola <b> Prueba </b> </a> Si el navegador no sabe interpretar de un modo especial el XML, entonces, simplemente muestra los contenidos de los elementos. i l l id d l l Arquitecturas Distribuidas 09/10 68 Interpretación de un documento XML por un navegador por un navegador y Si un documento está especificado por su DTD, el navegador debería comprobar e informar si el XML es o no válido. Arquitecturas Distribuidas 09/10 69 XHTML y HTML es muy poco estricto y coherente en cuanto a la definición de las marcas: etiquetas de cierre opcionales, mayúsculas o minúsculas, comillas en los atributos, etc. , y XHTML es HTML conforme a las reglas sintácticas de XML y Documento debe estar bien formado y XHTML hace que los documento sean más fáciles de procesar por una máquina Arquitecturas Distribuidas 09/10 70 Arquitecturas Distribuidas 09/10 71 Espacios de nombres spac os de o b es y El mecanismo de los espacios de nombres (namespaces) permite combinar en un mismo documento XML definiciones procedentes de varios tipos de documentos. tipos de documentos y Un namespace es un grupo de elementos y nombres de atributos Cada grupo (namespace) se puede atributos. Cada grupo (namespace) se puede especificar y validar con su DTD correspondiente. Arquitecturas Distribuidas 09/10 72 Espacios de nombres spac os de o b es y Ejemplo: XHTML M thML MathML <html> <equation> <p> <mrow> <a> <br> <divide> <table> XML Arquitecturas Distribuidas 09/10 U a egado que e t e da Un navegador que “entienda” ambos lenguajes, mostrará correctamente este XML. 73 Espacios de nombres spac os de o b es <?xml version="1.0"?> <html> y Ejemplo: <p> Este documento combina dos lenguajes el XHTML y XHTML M thML MathML el MathML. Esto permite cosas <em> muy interesantes </em>. Por ejemplo, escribir la ecuacion: </p> <math> <html> <equation> <mrow> <p> <mi> a </mi> <a> <mo> + </mo> <mi> b </mi> <br> <mo> = </mo> <mi> c </mi> <table> </mrow> / at </math> </html> <sum> <int> XML Arquitecturas Distribuidas 09/10 U a egado que e t e da Un navegador que “entienda” ambos lenguajes, mostrará correctamente este XML. 74 Espacios de nombres spac os de o b es <?xml version="1.0"?> <html> y Ejemplo: <p> Este documento combina dos lenguajes el XHTML y XHTML M thML MathML el MathML. Esto permite cosas <em> muy interesantes </em>. ¿ESTO ES CORRECTO? Por ejemplo, escribir la ecuación: NO!, ¿QUÉ SUCEDE SI DOS ELEMENTOS TIENEN EL MISMO NOMBRE EN NO! QUÉ SUCEDE SI DOS ELEMENTOS TIENEN EL MISMO NOMBRE EN <reln> <html> <equation> <eq/> DIFERENTES NAMESPACES? <ci>A</ci> <p> <matrix> <a> <matrixrow> <ci>x</ci> <br> <ci>y</ci> </matrixrow> <table> <matrixrow> c /c <ci>z</ci> <ci>w</ci> </matrixrow> </matrix> </reln> <sum> <int> XML </html> Arquitecturas Distribuidas 09/10 U a egado que e t e da Un navegador que “entienda” ambos lenguajes, mostrará correctamente este XML. 75 E Espacios i de nombres d b Frutas Colores <manzana> <melocotón> <uva> <azul> <rojo> <verde> <naranja> j Arquitecturas Distribuidas 09/10 <naranja> 76 Espacios de nombres spac os Frutas de o b es Coloresu <?xml version="1.0"?> <manzana> <manzana/> ... <verde/> <melocotón> ... <uva/> <azul> <rojo> <uva> <verde> <naranja/> <naranja> j ¿Es un color o una fruta? Arquitecturas Distribuidas 09/10 <naranja> 77 Espacios de nombres spac os de o b es y Para evitar ambigüedades los tag se escriben: prefijo_del_namespace:nombre_tag El prefijo indica al interprete cuando p conmutar de un lenguaje a otro. g j Arquitecturas Distribuidas 09/10 78 Espacios de nombres spac os Frutas de o b es Coloresu <?xml version="1"> <manzana> <fruta:manzana/> ... <color:verde/> <melocotón> ... <fruta:uva/> <azul> <rojo> <uva> <verde> <color:naranja/> <naranja> j Un color! Arquitecturas Distribuidas 09/10 <naranja> 79 Espacios de nombres spac os de o b es y Un namespace debe declararse antes de su uso: <elemento xmlns:prefijo="URL"> Atributo válido para cualquier elemento. El namespace lo conoceran él y sus descendientes Lo conoceran él y sus descendientes. Lo habitual es declarar los namespace conocidos en la <raíz>. <raíz> Arquitecturas Distribuidas 09/10 80 Espacios de nombres spac os de o b es y Un namespace debe declararse antes de su uso: <elemento xmlns:prefijo="URL"> Prefijo con el que se identificaran los miembros del namespace. Puede ser cualquier palabra. cualquier palabra Arquitecturas Distribuidas 09/10 81 Espacios de nombres spac os de o b es y Un namespace debe declararse antes de su uso: se declara en el elemento raíz <elemento xmlns:prefijo="URL"> URL con la definición del namespace: su contenido será un DTD o similar. DTD o similar Arquitecturas Distribuidas 09/10 82 Espacios de nombres spac os de o b es y Ejemplo: XHTML M thML MathML <html> <equation> <p> <mrow> <a> <br> <divide> <table> XML VEAMOS LA DEFINICIÓN OS CÓ CORRECTA Arquitecturas Distribuidas 09/10 83 Espacios de nombres spac os de o b es <?xml version="1.0"?> <xhtml:html y Ejemplo: xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:math="http://www.w3.org/1998/Math/MathML“ xmlns:math http://www.w3.org/1998/Math/MathML > XHTML M thML MathML <xhtml:p> Este documento combina dos lenguajes el XHTML y el MathML. Esto permite cosas <xhtml:em> muy interesantes <html> <equation> </xhtml:em>. Por ejemplo, escribir la ecuacion: </xhtml:p> <p> <sum> <a> <math:math><br> <math:mrow> <math:mi> <table> <math:mo> at : <math:mi> <math:mo> <math:mi> </math:mrow> </math:math> a + b = c </math:mi> </math:mo> </math:mi> / at : </math:mo> </math:mi> <int> XML </xhtml:html> Arquitecturas Distribuidas 09/10 84 Espacios de nombres spac os de o b es <?xml version="1"> <xhtml:html y Ejemplo: xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:math="http://www.w3.org/1998/Math/MathML“ xmlns:math http://www.w3.org/1998/Math/MathML > XHTML M thML MathML <xhtml:p> Este documento combina dos lenguajes el XHTML y el MathML. Esto permite cosas <xhtml:em> muy interesantes <html> <equation> </xhtml:em>. Por ejemplo, escribir la ecuación: <p> <a> <math:math> <math:mrow> <br><math:mi> <math:mo> <table> <math:mi> at : o <math:mo> <math:mi> </math:mrow> </math:math> <sum> a + b = c </math:mi> </math:mo> </math:mi> </math:mo> / at : o </math:mi> <int> XML / </xhtml:html> Arquitecturas Distribuidas 09/10 85 Espacios de nombres spac os de o b es y Pueden usarse también espacios de nombre “por defecto : defecto”: <elemento xmlns="URL"> Sin prefijo Arquitecturas Distribuidas 09/10 86 Espacios de nombres spac os de o b es y Ejemplo: <?xml version="1.0"?> XHTML M thML MathML <xhtml:html xmlns="http://www.w3.org/1999/xhtml"> <p> Este documento combina dos lenguajes el XHTML y el MathML. <html> Esto permite cosas <em> muy interesantes<equation> </em>. Por ejemplo, escribir la ecuacion: <p> </p> <sum> <a> <math:math xmlns:math="http://www.w3.org/1998/Math/MathML"> xmlns:math="http://www w3 org/1998/Math/MathML"> <br><math:mi> a </math:mi> <math:mo> + </math:mo> <int> <math:mi> b </math:mi> <table> <math:mo> = </math:mo> <math:mi> c </math:mi> </math:mrow> </math:math> XML SINTAXIS MÁS COMPACTA COMPACTA. </html> Arquitecturas Distribuidas 09/10 87 XSCHEMA y XML Schema y Construcción C ió alternativa l i a los DTD para l DTD especificar ifi el l formato de un documento XML. y Un XSCHEMA es U XSCHEMA en si i mismo i un documento d XML XML: ¡usamos XML para definir XML! Arquitecturas Distribuidas 09/10 88 XSCHEMA y Ventajas sobre DTD: y Más legible. legible y Permite especificar el tipo de datos y Permite espeficar lenguajes XML que usen namespaces (con DTD es muy complejo). y Más posibilidades: y y A nivel de elementos, por ejemplo: con XSCHEMA podemos indicar que un elemento aparece N veces. A nivel de atributos, por de atributos por ejemplo: puede especificarse que un atributo es un número, un dígito binario, etc. Arquitecturas Distribuidas 09/10 89 XSCHEMA y Ejemplo. Dado un XML (notas.xml) para definir notas: <?xml version="1.0"?> <nota> <para>Tove</para> <de>Jani</de> <asunto>Reminder</asunto> <mensaje>Don't j D 't forget f t me thi this weekend!</mensaje> k d! / j </nota> Arquitecturas Distribuidas 09/10 90 XSCHEMA y Podemos escribir su DTD (notas.dtd) como: <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT nota (para, de, asunto, mensaje)> para (#PCDATA)> de (#PCDATA)> asunto t (#PCDATA)> mensaje (#PCDATA)> Arquitecturas Distribuidas 09/10 91 XSCHEMA y La definición alternativa con XSCHEMA sería (notas xsd): (notas.xsd): <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> p // g/ / <xs:element name="note"> <xs:complexType> <xs:sequence> yp g / <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> / p yp </xs:complexType> </xs:element> </xs:schema> Arquitecturas Distribuidas 09/10 92 Lenguajes de estilo y transformación para XML y XSL: y Lenguaje para crear hojas de estilo para documentos XML. y Más complejo que CSS: unos 60 selectores y 250 p j q y 5 propiedades!! y XSLT: y Lenguaje para crear transformaciones en los documentos. y XML Æ HTML Æ WML Æ etc Cada transformación usa una hoja XSLT diferente. Arquitecturas Distribuidas 09/10 93 Lenguajes de estilo y transformación para XML y XPATH: y Lenguaje que permite identificar partes de un documento (concepto similar a #enlace_interno en URL). y XPOINTER: y Lenguaje para definir punteros a puntos o partes de un g j p p p p documento (concepto similar a URL). y XLINK y Mecanismo de hiperenlaces (mas general que las <a> de HTML). y Puede conectar varios objetos en ambas direcciones. P d t i bj t b di i Arquitecturas Distribuidas 09/10 94 Referencias y bibliografía y g y Libros: y y “Learning XML”, Erik T. Ray, O’Reilly, 2001. g , y, y, Disponible en: http://labit501.upct.es/ad/libros Guía rápida: y “XML Syntax Quick Reference”, Mulberry Technologies, Inc 2000 Inc., 2000. Arquitecturas Distribuidas 09/10 95 Referencias y bibliografía y g y WWW: y y y y http://www.w3.org/XML/ p // 3 g/ / Æ Página principal de g p p desarrollo de la tecnología XML http://www.w3.org/TR/2004/REC‐xml11‐20040204/ p g Æ Recomendación de XML 1.1 http://www.w3.org/TR/REC‐xml‐names/ Æ Espacios de nombres http://www.w3.org/TR/xsl/ Æ Hojas de estilo en XML Arquitecturas Distribuidas 09/10 96 Referencias y bibliografía y g y WWW: y y y y http://www.w3.org/XML/ p // 3 g/ / Æ Página principal de g p p desarrollo de la tecnología XML http://www.w3.org/TR/2004/REC‐xml11‐20040204/ p g Æ Recomendación de XML 1.1 http://www.w3.org/TR/REC‐xml‐names/ Æ Espacios de nombres http://www.w3.org/TR/xsl/ Æ Hojas de estilo en XML Arquitecturas Distribuidas 09/10 97 Referencias y bibliografía y g y Tutoriales: y y http://www.w3schools.com/xml/ p // 3 / / Æ Varios tutoriales tecnologías XML http://www.dat.etsit.upm.es/~abarbero/curso/xml/xml p p tutorial.html Æ Tutorial en español, con bastantes enlaces Arquitecturas Distribuidas 09/10 98