¿Qué es el SGML?

Básicamente, SGML (Standard Generalized Markup Language) es un modelo internacional que permite estandarizar y definir formalmente un documento electrónico, independientemente del software, la aplicación o el sistema que se utilice. Esto quiere decir que el SGML permite, como metalenguaje que es, definir diferentes estructuras mediante marcas descriptivas con el fin de describir los contenidos de los documentos. Hay que especificar que el SGML no implica una descripción de la apariencia física del documento, ya que esta acción la llevan a cabo las distintas plataformas que interpretan el documento, como por ejemplo el navegador. El SGML define e identifica las diferentes estructuras de contenido del documento según la finalidad o el sentido que tienen.

EL SGML fue definido por la ISO (International Organization for Standarization), concretamente por la norma ISO 8879, aprobada en el año 1986, como modelo abierto para la creación de documentación electrónica, que unifica la aplicación de los conceptos de anotación estructural de los documentos. No es un formato de almacenamiento ni un procesador de textos, es un metalenguaje con el cual es posible crear y definir distintos lenguajes de anotación o marcas, con los cuales se puede procesar, gestionar y almacenar un texto, como es el caso de HTML, que se utiliza para la descripción de documentos en web.

 
Reflexión

Sin embargo, antes de entrar en aspectos más concretos de SGML, es preciso hacer énfasis en los diferentes conceptos que afectan a un documento. Podemos decir que prácticamente todos los documentos que leemos tienen algún tipo de estructura. En la parte superior de un texto, vemos un párrafo más destacado que el resto; después un bloque de texto y, dentro de éste, algunas letras en cursiva, otras en negrita, y en medio de todo, alguna imagen. Todo eso lo interpretamos por deducción, y de esta forma el texto destacado en la parte superior lo asociaremos al título, y el resto de texto lo asociaremos por su disposición y distribución por la página.

 
Contenido complementario

A partir de este punto, hay que definir las diferentes formas en las que es posible analizar un documento. Por una parte, tendremos que hablar del marcaje descriptivo y, por otra, del marcaje procedural. Así, por marca, palabra definida para describir anotaciones dentro de un texto, entendemos todo aquello que no es contenido en un documento. En su forma primigenia, la marca se refería a las anotaciones manuales que se hacían para añadir al texto las instrucciones, que hacían referencia a su forma, cómo tenía que presentarse formalmente y qué tipografía debía utilizar. Este tipo de marcaje se conoce como marcaje procedural.

En este contexto, el marcaje define todo aquello que es parte integrante de un documento electrónico, pero que no es texto imprimible. El fichero donde se almacena uno de estos documentos es ilegible al estar desplegado con un editor o procesador de textos. Recordemos que los procesadores de texto añaden multitud de anotaciones a un documento que especifican las características de la versión papel. Así, un lenguaje de marcas está formado por reglas que describen cómo tienen que realizarse las marcas, bajo qué condiciones están permitidas y cuál es su significado. De este modo, por ejemplo, la mayor parte de los procesadores de texto implementan su propio lenguaje de marcas y formato.

Las marcas cumplen dos objetivos fundamentales:

Separar los diferentes elementos lógicos de un documento.

Especificar las operaciones tipográficas que tienen que ejecutarse sobre estos elementos lógicos.

Los elementos lógicos son todos aquellos derivados de operaciones tipográficas que se aplican a la forma del texto, como por ejemplo la cursiva, la negrita, un párrafo, un tipo de letra determinado, un tamaño concreto, una nota a pie de página, etc. Es decir, todo aquello que se pueda resaltar y definir sobre el resto del texto en formato plano.

De esta manera, el lenguaje de marcaje procedural es el que contiene las marcas que describen las diferentes operaciones tipográficas que pueden aplicarse a cada uno de los elementos del documento. Aquí tenéis una representación gráfica del significado:

 
Bibliografía sugerida

Por otro lado, el lenguaje descriptivo define un marcaje que describe únicamente la estructura lógica del documento. Las marcas estructurales no sirven en ningún momento para designar cómo debe aparecer el texto en el documento; especifican simplemente el tipo de elemento que es y no su apariencia. La base de este lenguaje consiste en que conceptualmente sólo tiene que encargarse de estructurar la información del documento según unas marcas descriptivas, totalmente separado de lo que implica el estilo del documento. De hecho, el SGML no autoriza el marcaje procedural dentro de su sintaxis, ya que la apariencia externa del documento no es un elemento que aporte ningún provecho al lenguaje de marcas, si hablamos estructuralmente.

El lenguaje descriptivo identifica con marcas los elementos que forman el documento, como por ejemplo los títulos, los párrafos, las secciones, etc., tal y como se muestra en la imagen siguiente:

