Personal tools
You are here: Home Documentación Charlas en el Chat Formateo de XML
Document Actions

Formateo de XML

by Lorenzo Gil Sanchez last modified 23-10-2004 11:22 PM

Imparte: Lorenzo Gil Sánchez. Fecha: 27 de Marzo de 2003

lgsbueno, pues vamos a ir empezando y el que llegue tarde que vaya leyendo mas rapido, ok?
--> NinaNutz (mariajo@gate6172.ugr.es) has joined #gcubo
bitlandeso, y si no mañana o pasado en el log
--- malglam_cena is now known as malglam
--- lgs sets mode +m #gcubo
--- ChanServ gives channel operator status to malglam
lgspues entonces empezamos
bitlandhola NinaNutz, malglam, ya era hora :D
--- bitland removes voice from enla_cenad
--- bitland removes voice from NeoSNK
--- bitland removes voice from NinaNutz
--- bitland removes voice from PummelCena
--- bitland removes voice from SIaughter
malglamya nos hemos vitaminado y mineralizado
--- bitland removes voice from tgz
lgscomo ya nos conocemos sobran las presentaciones, asi que me dispongo a empezar con la charla que habia programada para hoy
lgscomo todos sabeis hoy vamos a hablar del formateo de xml
lgsHoy seguimos con el tema de XML viendo que a mucha gente puede interesarle
lgsLa semana pasada y tras la estupenda charla de Carmen muchos de vosotros no teniais muy claro para qué sirve el XML
lgsHoy vamos a centrarnos en una utilidad muy práctica de XML:
lgsEscribir documentos, ya sean artículos simples, libros o lo que sea.
--> JABcomics (~JANDERMAN@cliente-217216130200.cm128.grnpa.supercable.es) has joined #gcubo
--- bitland removes voice from JABcomics
lgsEn la segunda parte de la charla explicaremos una técnicas para convertir nuestros documentos XML a un formato más legible como Postcript, pdf, html o simplemente txt.
lgsComo ya explicó Carmen cuando escribimos un documento XML lo más usual es utilizar un dtd para que nuestro documento siga unas reglas determinadas.
lgsPerdon, se me olvidaba decir que las preguntas se las haceis a bitland
lgsy podeis hacerlas cuando querais, no solo al final
lgssigo
lgsEn nuestro caso de hoy vamos a usar Docbook por ser el DTD más popular para escribir documentación.
lgsDocbook en realidad es un DTD para el lenguaje SGML, que es el padre de XML.
bitland¿nos puedes recordar rápidamente que era un dtd?
lgsPero para no liaros mucho simplemente os diré que vamos a usar la versión para XML de Docbook.
lgsok bitland, un dtd es un document type definition, es decir,
lgsun conjunto de reglas que especifican cuando un documento xml es válido
lgsuna cosa es que el documento xml siga las reglas sintácticas de xml (entonces decimos que es bien formado)
lgsy otra cosa es que además de eso cumpla las reglas que le dice el dtd, entonces es válido
lgsos recuerdo que para usar xml no hace falta usar dtds
lgspero es bastante recomendable
lgssigo con la charla y poco a poco se te aclararan las cosas bitland
lgsPero para no liaros mucho simplemente os diré que vamos a usar la versión para XML de Docbook.
lgsPues ya sabeis, a instalar ese paquete:
lgsapt-get install docbook-xml
lgs(Siento ser tan debian-centrista y prometo que a partir de mi próxima charla los ejemplos estarán también para RedHat al menos)
lgsA continuación vamos a prepararnos para editar un documento XML con nuestro editor favorito, que por supuesto es Emacs :)
lgsPara ello instalaremos un módulo para Emacs para editar XML con comodidad y tamién un parser de xml para validar nuestros documentos:
lgsapt-get install psgml sp
lgsAhora abrimos el Emacs y empezamos a editar nuestro documento.
lgsEn la primera linea ponemos:
lgs<?xml version="1.0" encoding="iso-8859-1"?>
lgspara indicarle que vamos a escribir un documento xml que pueda tener tildes, eñes y esas cosas que nos gustan a los españoles.
lgsA continuación le decimos qué DTD vamos a usar:
lgs<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "docbook/dtd/xml/4.1.2/docbookx.dtd">
lgsCon ese chorizo le estamos diciendo el dtd que vamos a usar y además estamos especificando que vamos a escribir un artículo.
lgsCon ese DTD también podemos poner book en lugar de article si vamos a escribir un libro.
lgsPara empezar nos sobra con el article porque el mecanismo para usarlo es el mismo que para el book, pero como hay menos marcas es más sencillo.
lgsConcretamente el archivo docbookx.dtd define una serie de normas que servirán para saber si nuestro documento está bien escrito o no
lgspor ejemplo, no se pueden escribir párrafos dentro de los títulos de las secciones, pero sí dentro de las propias secciones
lgsA partir de aqui es cuando empieza la magia de Emacs y del módulo psgml.
lgsSi pulsamos C-c C-e en el minibuffer nos sale la palabra article indicandonos que es la única marca posible por ahora. Le damos a enter y él sólo nos pone la marca.
lgsAsi pues, con C-c C-e nos dice que marcas podemos poner.
--> nauj27 (~nauj27@245.Red-80-36-17.pooles.rima-tde.net) has joined #gcubo
--- ChanServ gives channel operator status to nauj27
nauj27wenas
lgsNo os podeis hacer una idea de hasta qué punto es útil esta chorrada. Te ahorra muchísimo tiempo mirando la documentación de Docbook para ver que cosas pueden ir dentro de otras al estilo de preguntas como:
--- lgs removes channel operator status from nauj27
--- ChanServ gives channel operator status to nauj27
--- nauj27 removes channel operator status from nauj27
lgs¿Puedo meter una imágen dentro de un párrafo? ¿Puedo meter un apéndice en un artículo o sólo en los libros? y cosas por el estilo.
lgsOtra cosa útil es C-c + para añadir un atributo sobre la marca actual.
lgsCon C-c / cerramos la marca que tengamos abierta en ese momento.
lgsCuando llevamos escribiendo un rato es útil poder comprobar si nuestro documento es válido podemos utilizar la utilidad de Emacs para que el parser del paquete sp (nsgmls) nos valide el documento:
lgsC-c C-v y luego pulsamos enter para que se ejecute el comando nsgmls
lgsque es el parser que valida nuestro documento
lgsPor cierto, antes de que se me olvide, en http://www.gcubo.org/modules.php?name=Content&pa=showpage&pid=16 teneis unos cuantos documentos XML
lgsPodeis descargaroslos y juguetear con ellos.
lgsHasta aqui es todo lo que necesitais para escribir documentos xml con docbook de manera fácil y cómoda
lgsel resto son horas de práctica
lgsUna documentación muy buena para aprender las marcas más útiles de Docbook es la guía de documentación de FreeBSD
lgsAqui teneis el enlace http://www.freebsd.org/doc/en_US.ISO8859-1/books/fdp-primer/x1384.html
lgsPor supuesto no cubre Docbook al 100% pero en el 99% de vuestras necesidades ese documento os servirá (a mi me ha servido :)
lgsA partir de ahora voy a suponer que el documento con el que estamos trabajando se va a llamar 'midocumento.xml'
lgstras esta introducción empieza el verdadero objetivo de la charla que es aprender a manipular ese documento
lgspara obtener cosas útiles
bitland*NeoSNK* esto puede servir de referencia para lo del docbook
bitland*NeoSNK* http://es.tldp.org/Tutoriales/DOCBOOK/multiple-html/
lgsmuchas gracias NeoSNK
lgshay muchisima documentación de docbook porque es el dtd más usado en documentación técnica
lgssigo
lgsYa que sabemos cómo editar documentos de forma fácil y rápida vamos a proceder a convertirlos en formatos más útiles.
lgsLa primera forma de hacerlo será usando las hojas de estilo DSSSL
lgsPara los curiosos las siglas significan Document Style Semantics and Specificacion Language, pero eso a nosotros no nos dice mucho.
lgsLo que si tenemos que hacer es instalar las hojas de estilo para docbook y unos cuantos programas para manejarlas:
lgsapt-get install docbook-dsssl jade jadetex lynx make
lgsY ahora ya nos ponemos manos a la obra, lo primero será convertilo a latex:
lgsjade -t tex -V tex-backend -d /usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh/print/docbook.dsl /usr/lib/sgml/declaration/xml.dcl midocumento.xml
lgsno os asusteis, ese comando convierte nuestro documento xml en un archivo llamado midocumento.tex
lgsUna vez que lo tenemos en latex lo pasamos a dvi:
lgsjadetex midocumento.tex
lgsesta vez es más fácil
lgseso lo que ha hecho es generar el archivo midocumento.dvi
lgsY ahora podemos obtener salidas en postcript o pdf de la siguiente manera:
lgsdvips -f midocumento.dvi > midocumento.ps
lgsdvipdf -f midocumento.dvi > midocumento.pdf
lgsFácil, ¿no?
lgsAhora vamos a obtener la salida en html:
lgsjade -t sgml -d /usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh/html/docbook.dsl /usr/lib/sgml/declaration/xml.dcl midocumento.xml
lgsotro chorizo que nos genera un conjunto de páginas html
lgsY también lo haremos en txt:
lgsjade -t sgml -V nochunks -d /usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh/html/docbook.dsl /usr/lib/sgml/declaration/xml.dcl midocumento.xml > dump.html
lgslynx --force_html -dump dump.html > midocumento.txt
lgsrm -f dump.html
lgsvamos por partes, el primer comando es como el de la generación en html
lgspero esta vez lo mete todo en un sólo html
lgsdespués usamos el navegador en modo texto lynx para convertir eso en texto
lgsy por último borramos el archivo auxiliar dump.html que nos ha servido en el paso intermedio
lgsYo lo que suelo hacer es poner todos esos comandos en un script o en una Makefile
lgsy asi no me tengo que saber toda esa sintaxis tan molesta
lgsBueno como veis hemos obtenido 7 formatos por el precio de 1. Ahora ya os va pareciendo más útil el xml, ¿no?
lgsHemos obtenido xml, latex, dvi, ps, pdf, txt y html
lgsPero hay otra ventaja todavía mejor y es que mientras escribimos un documento nos estamos centrando en el contenido y nos olvidamos de la forma.
lgsEsto suena a topico pero es realmente muy productivo.
lgsComo habréis adivinado, si el contenido esta en vuestro documento xml, la forma está en las hojas de estilo dsssl.
lgsque son los chorizos esos tan largos que se le pasan como parámetros al comando jade
lgsque no es más que un procesador de hojas de estilo dsssl
bitlandla pregunta de siempre, ¿no hay editores wysiwyg para todo ésto?
lgsveamos bitland, hay editores muy cómodos para editar xml
--> asd (~asd@227.Red-80-34-11.pooles.rima-tde.net) has joined #gcubo
lgsque lo que van haciendo es ir diciendote que marcas puedes ir poniendo en cada momento
--- bitland removes voice from asd
lgspero si lo que quieres es que se vaya viendo tu resultado en plan word
lgso como hace el lyx
lgsyo no conozco ninguno
lgspero es que la segunda ventaja se perdería un poco
lgsporque ya estariamos más pendiente de la forma que del contenido
<-- asd has quit (Client Quit)
lgsque es lo que tratamos evitar
bitland*NeoSNK* si hay editores visuales, el Abiword (por ejemplo es un editor que guarda en formato dbk -docbook-, y su formato original creo que también es XML
lgsde acuerdo NeoSNK, pero con Abiword
lgsno se puede explotar toda la potencia de Docbook
lgsporque no permite usar todas las posibles marcas que tiene el lenguaje
lgsAhora viene la pregunta del millón:
lgs¿Qué pasa si no me gusta como quedan mis documentos? ¿Se puede cambiar la forma? ¿Es dificil?
--- malglam gives channel operator status to PummelCena
--- PummelCena is now known as Pummel
--- malglam removes channel operator status from Pummel
lgsPues evidentemente se puede cambiar la forma, y aunque hacer una hoja de estilo para docbook no es nada fácil, cambiar determinados parámetros de las que vienen en el paquete docbook-dsssl es bastante asequible.
lgsVeamos un ejemplo fácil:
lgsSupongamos que queremos darle más margen por la izquierda a nuestras salidas en postcript y pdf.
lgsTenemos que crear una pequeña hoja de estilo con esa información y utilizarla cuando usemos jade.
lgsJade usará la hoja de estilo general y la nuestra y nuestra definición del márgen tendrá prioridad sobre la hoja de estilo general. Veamos cómo.
lgsCreamos el archivo mihoja.dsl y debe contener lo siguiente:
lgs<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
lgs<!ENTITY docbook.dsl PUBLIC "-//Norman Walsh//DOCUMENT DocBook Print Stylesheet//EN" CDATA dsssl>
lgs]>
lgs<style-sheet>
lgs<style-specification id="print" use="docbook">
lgs<style-specification-body>
lgs(define %left-margin%
lgs  ;; Ancho del margen izquierdo
lgs  4.5cm)
lgs</style-specification-body>
lgs</style-specification>
lgs<external-specification id="docbook" document="docbook.dsl">
lgs</style-sheet>
lgsEn el bloque 'define' estamos usando el lenguaje DSSSL para asignarle a la variable %left-margin% el valor 4.5cm.
lgslo que hay detrás de ;; son comentarios
lgsCon la linea
lgs<external-specification id="docbook" document="docbook.dsl">
lgsle estamos diciendo que use la hoja de estilo general y como las variables no se sobreescriben nunca, el valor efectivo de %left-margin% será el que nosotros le hemos dado.
bitland*NeoSNK* ¿se puede usar CSS en DocBook?
lgssi NeoSNK, después hablo sobre eso
lgscomo decía aunque carguemos la hoja de estilo general
lgscomo lo hacemos *después* de modificar el margen
lgsesa modificación permanece
--> herzed (herzed@cliente-217217018233.uBRgrb01.supercable.es) has joined #gcubo
lgses decir, DSSSL es un lenguaje donde lo que le asignes a una variable al principio
lgspermanece aunque intentes redefinirlo luego
lgseso le hace bastante potente a la hora de modularizar las hojas de estilo
lgsy si queremos definir estilos que se basen en el general que trae el paquete docbook-dsssl no tenemos que cambiar dicho paquete
lgsAhora invocariamos a jade de esta forma:
lgsjade -t tex -V tex-backend -d mihoja.dsl /usr/lib/sgml/declaration/xml.dcl midocumento.xml
lgsos recuero como lo habiamos hecho antes
lgsjade -t tex -V tex-backend -d /usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh/print/docbook.dsl /usr/lib/sgml/declaration/xml.dcl midocumento.xml
lgslo único que hemos cambiado es el valor del parámetro -d
lgsahora usamos nuestra hoja de estilo personalizada en lugar de la hoja general
lgsen realidad estamos usando la general también porque desde nuestra hoja de estilo estamos 'importando' la general
lgsOs recuerdo que para obtener un ps o un pdf escribiriamos:
lgsjadetex midocumento.tex
lgsdvips -f midocumento.dvi > midocumento.ps
lgsdvipdf -f midocumento.dvi > midocumento.pdf
--> _ER (~nacho@81-203-189-2.user.ono.com) has joined #gcubo
lgssi haceis la prueba ahora esos documentos tendrán 4.5 cm de margen izquierdo
--- bitland removes voice from _ER
lgsuna burrada pero sirve para el ejemplo
lgsComo veis no ha sido muy complicado. El problema es que si no sabemos DSSSL tendremos ciertas limitaciones en cuanto a las modificaciones posibles.
lgsEste es uno de los problemas de DSSSL, que implica aprender un nuevo lenguaje que para nada es trivial (es muy parecido a Lisp).
lgsPero aún así se pueden cambiar muchas cosas sólo asignándole valores a las variables.
lgsLo mejor para saber qué cosas se pueden cambiar es abrir el fichero /usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh/print/dbparam.dsl.
lgsAhi aparecen todos los parametros o variables que se pueden modificar para las hojas de estilo que se usa jade al convertir los xml en latex
lgsy en definitiva para las versiones de nuestros documentos que vamos a imprimir (ps y pdf)
lgsAlgunos ejemplos de estos parámetros que podemos modificar son los tipos de letra, los margenes, la generacion del indice, etc. Tiene multitud de comentarios y es facil de entender.
lgsSi vemos un parametro que queramos modificar, lo que haremos sera copiar su definicion a nuestra hoja de estilo y modificarla ahi, nunca en el archivo dbparam.dsl.
lgsHay otras formas de transformar xml a otros formatos.
lgsy aqui contesto a la pregunta de NeoSNK
lgsUna de las más famosas son las hojas de estilo css o las hojas de estilo xslt.
lgsLas hojas de estilo css (cascade style sheets) son muy sencillas de usar pero poco potentes.
bitland¿y que es una hoja de estilo?
lgsy de hecho creo que sólo sirven para transformar un dtd muy concreto, que es el dtd xhtml
lgsaunque no estoy seguro al 100% de esto último
lgsbitland: una hoja de estilo es un fichero que contiene las reglas necesarias
lgspara transformar un documento xml en algo útil
lgses lo que dice, quiero que los títulos vayan en rojo, quiero usar una letra de 12 puntos
lgsquiero que los nombres de ficheros vayan en negrita
bitlandaclarado :)
lgsy cosas por el estilo
lgsentonces si juntas el XML + la hoja de estilo + un programa que procese ambas cosas
lgsobtienes tu resultado
lgsen el ejemplo que hemos seguido hasta ahora
lgsel xml seria el fichero midocumento.xml
bitland*NeoSNK* Documentación completa de DSSSL: http://www.jclark.com/dsssl/ y http://www.ibiblio.org/pub/sun-info/standards/dsssl/dssslo/do960816.htm
lgsla hoja de estilo era el fichero que acababa en dsl
lgsy el programa que los procesaba era jade
lgsbueno, pues como os decía, las hojas de estilo en cascada (CSS) son muy sencillas
lgspero creo que sólo sirven para xhtml, que es otro dtd igual que docbook pero orientado a hacer páginas web
lgsLa otra tecnología que he comentado es xlst
lgsLas hojas xlst se escriben usando el propio xml y son muy pontentes pero algo más complicadas. Su uso general es convertir documentos xml a cualquier otro formato, eso viene especificado en la hoja de estilo.
lgsMuchos os preguntareis por qué hemos usado DSSSL. Bien la razón es que la tecnología DSSSL es algo más madura que las otras dos y por ello hasta hace poco era prácticamente la única opción.
lgsPor eso, estoy mucho más puesto en DSSSL y en sus herramientas y por eso he dado la charla con DSSSL ;)
lgsPero bueno creo que por hoy es suficiente, las hojas css las va a explicar Tripu dentro de poco y si hay interes otro dia hacemos otra charla de xslt.
lgspasamos al turno de preguntas
lgs¿teneis alguna duda?
lgsantes de que se me olvide, gracias a NeoSNK por los enlaces de documentación
bitlandmmmm, ¿nos podrías hacer un resúmen del resúmen? :D
lgsok bitland
bitlandesperad que vaya dando voz
--- bitland gives voice to _ER
--- bitland gives voice to enla_cenad
--- bitland gives voice to herzed
lgshoy hemos visto que xml puede servirnos para hacer documentos
--- bitland gives voice to JABcomics
--- bitland gives channel operator status to nauj27
lgsy nos ofrece dos ventajas fundamentalmente:
--- bitland gives voice to NeoSNK
--- bitland gives channel operator status to NinaNutz
NeoSNKlgs: no hay de qué por los links
--- bitland gives channel operator status to Pummel
NeoSNKpuedo dar uno último?
lgsa) podemos obtener muchos formatos diferentes a partir de un xml
--- enla_cenad is now known as enlavin_
lgsun segundo NeoSNK
--- bitland gives voice to SIaughter
NeoSNKoki
--- bitland gives voice to tgz
lgsb) cuando escribimos un documento nos olvidamos de la forma y nos centramos en el contenido
lgstambién hemos visto que con Emacs y el módulo psgml se pueden escribir documentos xml de una forma muy sencilla
lgsLuego hemos tratado una forma concreta de transformar documentos xml
lgsque es mediante las hojas de estilo DSSSL y el programa jade
lgsy por último hemos visto un ejemplo de cómo personalizar las hojas de estilo DSSSL que se usan en la generación de documentos para impresora
lgste sirve ese resumen bitland?
lgsya puedes poner ese enlace NeoSNK
NeoSNKhttp://mipagina.euskaltel.es/gsagarduy/rec-xml-es.html <-- Especificación del XML 1.0 de la W3C en Español
NeoSNK^^
lgsestupendo NeoSNK
lgs¿alguién tiene más preguntas?
herzed por que has dicho que no se tienen por que utilizar dtds con xml?que es lo que se utiliza entonces?
lgscuando utilizas xml con otros fines, por ejemplo para guardar la configuración de tu programa
lgsy estas seguro de que nadie más va a usar esos xml
lgspuedes escribir xmls que no sigan ningún dtd
lgsaunque no es recomendable porque si la gente empieza a estar interesada en esos xmls
lgslo normal es que quieran que sigan algunas reglas concretas porque si no se convierte en un jaleo
herzedya, claro
lgsla respuesta corta es, si esos xmls solo son para ti y tu sabes lo que vas a hacer con ellos, no necesitas dtd
lgsen cualquier otro caso usa un dtd, o fabricate uno
NeoSNK¿es mejor usar los Schemas XML que las DTDs?
lgscon los schemas pasa un poco como con los dsssl NeoSNK
lgslos dtds son una tecnologia muuuuuy madura
lgsy hay cientos de herramientas para trabajar con ellos
--> tork1 (root@cliente-217216184220.cm128.granpa.supercable.es) has joined #gcubo
lgslos schemas xml tiene ventajas sobre los dtds
lgspero las herramientas que los soportan son mucho más dificiles de encontrar
lgsdentro de algún tiempo si habrá muchas más
NeoSNKXMLSpy es una de ellas no?
lgspues no lo sé NeoSNK, no estoy muy puesto en Schemas
Pummel¿dsssl sirve para hacer transformaciones de estructura sobre el arbol XML? ¿o solo para definir hojas de estilo de formato?
NeoSNKoki...gracias ^^
--- bitland gives voice to tork1
lgssirve para hacer transformaciones Pummel
lgsde hecho dsssl es un lenguaje de programación muy parecido a Lisp
lgsy puedes hacer hasta las torres de Hanoi en DSSSL :)
Pummelviva! thx lgs :)
lgses uno de sus 'problemas', que no es nada fácil de manejar
lgspor eso surgen las xslt entre otras cosas
lgs¿alguna pregunta más o damos por terminada la charla?
lgsen ese caso
malglampues parece que ya está
malglammuchas gracias lgs
lgsexit(0)
malglamplas plas
malglamplas plas
malglamplas plas
herzedbine!!
Pummelplas plas plas plas plas
herzedbien!!
enlavin_pplas plasplas
Pummelbravo!!!
NeoSNKPLAS PLAS PLAS PLAS PLAS PLAS PLAS !!
NeoSNK^^
lgsen unos segundos cuelgo la charla en la web, para los que habeis llegado tarde
herzedPLIs plas plus!!
enlavin_eres un mostro
NeoSNKme ha gustado mucho la ponencia ^^
tork1plas plas plas
Pummeltotal y absoluto :)
bitlandlgs: > /dev/catre/agusto :D
lgspelotas!
NinaNutzplis plas plas ples plus
NeoSNKxDDD
nauj27mu buena :)
tork1gracias lgs es que he tenido unos problemillas con mi distribucion y no he podido acceder antes...
bitlandNinaNutz: que lo tuyo no es imparcial X-DD
lgsok
NinaNutzxDDD
NinaNutzjajaja
herzedmuy chula, muy completa
herzedbuena base

Powered by Plone CMS, the Open Source Content Management System Powered by GCubo Powered by Cicode

This site conforms to the following standards: