3. El Mundo del Formateo de Textos

Usaré el concepto "Formateo de textos" discriminándolo de "Procesamiento de textos"[1] tal como aprendí leyendo mi primer libro de UNIX. Fue en ese libro donde por primera vez descubrí lo que era Troff y la filosofía que se esconde detrás del concepto de formateo de textos (vs. WYSIWYG).

El formateo de textos diferencia los siguientes elementos en un documento:

Básicamente, la filosofía se resume en que los autores deben concentrarse en el contenido y estructura antes que en el estilo de sus documentos. Dado que la mayoría de las veces la estructura está predefinida (o estandarizada en el caso de Docbook) para satisfacer el cometido del autor, éste termina concentrándose estrictamente en el contenido, lo cual debería ser su interés primario.

En el formateo de textos los autores pueden usar las más simples herramientas, como un editor de textos, o pueden utilizar editores de textos estructurados y especializados, como LyX o Emacs. En cualquiera de los casos, su información siempre es almacenada en el más natural de los formatos de computadora: texto plano. Esto adquiere mucho sentido dadas todas las razones que se dieron en contra de los formatos binarios en Sección 2

3.1. ¿Por qué SGML?

Resumen corto de la historia

Opuestamente a lo que la mayoría cree, SGML (el padre de XML) es un lenguaje muy antiguo, hasta tal punto que algunos lo llaman "la venganza de los cuarentones". Este significado se debe a que hace algo más de 20 años hubo muchos entusiastas de computación que hicieron mucha fuerza en la comunidad para la implementación de estándares abiertos como SGML. Éstos fueron ignorados por el mercado o quizá anulados del mismo por intereses comerciales. De cualquier modo, SGML se ha usado en compañías e industrias muy importantes durante muchos años. De hecho, muchas corporaciones importantes han almacenado su experiencia y conocimiento corporacional en SGML desde hace ya mucho tiempo[2].

XML es simplemente un subconjunto simplificado de SGML lo que significa que cualquier documento XML es un SGML válido, pero no cumpliéndose necesariamente lo recíproco. El cometido básico de XML en nuestros días es superar lo que HTML[3] ha sembrado tras la explosión de la web en los 90. Historias sobre estos lenguajes pueden ser encontradas por toda la web, por lo que no daré más detalles sobre este tema. De todos modos, en el resto del documento me estaré refiriendo a SGML, pero en este punto el lector probablemente se de cuenta de que XML es casi la misma cosa, sólo que más simple. Cuando hablamos de transformaciones a otros formatos, existen algunas distinciones importantes entre SGML y XML. SGML usa las hojas de estilo DSSSL las cuales son escritas en Scheme, un dialecto de Lisp. XML ha desarrollado un estándar más simple de transformación llamado XSLT el cual se escribe en XML lo cual hace que sea mucho más fácil de escribir y mantener. Dado que todo esto no es un punto fundamental de este artículo, recomiendo a los lectores interesados en el tema que lean el excelente artículo de Eric Raymond:

http://www.tldp.org/HOWTO/Docbook-Demystification-HOWTO/

Finalmente y para aclarar la pregunta implícita en el título de esta sección, SGML (o XML) es una buena idea principalmente porque es un lenguaje extensible que puede ser fácilmente transformado en otros estándares cuando estos salgan al público. Esto significa que si usted escribe o mantiene sus documentos en SGML, se asegurará que sobrevivan a cualquier cambio en la tecnología o en los estándares y puedan ser transformados a cualquier otro tipo de estándar que eventualmente surja. Más aun, SGML es el antiguo y estable ISO 8879:1986.

3.2. Breve vistazo a SGML

La denominación SGML viene de Standard Generalized Mark-up Language (algo así como Lenguaje Estándar Generalizado de Etiquetas). A su vez, XML viene de eXtensible Mark-up Language (Lenguaje Extensible de Etiquetas) y es simplemente un subconjunto simplificado de SGML (no una implementación, ver sección anterior). Es un lenguaje de computadoras, pero no es un lenguaje procedural (o sea, las instrucciones no son ejecutadas en algún orden específico), sino un lenguaje declarativo.

