190 likes | 347 Views
XML CREATIVO. Álvaro Salido Fernández. ¿Qué era eso del XML?. metalenguaje. reglas. define. Metalenguaje Lenguaje de marcas = tags Estructura : tags , atributos Datos no XML : Entity Formato no XML: Notation dar Formato a XML: Transformaciones de XML a HTML : XSL XSL:
E N D
XML CREATIVO Álvaro Salido Fernández
¿Qué era eso del XML? metalenguaje reglas define • Metalenguaje • Lenguaje de marcas = tags • Estructura : tags, atributos • Datos no XML : Entity • Formato no XML: Notation • dar Formato a XML: • Transformaciones de XML a HTML : XSL • XSL: • especificación W3C para aplicar formato a XML lenguajes
Objetos y XML • Objeto es un espécimen de una clase. • Clase es un conjunto de atributos y métodos propios generales. • Objeto tiene algunos atributos y métodos de su clase. • XML permite Formatear objetos.
Transformaciones XSL • Xpath Rutas de directorios • Xquery MySQL • XSL-FO CSS • 1º Crear una hoja de estilos XSL (plantillas) • 2º Crear plantilla XSL : una por cada fragmento a formatear • Match “nodo a partir del cual se aplica la transformación” • Path : rutas de nodos, texto y atributos • Query : selects • Fo : formato de cada plantilla : margin, padding, etc…
Estructura XSL http://www.utilities-online.info/foprender/#.U5dvCvl_uSo
Convertir XML en PDF utilizando Doc Book, XSL-FO y FOP • Doc Book: predefine las etiquetas y la estructura de un documento XML para ser Doc Book. Es una DTD predefinida. • http://docbook.org/xml/5.0/dtd/docbook.dtd • Artículos divididos en secciones. • Libros divididos en capítulos. • DTD y esquema. • EXTENSIÓN “.xml” • SUBLENGUAJE XML
<!ELEMENT article (((title|titleabbrev|subtitle)*, (info)?), (glossary|bibliography|index|toc|appendix|acknowledgements|colophon)*, (((itemizedlist|orderedlist|procedure|simplelist|variablelist|segmentedlist|glosslist|bibliolist|calloutlist|qandaset|example|figure|table|equation|informalexample|informalfigure|informaltable|informalequation|sidebar|blockquote|address|epigraph|mediaobject|screenshot|task|productionset|constraintdef|msgset|screen|literallayout|programlistingco|screenco|programlisting|synopsis|bridgehead|remark|revhistory|indexterm|funcsynopsis|classsynopsis|methodsynopsis|constructorsynopsis|destructorsynopsis|fieldsynopsis|cmdsynopsis|caution|important|note|tip|warning|anchor|para|formalpara|simpara|annotation)+, ((((section)+, (simplesect)*)|(simplesect)+|((sect1)+, (simplesect)*)|(refentry)+))?)|((section)+, (simplesect)*)|(simplesect)+|((sect1)+, (simplesect)*)|(refentry)+), (glossary|bibliography|index|toc|appendix|acknowledgements|colophon)*)> <!ELEMENT title (#PCDATA|inlinemediaobject|remark|superscript|subscript|xref|link|olink|anchor|biblioref|alt|annotation|indexterm|abbrev|acronym|date|emphasis|footnote|footnoteref|foreignphrase|phrase|quote|wordasword|firstterm|glossterm|coref|trademark|productnumber|productname|database|application|hardware|citation|citerefentry|citetitle|citebiblioid|author|person|personname|org|orgname|editor|jobtitle|replaceable|package|parameter|termdef|nonterminal|systemitem|option|optional|property|inlineequation|tag|markup|token|symbol|literal|code|constant|email|uri|guiicon|guibutton|guimenuitem|guimenu|guisubmenu|guilabel|menuchoice|mousebutton|keycombo|keycap|keycode|keysym|shortcut|accel|prompt|envar|filename|command|computeroutput|userinput|function|varname|returnvalue|type|classname|exceptionname|interfacename|methodname|modifier|initializer|ooclass|ooexception|oointerface|errorcode|errortext|errorname|errortype)*> <!ELEMENTsection(((title|titleabbrev|subtitle)*, (info)?), (((itemizedlist|orderedlist|procedure|simplelist|variablelist|segmentedlist|glosslist|bibliolist|calloutlist|qandaset|example|figure|table|equation|informalexample|informalfigure|informaltable|informalequation|sidebar|blockquote|address|epigraph|mediaobject|screenshot|task|productionset|constraintdef|msgset|screen|literallayout|programlistingco|screenco|programlisting|synopsis|bridgehead|remark|revhistory|indexterm|funcsynopsis|classsynopsis|methodsynopsis|constructorsynopsis|destructorsynopsis|fieldsynopsis|cmdsynopsis|caution|important|note|tip|warning|anchor|para|formalpara|simpara|annotation)+, ((((section)+, (simplesect)*)|(simplesect)+|(refentry)+))?)|((section)+, (simplesect)*)|(simplesect)+|(refentry)+), (glossary|bibliography|index|toc)*)>
Convertir XML en PDF utilizando Doc Book, XSL-FOy FOP • XSL-FO: lenguaje de objetos de formateo XSL para generar documentos en formato PDF a partir de nuestros documentos XML. • Las características de la página. • Los párrafos. • Las listas. • Las tablas. • Los enlaces. • etc. • EXTENSIÓN “.fo” o dentro de una plantilla de XSL
XSL-FO Bloques de contenido Output "Blocks" of content "Flow" into "Pages" of the output media. XSL-FO output is normally nested inside <fo:block> elements, nested inside <fo:flow> elements, nested inside <fo:page-sequence> elements: <fo:page-sequence> <fo:flow flow-name="xsl-region-body"> <fo:block> <!-- Output goes here --> </fo:block> </fo:flow> </fo:page-sequence> Block Area Attributes Blocks are sequences of output in rectangular boxes: <fo:block border-width="1mm"> This block of output will have a one millimeter border around it. </fo:block> http://www.w3schools.com/xslfo/xslfo_xslt.asp
Convertir XML en PDF utilizando Doc Book, XSL-FO y FOP • FOP: El FOP (FormattingObject to PDF) es el primer procesador de objetos de formateo XSL que apareció. Empezó a ser desarrollada en solitario por James Tauber pero posteriormente se incorporo al "Apache XML Project" lo que está acelerando su desarrollo. • versión: Fop-0.18.1-DEV-src.zip que se puede obtener en la siguiente dirección: http://xml.apache.org/dist/fop/. • Prerrequisitos • Como ya hemos dicho es una aplicación en Java por lo que para poder utilizarla el único requisito necesario es tener instalado la máquina virtual Java.
Convertir XML en PDF utilizando Doc Book, XSL-FO y FOP • A partir de aquí tenemos dos posibilidades: • Generar el PDF en dos pasos: • Transformar el fichero gastrono.xml el formato XSL-FO mediante la XSLT anterior y cualquier procesador XSLT. Si por ejemplo utilizamos el XT • xtarticulo.xml articulo.xsl articulo.fo • Transformar el resultado a PDF utilizando el FOP como ya sabemos: • Foparticulo.fo articulopdf.pdf • O generarlo en un único paso utilizando el FOP de la siguiente manera: • Fop -xslarticulo.xsl -xmlarticulo.xml -pdfarticulopdf.pdf
Usando FOP de Apache para realizar transformaciones • D:\1ASIR\XML\fop-1.1-src\fop-1.1\src\java\org\apache\fop\tools\anttasks
Usando FOP de Apache para realizar transformaciones http://www.utilities-online.info/foprender/#.U5dvCvl_uSo
ANEXO Proceso Prerequisitos Como ya hemos dicho es una aplicación en Java por lo que para poder utilizarla el único requisito necesario es tener instalado la máquina virtual Java. basta con el Java 1.1.x o superior. como mínimo la versión 1.1.2 del JDK, ya que para las versiones 1.1.x hay algunos ejemplos que dan problemas. Instalación descomprimir el fichero crea una gran cantidad de directorios con todo lo necesario para empezar a trabajar y ver su funcionamiento: ejemplos, documentación, ficheros bat, etc.
ANEXO Proceso Funcionamiento Para probar que todo nos funciona correctamente podemos realizar los siguientes pasos: Dentro de la carpeta raiz del FOP, mediante el intérprete de comandos nos situamos en el archivo fop Si todo el proceso anterior ha funcionado correctamente significara que ya tenemos todo perfectamente instalado para trabajar con el FOP. Y para convertir nuestro documento hola.fo, lo colocamos en el directorio raiz de la aplicación y ejecutamos el fichero Fop.bat de la siguiente manera: Fop hola.fo hola.pdf Lo cual nos genera el siguiente fichero PDF: Hola.fo en formato PDF
ANEXO Proceso Pero con la anterior expresión sólo hemos ejecutado la opción más sencilla que nos ofrece la aplicación. También podríamos utilizar el FOP directamente como browser de ficheros XSL-FO. No tendríamos más que ejecutar el comando anterior de la siguiente manera: Fop hola.fo -awt Obteniendo el siguiente resultado: Hola.fo visualizado en browser del FOP. También podríamos convertir al formato MIF, TXT, etc. Para terminar esta sección simplemente un comentario. Es importante que os fijéis que el documento PDF lo hemos generado directamente desde el fichero hola.fo. Para el ejemplo lo he escrito directamente a mano. Pero como ya he dicho anteriormente se trata de un fichero XML que podríamos haber generado desde otro fichero XML mediante una XSLT. Es decir, la conversión de nuestro XML original a PDF hubiese constado de dos partes: Conversión XML original a XSL-FO mediante XSLT y un procesador XSLT. Conversión de XSL-FO a PDF mediante el procesador FOP. El FOP nos permite también realizar esta acción en un único paso (el FOP lleva incorporado el procesador XSLT Xalan). Si suponemos que nuestro documento inicial se llama hola.xml, mediante la siguiente instrucción lo hubiesemos podido realizar: Fop -xsl hola.xsl -xml hola.xml -pdf hola.pdf
Fuentes de inspiración • XML : Manual Imprescindible. Juan Diego Gutiérrez Gallardo. Anaya Multimedia (2005) • http://www.programacion.com/articulo/convertir_xml_en_pdf_utilizando_xsl-fo_y_fop_73 • http://docbook.org/ • http://xmlgraphics.apache.org/fop/download.html • http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=fop • http://www.hipertexto.info/documentos/xsl.htm • http://xml-utils.com/conferencia-xsl.html • http://catcode.com/cis97yt/xslfo.html • http://www.freeformatter.com/xsl-transformer.html#xslt-examples • http://www.w3schools.com/xslfo/xslfo_pages.asp • http://www.utilities-online.info/foprender/#.U5dvCvl_uSo