XSLT%% Tecnologías XML Transformación%de%documentos%XML%% Transformación de documentos XML mást onlin Direc Ingen de S Web El%problema%de%presentar%un% documento%XML%% • XML$no$incorpora$ninguna$semán2ca$intrínseca$ de$presentación$% • Soluciones%% – XML+CSS$ – XML+XSL$(Extensible$Stylesheet$Language,$"lenguaje$ extensible$de$hojas$de$es2lo").$% • Familia%de%lenguajes%basados%en%XML%% • Permite%describir%cómo%la%información%contenida% en%un%documento%XML%debe%ser%transformada%o% formateada%para%su%presentación%en%un%medio% específico%% ¿Por%qué%XSL?%% • • Está%diseñado%para%integrarse%en%la%arquitectura%XML.% %Es%mucho%más%potente%que%CSS.% • Cada%vez%hay%más%herramientas%para%XSL.% – CSS%no%Hene%capacidades%de%transformación.% CSS%versus%XSL%% CSS$ XSL$ ¿Puede&ser&usada&con& HTML?&% Si% NO% ¿Puede&ser&usado&con& XML?&% SI% SI% ¿Lenguajes&de& transformación?&% NO% SI% ¿Sintaxis?&% CSS% XML% XSL%% • Formado%por:%% % – XSLT%(Extensible%Stylesheet%Language%TransformaHons):% permite%converHr%documentos%XML%de%una%sintaxis%a%otra% (por%ejemplo,%de%un%XML%a%otro%o%a%un%documento%HTML).%% – XSLUFO%(lenguaje%de%hojas%extensibles%de%formateo%de% objetos):%permite%especificar%el%formato%visual%con%el%cual% se%quiere%presentar%un%documento%XML,%es%usado% principalmente%para%generar%documentos%PDF.%% – XPath,%o%XML%Path%Language:%sintaxis%(no%basada%en%XML)% para%acceder%o%referirse%a%porciones%de%un%documento% XML%% Estas%tres%especificaciones%son%recomendaciones%oficiales%del% W3C.%% Transformación%XSLT%% • Transformación%estructural:%% – Los%datos%son%converHdos%de%la%estrucutra%de% entrada%(XML)%a%una%estructura%que%refleje%la% salida%deseada%% % • Formato%(pdf,%html,%etc.)%% – La%salida%de%datos,%generados%por%la%nueva% estructura%se%entrega%en%el%formato%requerido% (PDF,%HTML,%delimitado%por%comas)%% ¿%Por%que%transformar%XML%?%% • Conversión%entre%modelos%de%datos%% – Aunque%legible,%XML%está%pensado%para%el% intercambio%de%información%entre%aplicaciones.%% • Es%necesaria%una%capa%de%presentación%para% hacer%“amigable”%el%acceso%de%los%humanos%a% la%información%XML.%% – XML%produce%separación%entre%el%modelo%de%datos% y%presentación%visual.%% ¿Cómo%funciona?%% • Durante%el%proceso%de%transformación,%XSLT% uHliza%XPath$para%definir%partes%del%documento% fuente%que%encajan%dentro%de%una%o%mas% planHllas%predefinidas%% • Por%cada%coincidencia,%XSLT%transformará%esta% parte%del%documento%fuente%para%generar%el% documento%resultante%% • La%porción%del%documento%fuente%que%no%encaja% con%la%planHlla%permanecerá%sin%modificación% alguna%% Tecnologías XML Proceso de publicación XML-XSL Proceso%de%publicación%XMLUXSL%% Procesador de XSLT XML original Nueva Nueva Estructura Nueva Estructura XML + FO Estructura XML + FO XML + FO XSL Coordinador: Dr. Oscar Sanjuán Martínez más onli Procesador Dire De XSL-FO Inge de S Web HTML, PDF, ... Ejemplo:%Transformando%a%HTML%% poema.xsl%% % <?xml$version=”1.0”?>$$ <xsl:stylesheet$version=”1.0”$% $xmlns:xsl=”hPp://www.w3.org/1999/XSL/Transform”>$$ $ <xsl:output$method=”html”/>$% $ <xsl:template$match=”/”>$$ <html>$% $<head>$$ $ $<2tle>Ejemplo</2tle>$% $</head>$$ $<body>$% $ $<h1>Poema</h1>$$ $</body>$% </html>$$ </xsl:template>$$ % </xsl:stylesheet>$% Espacio%de% nombres%% PlanHlla% Reglas%de%planHllas%% • Las%reglas%de%planHllas%(templates)%se%idenHfican% mediante:%% $<xsl:template$match=”$.$.$.$”>$% %...resultado...%% $</xsl:template>$% • El%valor%del%atributo%match%es%una%expresión% %Xpath$$$ • Cuando%el%procesador%encaja%el%nodo%actual%con% la%expresión%genera%el%valor%de%la%planHlla%% Asociar%hoja%de%esHlos%a%documento% XML% • Es%posible%indicar%en%el%documento%XML%qué% hoja%de%esHlos%XSL%lleva%asociada%o%también%la% CSS%% – Type:%“text/css”%(CSS)%o%“text/xsl”%(XSL)”% • Un%navegador%puede%reconocer%dicha% información%y%mostrar%el%resultado%de%la% transformación% <?xmlWstylesheet$type=$“text/css”$href$=$“poema.css”?>$ <?xmlWstylesheet$type=$“text/xsl”$href$=$“poema.xsl”?>% Ejemplo:%Asociando%una%hoja%de%esHlos% a%un%documento%% • XML%% Poema.xml%% <?xml%version=”1.0”%encoding="ISOU8859U1"?>%% <?xml−stylesheet%type=”text/xsl”%href=”poema.xsl”?>%% <poema%fecha=”Abril%de%1915”%lugar=”Granada%”>% <Htulo>Alba</Htulo>% <verso>Mi%corazón%oprimido</verso>% <verso>late%junto%a%la%alborada</verso>% ...% </poema>%% Ejemplo:%Obtener%valores%% poemaLugarFecha.xsl%% <?xml%version="1.0"?>%% <xsl:stylesheet%version="1.0"%% %xmlns:xsl="hlp://www.w3.org/1999/XSL/Transform">%% <xsl:output%method="html"/>%% <xsl:template%match="poema">% %Fecha%:%<xsl:valueUof%select="@fecha"/>%,% %Lugar%:%<xsl:valueUof%select="@lugar"/>%% </xsl:template>%% </xsl:stylesheet>%% Ejemplo%básico%% <?xml%version=%“1.0”?>% <?xmlWstylesheet$type=$“text/xsl”$href$=“intro.xsl”?>$ <miCurso>% %<curso>Curso%Arquitectura%de%Datos</curso>% </miCurso>% <?xml%version%=%"1.0"?>% <xsl:stylesheet%version%="1.0"%xmlns:xsl="hlp://www.w3.org/1999/XSL/Transform">% $<xsl:template$match$=$"miCurso">$ % %<html>% % % %<body><p><xsl:valueWof$select="curso"/></p></body>% % %</html>% $</xsl:template>$ </xsl:stylesheet>% <html>% %<body><p>Curso%de%Lenguajes%para%Internet</p></body>%% </html>% Estructura%básica%de%una%hoja%XSL%% • Elementos$de$XSLT:%% – Pertenecen%al%namespace&xsl%% – Sus%eHquetas%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%<fecha>%% • Elementos$de$extensión:$% – Son%elementos%noUestándar%(al%igual%que%los%LRE),%que%son% manejados%por%implementaciones%concretas%del%procesador.% Normalmente,%no%los%uHlizaremos%% <xsl:stylesheet>%% • Es%el%elemento%raíz%de%una%hoja%XSL%% – version:%Suele%ser%1.0%% – xmlns:xsl:%Asigna%el%namespace&xsl%(las%eHquetas% de%XSL%empiezan%por%el%prefijo%xsl:).%El%valor%para% XSLT%suele%ser% %hPp://www.w3.org/1999/XSL/Transform$% <xsl:stylesheet$version$="1.0"$ xmlns:xsl=$"hPp://www.w3.org/1999/XSL/Transform">$ $...$ </xsl:stylesheet>% Elementos%de%nivel%superior%% • • • • Son%elementos%hijos%de%xsl:stylesheet%% 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.% xsl:output%% xsl:stripUspace%% xsl:namespaceUalias%% xsl:template%% xsl:preserveUspace%% xsl:alributeUset%% xsl:include%% xsl:key%% xsl:variable%% xsl:import%% xsl:decimalUformat%% xsl:param%% <xsl:output>%% • Define%qué%Hpo%de%salida%se%va%a%generar%como% resultado%% – method:%xml,%html%o%text%% – encoding:%define%la%forma%de%representar% caracteres%que%se%adoptará%en%la%salida% (isoU8859U1,%UTFU8,%UTFU16,%windowsU1252)%% – omitUxmlUdeclaraHon:%yes%o%no.%Indica%si%se%genera% o%no%la%declaración%<?xml...?>%% – indent:%yes%o%no.%Si%es%yes,%el%procesador%(para% salidas%xml%o%html)%indentará%el%resultado%% Otros%elementos%de%nivel%superior%% • <xsl:include>$que%permite%referenciar% planHllas%procedentes%de%una%fuente%externa%% • <xsl:stripWspace>$que%elimina%antes%del% procesamiento%todos%los%modos%consistentes% en%espacios%en%blanco%% • <xsl:preserveWspace>$manHene%los%espacios% en%blanco%% Reglas%de%transformación% XSLT:Templates%% • Es%el%elemento%básico%y%fundamental%del%lenguaje% de%transformación%XSLT%% • Una%regla(o“template”)consta%de%dos%partes:%% – Una%“e2queta”%formada%por%un%patrón%de%localización% que%selecciona%nodos%en%el%árbol%XML%origen%sobre%los% que%se%aplica%la%tranformación%% • Expresión%Xpath.% – Una%“acción”%que%indica%la%transformación%a%realizar% sobre%los%nodos%seleccionados.%% • Cada%hoja%de%esHlo%XSL%debe%contener%al%menos% una%regla%si%se%quiere%que%ejecute%algo%% Obtención%de%patrones%% • <xsl:template%match=“...”>% % • <xsl:applyUtemplates%select=“...”>%% <xsl:template>%% • Cada%eHqueta%<xsl:template>%conHene%reglas%por% aplicar%a%ciertos%elementos%de%un%nodo%% – match%es%uHlizado%para%asociar%la%planHlla%con%un% elemento%XML.%El%atributo%match%también%puede% uHlizarse%para%aplicarse%a%una%rama%completa%del% documento%XML%(Por%ejemplo%match="/"%define%a% todo%el%documento)%% – name%Además%de%cuando%encaja,%un%template%puede% invocarse%explícitamente%(en%ese%caso%se%necesita%que% tenga%un%nombre)% % • Ejemplo:%<xsl:template%match="/">%% Ejemplo%% <xslTutorial%>% %<bold>Hello,%world.</bold>% %<red>I%am%</red>%% %<italic>fine.</italic>%% </xslTutorial>%% % <p>%% %<b>Hello,%world.</b>% </p>% <p%style="color:red">I%am%</p>% <p>%<i>fine.</i></p>% <xsl:stylesheet$$ $xmlns:xsl='hlp://www.w3.org/1999/XSL/Transform'>%% <xsl:template$match="bold">% %<p><b><xsl:valueWof$select="."/></b></p>% </xsl:template>% <xsl:template$match="red">% %<p%style="color:red"><xsl:valueWof$select="."/></p>% </xsl:template>% <xsl:template$match="italic">% %<p><i><xsl:valueWof$select="."/></i></p>%% </xsl:template>% </xsl:stylesheet>% Hello,%world.% I%am% fine.& <xsl:applyUtemplates>%% • Se%uHliza%para%indicar%al%procesador%que% intente%emparejar%templates%con%cierto%nodo% o%conjunto%de%nodos%(nodeset)%% – select:%Su%valor%es%una%expresión%XPath%de% conjunto%de%nodos.%El%procesador%intentará% emparejar%ese%conjunto%de%nodos%con%sus% templates%respecHvos%% • Permite%realizar%un%tratamiento%recursivo%de% todos%los%elementos%del%árbol%fuente%% Ejemplo%% <?xml%version="1.0"%encoding="ISOU8859U1"?>% <xsl:stylesheet%version="1.0”% %xmlns:xsl="hlp://www.w3.org/1999/XSL/Transform">%% % <xsl:template%match="/">%% %<html>% %<body>% %<h2>My%CD%CollecHon</h2>%% %<xsl:applyUtemplates/>%% %</body>%% %</html>%% </xsl:template>%% % <xsl:template%match="cd">%% %<p>%% %<xsl:applyUtemplates%select="Htle"/>%% %<xsl:applyUtemplates%select="arHst"/>%% %</p>%% </xsl:template>%% % <xsl:template%match="Htle">% %Title:%<span%style="color:#ff0000">%% %<xsl:vaueUof%select="."/></span>% %<br%/>% </xsl:template>% % % <xsl:template%match="arHst">% %ArHst:%<span%style="color:#00ff00">%% %<xsl:valueUof%select="."/>% %</span>%% %<br%/>%% </xsl:template>%% % </xsl:stylesheet>%% % Xpath%% • ObjeHvo:%IdenHficar%elementos%%% • Tienen%la%forma%% – nodo1/nodo2/.../nodoN%% • Ejemplo:%persona/apellido/materno%% • Describen%un%camino%(path)%% • Resultado:% – Un%conjunto%de%nodos% – String,%número%o%boolean%% XPath%versus%Sistema%de%archivos%% Sistema$de$Archivos$ $ Xpath$ Ficheros%y%directorios%% % Respecto%a%directorio%actual%% % % *$=%cualquier%cosa%% % Un%fichero%por%ruta%% % Nodos%dentro%de%nodos%% % Respecto%a%nodo%actual%o%% de%contexto% % *$=%cualquier%nodo%% % Uno%o%varios%nodos%por%ruta%% Resumen%de%sintaxis%abreviada%Xpath%% • • • • • • • • • • • • X%–%hijo%elemento%“X”%% *%U%todos%los%hijos%elemento%% text()%U%todos%los%hijos%texto%% @Y%–%atributo%“Y”%% X[1]%–%primer%hijo%“X”%% X[last()]%U%úlHmo%hijo%“X”%% */X%–%nietos%“X”%% X//Y%–%descendientes%“Y”%de%hijo%“X”%% //Y%–%descendientes%“Y”%de%la%RAIZ%% //Y/X%U%descendientes%“Y”%de%HIJO%“X”%% ..%U%padre%% //X[1][@Y=”Z”]%U%primeros%hijos%X%con%atributo%Y=”Z”%% <xsl:valueUof>%% • La%eHqueta%<xsl:valueUof>%se%uHliza%para% seleccionar%el%valor%de%una%eHqueta%XML%y% agregarlo%al%archivo%de%salida%de%la% transformación%% • El%valor%del%atributo%select$conHene%una% expresión%XPath.$Esta%trabaja%como%la%navegación% de%un%sistema%de%ficheros%donde%una%diagonal% verHcal%delantera%(/)%selecciona%subdirectorios%% • Ejemplo:$ <xsl:valueWof$select="catalogo/cd/2tulo"/$>$% % Ordenar%nodos:%<xsl:sort>%% • Permite%aplicar%un%template&a%un%conjunto%de% nodos%ordenándolos%alfabéHca%o%numéricamente%% • Sintaxis:%% <xsl:applyWtemplates$select=‘XPATH’>$ $ $<xsl:sort$select=“XPATH”$% $ $dataWtype=“text|number”$% $ $order=“ascending|descending”/>$ $<xsl:sort$...$/>$% </xsl:applyWtemplates>$% Ejemplo%% <source>% <name>Juan</name>% <name>Jaime</name>% <name>Carlos</name>% <name>Alicia</name>% <name>Marta</name>% </source>% <xsl:stylesheet$version%=%'1.0'%% %xmlns:xsl='hlp://www.w3.org/1999/XSL/Transform'>% <xsl:template$match="/">% %<TABLE>% % %<xsl:forWeach$select="//name">% % % %<xsl:sort$order="ascending"%select="."/>% % % % %<TR>% % % % % %<TH><xsl:valueWof$select="."/></TH>% % % % %</TR>% </xsl:forWeach>% % % </TABLE>%% % </xsl:template>%% </xsl:stylesheet>%% % <TABLE>%% %<TR>% % %<TH>Alicia</TH>% %</TR>% %<TR>% % %<TH>Carlos</TH>% </TR> % % %<TR>% % %<TH>Jaime</TH>% </TR> % % <TR>% % % %<TH>Juan</TH>% %</TR>% %<TR>% % %<TH>Marta</TH>% %</TR>% </TABLE>%% Alicia$ Carlos$$ Jaime$$ Juan$$ Marta% Sentencias%iteraHvas:%<xsl:forUeach>%% • La%eHqueta%XSL%<xsl:forWeach>$se%uHliza%para% seleccionar%todos%los%elementos%XML%del%nodo% especificado.%% • El%valor%del%atributo%select$conHene%una% expresión%XPath.$Esta%trabaja%como%la%navegación% de%un%sistema%de%ficheros%donde%una%diagonal% verHcal%delantera%(/)%selecciona%subdirectorios.%% • Sintaxis: $$ <xsl:forWeach$select=“XPATH”>$ $...$% </xsl:forWeach>$% Ejemplo%% <xslTutorial%>% <list>%<entry%name="A"/>% %<entry%name="B"/>% %<entry%name="C"/>% %<entry%name="D"/>% </list>% </xslTutorial>% <HTML>% <HEAD>%</HEAD>% <BODY>%A,%B,%C,%D,%</BODY>% %</HTML>% <xsl:stylesheet$$ $xmlns:xsl='hlp://www.w3.org/1999/XSL/Transform'%>%% <xsl:template$match="list">% %<xsl:forWeach$select="entry">%% % %<xsl:valueWof$select="@name"/>%% % %<xsl:text>%,%</xsl:text>% %</xsl:forWeach>%% </xsl:template>% </xsl:stylesheet>% A,%B,%C,%D,% Sentencias%selecHvas:%<xsl:if>%% • Permite%decidir%si%se%va%a%procesar%o%no%una% parte%de%la%hoja%XSL%en%función%de%una% condición.%% • Sintaxis:%% <xsl:if$test=‘condición’>$...$ </xsl:if>$% • No%conHene%parte%else.%% • Podemos%usar%=,%!=,%>=,>%y%not()%% Ejemplo%% <xsl:stylesheet$$ $xmlns:xsl='hlp://www.w3.org/1999/XSL/Transform'%>% <xsl:template$match="list">%% %<xsl:forWeach$select="entry">% % %<xsl:valueWof$select="@name"/>% % %<xsl:if$test="not(posi2on()=last())">%% % % %<xsl:text>%,%</xsl:text>%% % %</xsl:if>%% %</xsl:forWeach>%% </xsl:template>%% </xsl:stylesheet>%% A,$B,$C,$D$ Sentencias%selecHvas:%<xsl:choose>%% • Permite%decidir%qué%parte%de%una%hoja%XSL%se%debe%procesar%en% función%de%varias%condiciones%% • ConHene%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)% • Sintaxis:% <xsl:choose>$ $<xsl:when$test=“condición”>$% $ $...$ $</xsl:when>$ $<xsl:when$test=“condición”>$ $ $...$ $</xsl:when>$ $<xsl:otherwise>$ $ $...$ $</xsl:otherwise>$%% </xsl:choose>$% % Ejemplo% <xslTutorial>% <SECTION>% %<DATA>I%need%a%pen.%</DATA>% %<DATA>I%need%some%paper.%</DATA>% <SUMMARY>%% %I%need%a%pen%and%some%paper%% </SUMMARY>%% </SECTION>%% <SECTION>%% <DATA>I%need%bread.</DATA>%% <DATA>I%need%buler.</DATA>% </SECTION>%% </xslTutorial>%% % % <HTML>%<HEAD>%</HEAD>% <BODY>% <P>SUMMARY:% I%need%a%pen% and%some%paper</P>% <P>DATA:%I%need%bread.% </P>% <P>DATA:%I%need%buler.% </P>% </BODY>%</HTML>% <xsl:stylesheet$xmlns:xsl='hPp://www.w3.org/1999/XSL/Transform'$>$$ $<xsl:template$match="//SECTION">$ $ $<xsl:choose>$ $ $ $<xsl:when$test='SUMMARY'>$ $ $ $<P><xsl:text>SUMMARY:</xsl:text><xsl:valueWof$select="SUMMARY"/></P>$$ $ $ $</xsl:when>$ $ $ $<xsl:otherwise>$ $ $ $ $<xsl:forWeach$select="DATA">$ $ $ $ $ $<P><xsl:text>$DATA:$</xsl:text>$<xsl:valueWof$select="."/></P>$ $$ </xsl:forWeach>$ $ $ $ $ $ $ $</xsl:otherwise>$ $ $</xsl:choose>$ </xsl:template>$ $ </xsl:stylesheet>$ SUMMARY:$I$need$a$pen$$ and$some$paper$ DATA:$I$need$bread.$$ DATA:$I$need$buPer.$ Construcción%de%elementos%en%el%árbol% resultado%% • ¿Cómo%generar%un%elemento%con%cierta%eHqueta%y%“construir”%sus% atributos?%% • A%veces%la%sintaxis%no%nos%lo%permite%directamente% Ej.%<BODY$BGCOLOR=“<xsl:valueWof$select=“colorWelegido”/>”>$% • Se%pueden%uHlizar%los%llamados%AVT$(APribute$Value$Template):$las% expresiones%entre%llaves%se%evalúan%como%si%hubiera%un%valueUof%% – Para%poner%llaves%"de%verdad",%poner%cada%una%dos%veces% • Se%pueden%necesitar%instrucciones%para%“construir”%dichos% elementos% • xsl:element:%Construye%un%elemento%en%el%árbol%resultado%% – Atributos:%name% • xsl:aPribute:%añade%un%atributo%al%elemento%% – Atributos:%name%% – El%valor%está%encerrado%como%texto%libre%dentro%de%xsl:alribute%% Ejemplo%% <BODY%BGCOLOR=“#00FFFF”>% <P>Esto%es%una%prueba</P>% </BODY>% <xsl:element%name=“BODY”>% %%%%%%%<xsl:alribute%name=“BGCOLOR”>% %%%%%%% % %#00FFFF% %</xsl:alribute>% %<xsl:element%name=“P”>% %%%%%%% % %Esto%es%una%prueba% %%%%%%% %</xsl:element>% </xsl:element>% Definición%de%variables%% • Permiten%asignar%valores%a%eHquetas%para%usarlos% cómodamente%% • Sintaxis:%% $<xsl:variable$name=“nombre”$select=“XPATH”>$% • No%existe%el%concepto%de%variable%global.%La% acumulación%de%valores%debe%hacerse%mediante% llamadas%recursivas%a%funciones.%% • Se%definen%dentro%de%<xsl:template>&y%NO% conservan%el%valor%de%una%llamada%a%otra%del% template.%% Tecnologías XML tabla.xsl barra.xsl arte.xsl Coordinador: Dr. Oscar Sanjuán Martínez máster online en Dirección e Ingeniería de Sitios Web Tecnologías XML ie5.xsl ie4.xsl nav3.xsl nokia.xsl sony.xsl edi_x.xsl sap_y.xsl flat_z.xsl máster online Direcci Ingenie de Sitio Web Procesadores%XSLT%% • Aplicación%de%una%hoja%de%esHlo%a%una%fuente% XML%para%producir%una%salida%% • MSXML3&SP4&(Internet&Explorer)& hlp://www.microso.com/enUus/download/ details.aspx?id=23412% • Saxon&& hlp://saxon.sourceforge.net/% • Xalan&& hlp://xalan.apache.org/index.html% % Referencias%% • W3Schools:% hlp://www.w3schools.com% • ElsiHodeXSLT:% hlp://www.xslt.com%% • Especificación%XSL.%% hlp://www.w3.org/Style/XSL%% • Especificación%XSLT.% hlp://www.w3.org/TR/xslt%%% Parsers%XML%% % Tecnologías XML Procesamiento de XML Procesamiento%de%XML%% Coordinador: Dr. Oscar Sanjuán Martínez má onl Dir Ing de We ¿Qué%es%un%parser%XML?%% • Un%parser$o%procesador$o%analizador$ sintác2co$procesa%el%documento%XML%y% verifica%que%es%XML%bien%formado%(y/o%válido)%% • Es%la%herramienta%principal%de%cualquier% aplicación%XML.%Podemos%incorporarlos%a% nuestras%aplicaciones,%de%manera%que%estas% puedan%manipular%y%trabajar%con%documentos% XML%% Parsing Parsing%% más onli Dire Inge de S Web Documento XML Parser XML XML DTD XML Schema Coordinador: Dr. Oscar Sanjuán Martínez Aplicación XML Tipos%de%parsers%% • Sin$validación:%chequea%que%el%documento% esté%bien$formado$de%acuerdo%a%las%reglas%de% sintaxis$de%XML%% • Con$validación:%además%de%comprobar%que%el% documento%está%bien%formado,%comprueba% que%éste%sea%válido%uHlizando%un%DTD$% En&el&caso&de&uElizar&un&DTD,&es&preferible&uElizar&un& parser&con&validación% Parsers%% • Los%navegadores%incluyen%sus%propios%parsers.%% – Microso%Internet%Explorer%5%(o%superior),%que% uHliza%el%parser%de%MS%(incluido%en%la%librería% MSXML.DLL)%% – Mozilla,%que%internamente%uHliza%el%parser%EXPAT% (escrito%en%C)%% • DOM%y%SAX%son%parsers%XML%que%comprueban% que%el%documento%esté%bien%formado%y%válido%% SAX%y%DOM%% • Las%APIs%de%SAX%y%DOM%están%estandarizadas%%y% existen%un%gran%número%de%implementaciones% para%disHntos%lenguajes%(C++,%Java,%C#,etc.)% – Ej.:%Apache%Soware%FoundaHon%proporciona%Crimson$ (SAX%y%DOM%sólo%para%Java),%Xerces$(SAX%y%DOM)%y% Xalan$(XSL)%% – En%el%caso%de%Java,%familia%de%paquete%org.xml.sax$y% org.w3c.dom$(básicamente%conHenen%interfaces%y% clases%abstractas)%% – Lo%que%no%está%estandarizado%es%cómo%crear%instancias% de%los%parsers%% JAXP%(Java%API%for%XML%Processing)%% • Forma%parte%de%J2SE%a%parHr%de%la%versión%1.4%% • Define%un%API%para%trabajar%con%parsers%SAX,%DOM%y% transformaciones%XSL%% – Proporciona%factorías%para%crear%instancias%de%parses%y% transformadores%XSL%de%manera%portable%% • Oracle%proporciona%una%implementación%de%JAXP%para% versiones%anteriores%a%J2SE%1.4%% – Incluye%las%APIs%org.xml.sax,%org.w3c.dom$y% %javax.xml.{parsers,$transform}$% – Incluye%Crimson%y%Xalan%como%implementaciones%por% defecto%% – Se%pueden%usar%otras%implementaciones%vía%configuración%% Lenguajes%derivados%de%XML%% • MathML%% • XKMS% • SVG% • XML%Query%% – Visualización%de%ecuaciones% matemáHcas%% – Gráficos%vectoriales%% • SMIL% – Presentaciones%mulHmedia%% • P3P%% – Descripción%de%caracterísHcas%de% privacidad%% • WML%% – Similar%a%HTML%para%teléfonos% móviles%% • VoiceML% – Portales%basados%en%voz%% • XML%Signature% – Firma%de%recursos%Web%% – Firmas%y%criptograÖa%% – Consultas%de%documentos% (Bases%de%datos)%% • XBRL% – Contabilidad%% • ebXML%% – Negocios%electrónicos%(eU% business)%%% • SyncXML%% – Sincronización%de%disposiHvos%% • UPnP% – Plug%and%Play%universal%% Tecnología%XML.%Referencias%% • •%Libro&recomendado& %XML&imprescindible.%E.R.%Harold%y%W.S.%Means.%AnayaU%O’Reilly,% 2005.%% • hlp://www.w3.org%% – Página%web%donde%están%los%estándares%de%Internet%% – Oficina%española%% – % %www.w3c.es% %% • hlp://www.xml.org%% – El%portal%de%XML%para%la%industria%% % • hlp://topxml.com% – Aràculos%y%soware%XML%% Referencias%Generales%% • Guías%breves%de%tecnologías%W3C.%% – Oficina%Española%W3C% www.w3c.es%% • Programación%de%Aplicaciones%Web%% – S.%Rodríguez%de%la%Fuente%et%al.% Editorial%Thomson,%Madrid,%2003%%