En general, los lenguajes procedurales para describir documentos como troff, por ejemplo, representan una sobrecarga de formatos con una complejidad enorme, que en ningún caso hacen referencia al formato de lo que se está escribiendo. Por ejemplo, si queremos especificar un trozo de texto tabulado, en troff sería muy complejo:

.sp 1; .ss; sin 12 - 12

Mientras que el mismo en lenguaje SGML se simplifica especificando:

<BLOCKQUOTE> ¡Esto estará tabulado! </BLOCKQUOTE

Por suerte, la mayoría de los lenguajes de marcaje son una combinación de los dos tipos de lenguaje de marcas. Por ejemplo, Word o WordPerfect incluyen estilos con los cuales podemos definir tanto el nivel estructural como procedural del documento, es decir, los diferentes títulos, párrafos, anotaciones, etc. y, al mismo tiempo, la presentación, la tipografía, los colores, los tamaños, etc.

Las marcas descriptivas son de base más rica que las procedurales. En primer lugar, las procedurales suponen menos información sobre los elementos del documento. Dos elementos estructuralmente diferentes pueden estar marcados proceduralmente de la misma manera, aunque representen conceptos distintos. En cambio, las marcas estructurales, ya que no definen apariencia, permiten que dos elementos lógicamente distintos se marquen de forma diferente, sin tener en cuenta si en la versión impresa del documento los dos utilizarán las mismas operaciones tipográficas.

Las marcas descriptivas requieren una sola etiqueta para describir elementos, como por ejemplo los títulos, y una función para describir cómo tiene que traducirse este elemento con el fin de producir la versión final con la inclusión una sola vez de elementos de marca procedurales. En documentos simples, esto no parece tener mucho interés; sin embargo, cuando hablamos de colecciones de documentos extensas y complejas la cosa cambia considerablemente.

Con esta filosofía, el SGML aporta una serie de ventajas considerables para generar documentos electrónicos:

Al permitir crear lenguajes descriptivos de marcas, hace énfasis en el marcaje estructural y no procedural, ya que no incluye información sobre cómo tienen que interpretarse las marcas; esto se debe a que su objetivo es describir las unidades lógicas del documento y no cómo tiene que presentarse.

Formaliza la concepción de tipos de documentos gracias a la definición de tipos de documento (DTD), que describe una clase de documentos con unas características comunes. Dado que no implica un conjunto de convenciones de marcas, permite un conjunto de etiquetas flexibles y sobradamente definibles por el creador.

El contenido siempre será independiente del sistema en que se visualice; es decir, evita la dependencia de los conjuntos de caracteres, como ASCII o EBCDIC, específicos para fabricantes de equipos informáticos. El SGML utiliza caracteres encontrados en la mayoría de los sistemas y define mecanismos para utilizar o transformar otros caracteres específicos poco comunes (denominados referencias de entidad), con lo cual permite una legibilidad perfecta tanto para el creador como para el ordenador.

En SGML, el etiquetado es lógico y no utiliza un código críptico para denominar los diferentes elementos del documento, los cuales quedan delimitados por marcas que indicarán el inicio y el final de los objetos lógicos.

¿Cuál es el funcionamiento del SGML?

Cualquier documento puede delimitarse en diferentes aspectos, como por ejemplo la estructura, el contenido y el estilo. El SGML permite separar los tres elementos de su sintaxis, y se dedica especialmente a definir la relación entre la estructura y el contenido.

Definimos la estructura del documento con lo que puede considerarse el corazón del SGML, el DTD (Document Type Definition), que es una descripción formal de una clase de documento y permite verificar si un documento es miembro de una clase determinada. Esta verificación la realiza mediante un analizador en el plano léxico y sintáctico de SGML, que utiliza como entrada el DTD y el documento, y comprueba si este último es miembro o no de la clase definida por la primera.

El DTD describe la estructura jerárquica de un documento, de la misma manera que el esquema base de una base de datos describe los diferentes tipos de información que arregla, así como las relaciones que se establecen entre los campos. El DTD proporciona un ámbito de trabajo para los diferentes elementos que constituyen el documento (capítulos, títulos, secciones, etc.). El DTD también especifica las normas que rigen las relaciones entre los elementos (por ejemplo, que el encabezamiento tiene que ser la parte constitutiva del documento en primera instancia o que un listado de menú debe contener uno o más elementos dispuestos de una manera específica dentro del documento). Gracias al DTD podemos etiquetar los documentos con una codificación genérica y válida para cualquier plataforma.

