¿Qué es el SGML?

Básicamente, el 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 para 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 diferentes 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 en él.

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, sino un metalenguaje con el cual se pueden crear y definir diferentes lenguajes de anotación o marcas, con los cuales es posible procesar, gestionar y almacenar un texto; esto es lo que ocurre en el caso del HTML, utilizado para la descripción de documentos en web.

Reflexión

Sin embargo, antes de entrar en aspectos más concretos del SGML, es necesario poner é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 en su interior algunas letras en cursiva, otras en negrita, y en medio de todo alguna imagen. Todo esto lo interpretamos por deducción, y de este modo el texto destacado en la parte superior lo asociaremos al título, y el resto lo asociaremos por su disposición y distribución en la página.

Contenido complementario

A partir de este punto, es preciso definir las diferentes formas en las que puede analizarse un documento. Por una parte, tendremos que hablar del marcado descriptivo y, por otra, del marcado procedural. De este modo, por marca, palabra concreta para describir anotaciones dentro de un texto, entendemos todo lo que en un documento no es contenido. En su forma primigenia, la marca se refería a las anotaciones manuales que se hacían para añadir al texto las instrucciones y que hacían referencia a la forma del texto, a cómo debía presentarse formalmente y a qué tipografía debía utilizarse. Este tipo de marcado se conoce como marcado procedural.

En este contexto, el marcado 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 ser abierto 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. De este modo, un lenguaje de marcas está formado por reglas que describen cómo deben realizarse las marcas, en qué condiciones están permitidas y cuál es su significado. Así, por ejemplo, la mayor parte de los procesadores de texto implementa 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 se tienen que ejecutar 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 pueden ser 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 marcado 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 el contrario, el lenguaje descriptivo define un marcado que describe únicamente la estructura lógica del documento. Las marcas estructurales no sirven en ningún momento para designar cómo tiene que aparecer el texto en el documento; simplemente, especifican el tipo de elemento que es y no su apariencia. La base de este lenguaje consiste en que conceptualmente sólo se tiene que encargar 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 marcado 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 desde el punto de vista estructural.

El lenguaje descriptivo identifica con marcas los elementos que forman el documento, como pueden ser 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, sería muy complejo en troff especificar un fragmento de texto tabulado:

.sp 1; .ss; sin +12 -12

mientras que lo mismo en lenguaje SGML se simplifica especificando:

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

Por suerte, la mayoría de los lenguajes de marcado constituye una combinación de los dos tipos de lenguaje de marcas. Por ejemplo, Word o WordPerfect incluyen estilos con los que 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 ricas que las procedurales. En primer lugar, las procedurales suponen menos información sobre los elementos del documento. Dos elementos estructuralmente diferentes pueden estar marcados desde el punto de vista procedural de la misma manera, aunque representen conceptos distintos. En cambio, las marcas estructurales, puesto que no definen apariencia, permiten que dos elementos lógicamente diferentes estén marcados de forma también 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 debe traducirse este elemento, y de este modo producir la versión final con la inclusión, sólo una vez, de elementos de marca procedurales. En documentos simples, eso no parece tener mucho interés, pero 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, pone énfasis en el marcado estructural y no procedural, ya que no incluye información sobre cómo deben interpretarse las marcas, dado 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 tipo de documento (DTD), que describe una clase de documentos con unas características comunes. Puesto que no implica un conjunto de convenciones de marcas, permite un conjunto de etiquetas flexibles y sobradamente definibles para el creador.

  • El contenido siempre será independiente del sistema en el 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 el SGML, el etiquetado es lógico y no utiliza un código críptico para nombrar a 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 lleva a cabo mediante un analizador en el plano léxico y sintáctico del 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 estructura.

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 manipula, 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 debe 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 forma 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 elaborar 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 llamaremos RCP, recetas de cocina personales) a 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 herramientas -- (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 | norteamerica | 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 | medio | 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 sopera | tenedor pequeño | docena | hebra)>
<!ELEMENT ingred -- (#PCDATA)>
<!ELEMENT preparacion -- (pas+)>
<!ELEMENT paso -O (#PCDATA & p+)>
<!ATTLIST paso (opcional) #IMPLIED>
]>

Ya tenemos, por tanto, un DTD conformado para establecer nuestras etiquetas de marcado, 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. De este modo, 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 forma 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 llama marcado, 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 se definen 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>.
Es muy <DIFICULTAD>fácil</DIFICULTAD> de preparar, y requiere sólo <TIEMPO>55<TIEMPO> minutos en total. Además es 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 púding 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> <MIDA>cucharadas soperas<TAMAÑO> de <INGRED>azúcar</INGRED></ITEM> para hacer el caramelo. Además, si queremos, le podemos añadir al gusto <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>
<PASO><P>Primero, tenemos que mezclar la docena de huevos y el dulce de leche hasta hacer 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 esto, calentamos el horno.</P></PASO>

<PASO><P>Una vez que hemos preparado el recipiente, vertemos sobre él la masa (se le pueden añadir las <ITEM NECES="opcional">nueces</ITEM>) y lo dejaremos en el horno sobre otro recipiente al baño maría.</P></PASO>
<PASO><P>En estos momentos, el horno debe estar muy caliente.</P></PASO>
<PASO>Una vez que han pasado <TEMPS>30</TIEMPO> minutos, lo podemos retirar y, poco después, ponerlo en la nevera.<PASO>
</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 es necesario 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, pueden generarse 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?, o ¿qué recetas incluyen el azúcar como ingrediente?, o ¿qué postres podemos hacer en un tiempo no superior a 40 minutos?

Gracias al marcado de los documentos con etiquetas regidas por un DTD que sigue las directrices del 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 hace 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 diferente, nos encontramos con problemas de código o interpretación, lo cual no ocurre con SGML. Puesto que no se trata de un producto comercial, sino de un estándar universal, el usuario 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 resolver otros problemas como, por ejemplo, la recuperación de la información.

Como hemos comentado con anterioridad, el SGML no especifica cómo debe verse el documento, y ya que 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 el año 1996, y que define un lenguaje basado en "Scheme"; se trata de un lenguaje funcional 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 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