Los lenguajes de etiquetas (Mark-up) se basan justamente en el uso de <la etiqueta> (tag). Ésta define la estructura de un modo muy parecido a lo que sucede en las bases de datos. Todo lo demás es contenido o, para utilizar la jerga SGML, caracteres de datos (CDATA). Desde el punto de vista del estándar, SGML sólo define reglas básicas sobre el uso y anidación de las etiquetas. Por ejemplo, se encuentra explícito en el lenguaje que cada etiqueta debe tener una etiqueta de final (end tag) correspondiente y que la anidación de etiquetas debe ser perfecta, lo que significa que las etiquetas internas deben ser cerradas antes de las etiquetas externas. Por supuesto, las definiciones SGML son mucho más complejas que esto, pero básicamente esas son las reglas principales. XML también tiene reglas estrictas como éstas. Hay etiquetas excepcionales las cuales no tienen una etiqueta de final correspondiente y son del formato <tag/>. Además, a las etiquetas también podemos pasarles parámetros como es el caso de la etiqueta <BODY> en HTML, en la cual se puede, por ejemplo, especificar el color de fondo de la página con el parámetro BGCOLOR="WHITE"..

Dadas estas reglas básicas, todo lo demás se deja a discreción del usuario. Esto significa que el nombre de las etiquetas, sus parámetros y las implementaciones específicas de las reglas de anidación pueden ser realizadas por la persona que escribe en SGML. Ésta es la belleza verdadera del lenguaje ya que permite que cualquiera invente su propio estándar de etiquetas. Si lo pensamos detenidamente entonces SGML es en realidad un lenguaje para describir estructuras flexibles de datos que pueden ser fácilmente manipuladas y transformadas por herramientas, llamadas analizadores sintácticos (parsers). Las estructuras de datos SGML son, por mucho, más flexibles que las tablas RDBMS (aka SQL) para almacenar cosas complicadas como libros, pero no sólo se limitan a manipular documentación. De hecho, SGML y ahora también XML, están siendo utilizados para el almacenamiento en bases de datos de propósitos generales, desplazando varias implementaciones heredadas de DBMS de Relacionamiento de Objetos (Object-Relational DBMS).

Ahora bien, si cualquiera puede realizar su propio lenguaje de etiquetas con SGML, tiene que haber un modo de poner en vigor las reglas que hemos inventado. Esto es implementado por lo que se denomina como DTD (Document Type Definition, o en español Definición del Tipo de Documento). Un DTD define los nombres de las etiquetas, el orden legal de las ocurrencias y las reglas de anidación para una implementación SGML particular. A la vez, los DTDs se escriben en SGML y se representan como un simple archivo en el sistema. En especial, Docbook es un DTD que se usa para definir libros y artículos.

El uso de DTDs impone ciertas condiciones. Primero sobre la persona que va a utilizarlas, o sea, la persona deberá tener algún conocimiento básico de la DTD antes de empezar a escribir en ese formato. También es conveniente usar un editor estructurado que tenga la capacidad contextual de validación. Estos editores son muy útiles ya que nos irán indicando las etiquetas que están permitidas en cierto punto de nuestro documento (irán analizando las reglas de la DTD por nosotros). Aún más, podremos usar un analizador sintáctico que valide los documentos usando un cierta DTD de nuestro sistema y que indique todas las inconsistencias.

Bueno, esto es básicamente todo lo que se necesita saber para empezar a trabajar con SGML. Todos estos conceptos se clarificarán a medida que avancemos la lectura, especialmente en la siguiente sección que discute cómo crear un documento SGML usando Emacs.

Notas

[1]

Se han traducido "Text Processing" y "Word Processing" al español como "Formateo de Textos" y "Procesamiento de Textos" respectivamente. Aunque no parezcan las traducciones correctas, existe una diferencia sutil entre ambos conceptos en inglés: "Word Processing" hace referencia a editores WYSIWYG como MS Word mientras que "Text Processing" hace referencia a la edición de documentos en formatos estructurados, p.ej: SGML-Docbook. Sin embargo, empresas como Microsoft han traducido "Word Processing" como "Procesadores de Textos". Así, si usáramos las traducciones literales de dichos términos causaríamos no poca confusión en los lectores.

[2]

http://xml.coverpages.org/general.html#faq es un buen enlace en donde se detalla la historia de SGML.

[3]

http://articles.linuxguru.net/view/202#FTN.AEN74