Por ejemplo, supongamos que queremos llevar a cabo una recopilación de recetas de cocina de diferentes libros con sus descripciones, orígenes, ingredientes, etc., y que deseamos hacerlo de una manera correcta para todas las plataformas. Creamos un documento en SGML y definimos el DTD correspondiente (lo denominaremos RCP, Recetas de Cocina Personales) en los diferentes elementos que determinamos según el contenido que estructuraremos, y que ya conocemos. El DTD podría ser éste:

<!DOCTYPE RCP [
<!ELEMENT RCP - - (titulo, metainformacion, contenido)>
<!ELEMENT p - O (#PCDATA)>
<!ELEMENT titulo - - (#PCDATA)>
<!ELEMENT metainformacion - - (editor+, prologo?)>
<!ELEMENT editor - - (#PCDATA)>
<!ELEMENT prologo - - (#PCDATA, P+)>
<!ELEMENT glosario - - (entrante)>
<!ELEMENT entrada - O (nombre, descripcion)>
<!ELEMENT utensilios - - (nombre, descripcion)>
<!ELEMENT nombre - O (#PCDATA)>
<!ELEMENT descripcion - O (#PCDATA)>
<!ELEMENT contenido - - (receta+)>
<!ELEMENT receta - O (origen & dificultad & tiempo & tipo & autor? & (u-requeridos*) & l-ingredientes & preparacion & p+)>
<!ELEMENT origen - - (#PCDATA)>
<!ATTLIST origen region (oriental | asiatico | europeo | nortemerica | sudamerica) #REQUIRED>
<!ELEMENT dificultad - - (facil | media | dificil)
<!ELEMENT tiempo - - (#PCDATA)>
<!ELEMENT tipo - - (entrante | plato | postre)>
<!ELEMENT autor - - (#PCDATA)>
<!ELEMENT u-requeridos - - (nombre)
<!ELEMENT porciones - - (#PCDATA)>
<!ATTLIST porciones tamaño (grande | mediano | pequeño) #IMPLIED>
<!ELEMENT l-ingredientes - - (item+)>
<!ELEMENT item - - (cant? & tamaño? & ingrediente)
<!ATTLIST item neces (opcional) #IMPLIED>
<!ELEMENT cant - - (#PCDATA)>
<!ELEMENT tamaño - - (gramo | kilo | tenedor sopero | tenedor pequeño | docena | una pizca)
<!ELEMENT ingred - - (#PCDATA)>
<!ELEMENT preparacion - - (paso+)>
<!ELEMENT paso - O (#PCDATA & p+)>
<!ATTLIST paso (opcional) #IMPLIED>
]>

Ya tenemos, pues, un DTD conformado para establecer nuestras etiquetas de marcaje, que aplicaremos para referirnos a los diferentes elementos de contenido del documento. El lenguaje SGML proporciona una sintaxis necesaria para realizar las diferentes declaraciones de elementos. Así, todo sistema basado en SGML puede interpretar su significado al declarar los elementos con la marca <!ELEMENT. A partir de aquí se deben ir declarando los diferentes subelementos que configurarán, en este caso, nuestro recetario. #PCDATA (Parsed Character Data) significa que el elemento definido de esta manera contiene cualquier carácter válido.

El HTML considera actualmente tres tipos diferentes de DTD: el DTD de nivel 2 de HTML de la IETF, el DTD de nivel 3 de HTML del W3C y el DTD Mozilla de Netscape.

El contenido del documento hace referencia a la información que contiene el documento en sí mismo. Éste incluye los elementos físicos, como por ejemplo los títulos, los párrafos, los menús, las tablas, etc. El método para identificar y definir los diferentes elementos se denomina marcaje, que delimita los diferentes elementos con etiquetas de inicio y final. Éstas empiezan con "<etiqueta>" y acaban con "</etiqueta>". El contenido está inmerso dentro de estas etiquetas, que son definidas por las declaraciones de elementos de los DTD, que describirán qué es lo que cada elemento podrá contener, es decir, el modelo de contenido. Siguiendo la estructura de nuestro ejemplo, una página marcada según los elementos admitidos en el DTD RCP es:

<RECETA>

<P>Los <ORIGEN REGION="sudamerica">orígenes de este plato se han perdido a lo largo del tiempo</ORIGEN>.
Su preparación es muy <DIFICULTAD>fácil</DIFICULTAD>, y requiere sólo <TIEMPO>55<TIEMPO> minutos en total. Resulta además una receta muy económica, ya que podemos hacer más de <PORCIONES TAMAÑO="grande">6</PORCIONES> porciones generosas, ideales para acompañar cualquier merienda de verano.</P>

<L-INGREDIENTES>
<P>Para hacer el puding de dulce de leche,  necesitamos:</P>
<ITEM><CANT>una</CANT> <TAMAÑO>docena<TAMAÑO> <INGRED>de huevos</INGRED></ITEM>, <ITEM><CANT>un</CANT> <TAMAÑO>kilo<TAMAÑO> de <INGRED>dulce de leche</INGRED></ITEM> y <ITEM><CANT>3</CANT> <TAMAÑO>cucharadas soperas<TAMAÑO> de <INGRED>azúcar</INGRED></ITEM> para hacer el caramelo. Además, si queremos, podemos añadir al sabor <ITEM NECES="opcional">trocitos de banana</ITEM>, <ITEM NECES="opcional">pasas de Corinto</ITEM> o <ITEM NECES="opcional">nueces</ITEM> y cubrirlo con <ITEM NECES="opcional">chocolate</ITEM>.</P>
</L-INGREDIENTES>

<PREPARACION>
<PAS><P>En primer lugar, tenemos que mezclar la docena de huevos y el dulce de leche hasta que se forme una mezcla suave y sin grumos.</P>
<P>Cuando hayamos batido los huevos, podemos hacer el caramelo y cubrir toda la bandeja, después de haberle añadido toda la mezcla. Mientras hacemos eso, calentamos el horno.</P></PAS>

<PAS><P>Un vez que hemos preparado el recipiente, le vertemos la masa (pueden añadirse las <ITEM NECES="opcional">nueces</ITEM>) y lo dejaremos en el horno sobre otro recipiente al baño maría.</P></PAS>
<PAS><P>En estos momentos, el horno tiene que estar muy caliente.</P></PASO
<PAS>Un vez que han pasado <TIEMPO>30</TIEMPO> minutos, podemos retirarlo y, poco después, ponerlo en la nevera.<PAS>
</PREPARACION>

</RECETA

En el proceso de etiquetado del documento, hemos hecho referencia a las declaraciones de elementos contenidas en nuestro DTD RCP, que pertenecen a una serie de clases dadas por nosotros, y así la tipografía del documento depende del DTD y no del documento. De esta manera, si en algún momento se necesita ampliar o cambiar alguna declaración, los documentos que contengan las directrices de esta clase seguirán a la perfección el nuevo estándar, sin tener que hacer modificaciones para cada documento, en este caso una receta. Una vez que tenemos nuestro documento acabado, es posible generar sistemas de búsqueda que respondan a las cualidades de nuestra información y no al texto en sí, como por ejemplo, ¿qué recetas de cocina oriental tenemos?, ¿qué recetas incluyen el azúcar como ingrediente?, ¿qué postres puedo hacer en un tiempo no superior a 40 minutos?

Gracias al marcaje de los documentos con etiquetas regidas por un DTD que sigue las directrices de SGML, las búsquedas pueden ser mucho más correctas, ya que se especificarán por contenidos y no por cadenas de caracteres o palabras como hasta ahora. Ésta es una de las características que hacen pensar en el XML como un lenguaje que solucione los actuales problemas de la información generada con etiquetas de HTML.

EL SGML consigue la independencia de la plataforma y el procesador de texto. Normalmente, cuando queremos traspasar un documento creado con un procesador de textos, como Word, a otro de un fabricante distinto, nos encontramos con problemas de código o interpretación, lo cual no ocurre con SGML. Dado que no se trata de un producto comercial, sino que es un estándar universal, el usuario no se ve limitado a una aplicación o un software específico. Esto es lo que intentó solucionar el HTML, aunque se ha quedado pequeño para solucionar otros problemas como por ejemplo la recuperación de la información.

Tal y como hemos comentado con anterioridad, el SGML no especifica la forma en que tiene que verse el documento, y como al fin y al cabo los documentos deben exportarse para ser visualizados, cada lenguaje o producto derivado de SGML define diferentes mecanismos para realizar la transición entre las entidades de la clase y la versión física tipografiada.

 
Reflexión

En este sentido, hay que remarcar el esfuerzo que representó la especificación DSSSL (Document Style Semantics and Specification Language), una directiva que la ISO aprobó como fase final en 1996 y, que define un lenguaje basado en "Scheme", funcional y parecido a LISP, con el cual es posible hacer programas para proporcionar apariencia a una clase de documentos, tanto en papel como en pantalla. Por su lado, el Departamento de Defensa de los Estados Unidos CALS emprendió una iniciativa propia de estándar, conocida como OS (Output Specification), que permite al usuario crear un DTD de formato denominado FOSI (Formatting Output Specification Instance), para estandarizar el formato externo de los documentos.

Arriba