Lenguaje de marcado generalizado estándar
El Lenguaje de marcado generalizado estándar (SGML; ISO 8879:1986) es un estándar para definir lenguajes de marcado generalizados para documentos. El Anexo A.1 de ISO 8879 establece que el marcado generalizado se "basa en dos postulados":
- Declarativo: Markup debe describir la estructura de un documento y otros atributos en lugar de especificar el procesamiento que necesita ser realizado, porque es menos probable que contravenga con futuros desarrollos.
- Rigorous: Para que el marcador pueda aprovechar las técnicas disponibles para el procesamiento, el marcado debe definir rigurosamente objetos como programas y bases de datos.
DocBook SGML y LinuxDoc son ejemplos que utilizaron herramientas SGML.
Versiones estándar
SGML es un estándar ISO: "ISO 8879:1986 Procesamiento de la información - Texto y sistemas de oficina - Lenguaje de marcado generalizado estándar (SGML)", del cual existen tres versiones:
- Original SGML, que fue aceptada en octubre de 1986, seguido de un pequeño Corrección Técnica.
- SGML (ENR), en 1996, resultado de un Corrección Técnica para añadir Reglas de inscripción ampliadas permitiendo el lenguaje arbitrario y el marcado de los reclutas.
- SGML (ENR+WWW o WebSGML), en 1998, resultado de un Corrección Técnica para apoyar mejor los requisitos XML y WWW.
SGML es parte de un trío de estándares ISO habilitadores para documentos electrónicos desarrollados por ISO/IEC JTC 1/SC 34 (Comité técnico conjunto 1 de ISO/IEC, Subcomité 34: descripción de documentos y lenguajes de procesamiento):
- SGML (ISO 8879) – Lenguaje de marcado generalizado
- SGML fue reelaborado en 1998 en XML, un perfil exitoso de SGML. El SGML completo rara vez se encuentra o utiliza en nuevos proyectos.
- DSSSL (ISO/IEC 10179) – Tratamiento de documentos y lenguaje de estilo basado en Scheme.
- DSSSL fue rediseñado en W3C XSLT y XSL-FO que utilizan una sintaxis XML. Actualmente, DSSSL rara vez se utiliza en nuevos proyectos aparte de la documentación de Linux.
- HyTime – hipertexto generalizado y programación.
- HyTime se reelaboró parcialmente en W3C XLink. HyTime rara vez se utiliza en nuevos proyectos.
SGML está respaldado por varios informes técnicos, en particular
- ISO/IEC TR 9573 – Procesamiento de información – SGML – Técnicas para el uso de SGML
- Parte 13: Establecimiento de entidades públicas para las matemáticas y la ciencia
- En 2007, el grupo de trabajo W3C MathML acordó asumir el mantenimiento de estos conjuntos de entidades.
- Parte 13: Establecimiento de entidades públicas para las matemáticas y la ciencia
Historia
SGML desciende del lenguaje de marcado generalizado (GML) de IBM, que Charles Goldfarb, Edward Mosher y Raymond Lorie desarrollaron en la década de 1960. Goldfarb, editor del estándar internacional, acuñó el "GML" término utilizando las iniciales de su apellido. Goldfarb también escribió el trabajo definitivo sobre la sintaxis SGML en "The SGML Handbook". La sintaxis de SGML está más cerca del formato COCOA. Como lenguaje de marcado de documentos, SGML se diseñó originalmente para permitir el intercambio de documentos de proyectos grandes legibles por máquina en el gobierno, la ley y la industria. Muchos de estos documentos deben permanecer legibles durante varias décadas, mucho tiempo en el campo de la tecnología de la información. SGML también fue ampliamente aplicado por las industrias militar, aeroespacial, de referencia técnica y editorial industrial. El advenimiento del perfil XML ha hecho que SGML sea adecuado para aplicaciones generalizadas para uso general a pequeña escala.
Vigencia del documento
SGML (ENR+WWW) define dos tipos de validez. De acuerdo con los términos y definiciones revisados de ISO 8879 (del borrador público):
Un documento SGML conforme debe ser un documento SGML de tipo tipo, un documento SGML de tipo tag, o ambos. Nota: Un usuario tal vez desee imponer restricciones adicionales en un documento, como si una instancia de documento es almacenada integralmente o libre de referencias de entidad.
Un documento SGML de tipo válido está definido por el estándar como
Un documento SGML en el que, por cada instancia de documento, existe una declaración de tipo de documento asociada (DTD) a cuyo DTD se ajusta.
Un documento SGML tag-valid está definido por el estándar como
Un documento SGML, todos cuyos casos de documentos están totalmente etiquetados. No es necesario que haya una declaración de tipo de documento asociada a ninguno de los casos. Nota: Si hay una declaración de tipo de documento, la instancia puede ser analizada con o sin referencia a ella.
Terminología
Tag-validity se introdujo en SGML (ENR+WWW) para admitir XML que permite documentos sin declaración DOCTYPE pero que se pueden analizar sin una gramática, o documentos que tienen una declaración DOCTYPE que hace ninguna contribución XML Infoset al documento. El estándar llama a esto totalmente etiquetado. Almacenado integralmente refleja el requisito XML de que los elementos terminen en la misma entidad en la que comenzaron. Sin referencia refleja el requisito de HTML de que las referencias a entidades sean para caracteres especiales y no contengan marcas. Los comentarios de validez de SGML, especialmente los comentarios que se realizaron antes de 1997 o que desconocen SGML (ENR+WWW), solo cubren la validez de tipo.
El énfasis de SGML en la validez respalda el requisito para el marcado generalizado de que el marcado debe ser riguroso. (ISO 8879 A.1)
Sintaxis
Un documento SGML puede tener tres partes:
- la Declaración SGML,
- el Prólogo, que contiene una declaración DOCTYPE con los diversos Declaraciones de marcación que juntos hacen una definición de tipo de documento (DTD), y
- la instancia misma, que contiene un elemento más alto y su contenido.
Un documento SGML puede estar compuesto por muchas entidades (piezas discretas de texto). En SGML, las entidades y los tipos de elementos utilizados en el documento se pueden especificar con una DTD, los diferentes conjuntos de caracteres, características, conjuntos de delimitadores y palabras clave se especifican en la Declaración SGML para crear la sintaxis concreta de el documento.
Aunque SGML completo permite el marcado implícito y algunos otros tipos de etiquetas, la especificación XML (s4.3.1) establece:
Cada documento XML tiene una estructura lógica y física. Físicamente, el documento se compone de unidades llamadas entidades. Una entidad puede referirse a otras entidades para que su inclusión en el documento. Un documento comienza en una entidad "root" o documento. Lógicamente, el documento se compone de declaraciones, elementos, comentarios, referencias de carácter e instrucciones de procesamiento, todas las cuales se indican en el documento por marcado explícito.
Para obtener información introductoria sobre una sintaxis SGML básica y moderna, consulte XML. El siguiente material se concentra en funciones que no están en XML y no es un resumen completo de la sintaxis SGML.
Características opcionales
SGML generaliza y es compatible con una amplia gama de lenguajes de marcado que se encontraban a mediados de la década de 1980. Estos iban desde sintaxis concisas similares a Wiki hasta lenguajes entre paréntesis similares a RTF y lenguajes de etiquetas coincidentes similares a HTML. SGML hizo esto mediante una sintaxis concreta de referencia predeterminada relativamente simple aumentada con una gran cantidad de características opcionales que podrían habilitarse en la Declaración SGML. No todos los analizadores SGML necesariamente pueden procesar todos los documentos SGML. Debido a que la Declaración del sistema de cada procesador se puede comparar con la Declaración SGML del documento, siempre es posible saber si un documento es compatible con un procesador en particular..
Muchas características de SGML se relacionan con la minimización del marcado. Otras funciones se relacionan con el marcado simultáneo (paralelo) (CONCUR), con los atributos de procesamiento de enlaces (LINK) y con la incrustación de documentos SGML dentro de documentos SGML (SUBDOC).
La noción de funciones personalizables no era adecuada para el uso web, por lo que uno de los objetivos de XML era minimizar las funciones opcionales. Sin embargo, las reglas de buena formación de XML no pueden admitir lenguajes similares a Wiki, lo que los deja sin estandarizar y dificulta su integración con los sistemas de información que no son de texto.
Sintaxis concreta y abstracta
La sintaxis concreta habitual (predeterminada) de SGML se parece a este ejemplo, que es la sintaxis concreta predeterminada de HTML:
■QUOTE TYPE="example"■típicamente algo como Identificacionesesto■/ITALICS■/QUOTE
SGML proporciona una sintaxis abstracta que se puede implementar en muchos tipos diferentes de sintaxis concreta. Aunque la norma de marcado es el uso de corchetes angulares como delimitadores de etiquetas de inicio y final en un documento SGML (según la sintaxis concreta de referencia definida por el estándar), es posible usar otros caracteres, siempre que un sintaxis concreta se define en la declaración SGML del documento. Por ejemplo, un intérprete SGML puede programarse para analizar GML, donde las etiquetas están delimitadas con dos puntos a la izquierda y un punto a la derecha, por lo tanto, un prefijo :e denota una etiqueta final: : xmp.Hola, mundo:exmp.
. De acuerdo con la sintaxis de referencia, las mayúsculas y minúsculas no se distinguen en los nombres de las etiquetas, por lo que las tres etiquetas: (i) <quote>
, (ii) <QUOTE>
, y (iii) <quOtE>
son equivalentes. (NOTA: Una sintaxis concreta podría cambiar esta regla a través de las declaraciones NAMECASE NAMING).
Minimización de marcas
SGML tiene características para reducir la cantidad de caracteres necesarios para marcar un documento, que debe habilitarse en la Declaración SGML. No es necesario que los procesadores SGML admitan todas las funciones disponibles, lo que permite que las aplicaciones toleren muchos tipos de omisiones de marcado inadvertidas; sin embargo, los sistemas SGML por lo general no toleran las estructuras no válidas. XML es intolerante con las omisiones de sintaxis y no requiere una DTD para verificar la buena formación.
OMITIR
Tanto las etiquetas de inicio como las etiquetas de finalización pueden omitirse de una instancia de documento, siempre que:
- la característica OMITTAG está habilitada en la Declaración SGML,
- el DTD indica que se permite omitir las etiquetas,
- (para las etiquetas de inicio) el elemento no tiene requerido asociado (
#REQUIRED
) atributos, y - la etiqueta puede ser inferida inequívocamente por contexto.
Por ejemplo, si se especifica OMITTAG YES en la declaración SGML (habilitando la función OMITTAG) y la DTD incluye las siguientes declaraciones:
¡Atención! Capítulo - - ()Título, Sección+)■¡Atención! Título o o ()#PCDATA)■¡Atención! Sección - - ()Título, subsección+)■
entonces este extracto:
IdentificadoIntroducción al SGML
■secciónDeclaración SGML
■subsección...
que omite dos etiquetas <title>
y dos </title>
tags, representaría un marcado válido.
Omitir etiquetas es opcional; el mismo extracto podría etiquetarse así:
- No.Introducción al SGML■/título▪sección tituladaDeclaración SGML■/título■subsección...
y aún representaría un marcado válido.
Nota: la característica OMITTAG no está relacionada con el etiquetado de elementos cuyo contenido declarado es EMPTY
como se define en la DTD:
¡Atención! imagen - o EMPTY■
Los elementos definidos de esta manera no tienen una etiqueta final, y especificar una en la instancia del documento daría como resultado un marcado no válido. Esto es sintácticamente diferente de los elementos vacíos de XML en este sentido.
REFERENCIA CORTA
Las etiquetas se pueden reemplazar con cadenas delimitadoras, para un marcado breve, a través de la función SHORTREF. Este estilo de marcado ahora está asociado con el marcado wiki, p. donde dos signos de igual (==), al comienzo de una línea, son la "etiqueta de inicio de encabezado", y dos signos de igual (==) después de eso son el "final de encabezado- etiqueta".
ETIQUETA CORTA
Los lenguajes de marcado SGML cuya sintaxis concreta habilita la función VALOR CORTO, no requieren que los valores de atributos que contengan solo caracteres alfanuméricos se incluyan entre comillas, ya sea doble " "
(LIT) o ' '
(LITA), de modo que el ejemplo de marcado anterior podría escribirse:
■QUOTE TYPE=ejemplo■típicamente algo como Identificacionesesto./
■/QUOTE
Una característica de los lenguajes de marcado SGML es el "presuntuoso etiquetado vacío", de modo que la etiqueta final vacía </>
en <ITALICS>this< />
"hereda" su valor de la etiqueta de inicio completa anterior más cercana, que, en este ejemplo, es <ITALICS>
(en otras palabras, cierra el elemento abierto más recientemente). Por tanto, la expresión es equivalente a <ITALICS>this</ITALICS>
.
NETO
Otra característica es la construcción NET (Etiqueta final nula): <ITALICS/this/
, que es estructuralmente equivalente a <ITALICS>this< /cursiva>.
Otras características
Además, la función SHORTTAG NETENABL IMMEDNET permite acortar etiquetas que rodean un valor de texto vacío, pero prohíbe acortar etiquetas completas:
> >
se puede escribir como
■QUOTE///
donde la primera barra inclinada (/) representa el "cierre de la etiqueta de inicio" (NESTC), y la segunda barra representa NET. NOTA: XML define NESTC con / y NET con > (corchete angular), por lo que la construcción correspondiente en XML aparece como <CITA/>.
La tercera característica es 'texto en la misma línea', lo que permite que un elemento de marcado termine con un final de línea; especialmente útil para encabezados y demás, que requieren el uso de minimización SHORTREF o DATATAG. Por ejemplo, si la DTD incluye las siguientes declaraciones:
¡Atención! líneas ()línea*)■¡Atención! línea O - ()#PCDATA)■¡Cierto! line-tagc "Seguido"■¡Atención! SHORTREF one-line "Conseguir" line-tagc■¡Atención! USEMAP one-line línea■
(y "&#RE;&#RS;" es un delimitador de referencia corta en la sintaxis concreta), entonces:
Identificacionesprimera línea
segunda línea
■/líneas relacionadas
es equivalente a:
Identificaciones▪ líneaprimera línea■/línea▪ líneasegunda línea■/línea■/líneas relacionadas
Caracterización formal
SGML tiene muchas características que desafiaron la descripción conveniente con la teoría popular de autómatas formales y la tecnología de análisis contemporáneo de los años 80 y 90. La norma advierte en el Anexo H:
El SGML grupo modelo notación fue diseñada deliberadamente para parecerse a la notación de expresión regular de la teoría de la automata, porque la teoría de la automata proporciona una base teórica para algunos aspectos de la noción de conformidad con un modelo de contenido. No debe hacerse ninguna suposición sobre la aplicabilidad general de la automata a los modelos de contenido.
Un informe sobre una implementación temprana de un analizador para SGML básico, Amsterdam SGML Parser, señala
la DTD-grammar en SGML debe conformarse a una noción de inequívoca que se asemeja estrechamente a las condiciones LL(1)
y especifica varias diferencias.
Parece que no hay una clasificación definitiva de SGML completo frente a una clase conocida de gramática formal. Las clases plausibles pueden incluir gramáticas contiguas a árboles y gramáticas adaptativas.
XML se describe como generalmente analizable como una gramática de dos niveles para XML no validado y una canalización de rutinas estilo Conway (lexer, parser, validator) para XML válido. Las producciones SGML en el estándar ISO se reportan como LL(3) o LL(4). Se informa que los subconjuntos de clase XML se pueden expresar utilizando una gramática W. De acuerdo con un documento, y probablemente considerado en un conjunto de información o nivel de árbol de análisis en lugar de un carácter o delimitador:
La clase de documentos que se conforman a una gramática de documento SGML determinada forma un lenguaje LL(1).... Las gramáticas de documentos SGML por sí mismas no son gramáticas LL(1).
El estándar SGML no define SGML con estructuras de datos formales, como árboles de análisis; sin embargo, un documento SGML se construye a partir de un gráfico acíclico dirigido enraizado (RDAG) de unidades de almacenamiento físicas conocidas como "entidades", que se analiza en un RDAG de unidades estructurales conocidas como "elementos".. El gráfico físico se caracteriza vagamente como un árbol de entidades, pero las entidades pueden aparecer varias veces. Además, el gráfico de estructura también se caracteriza vagamente como un árbol de elementos, pero el marcado ID/IDREF permite arcos arbitrarios.
Los resultados del análisis también pueden entenderse como un árbol de datos en diferentes notaciones; donde el documento es el nodo raíz y las entidades en otras notaciones (texto, gráficos) son nodos secundarios. SGML proporciona un aparato para enlazar y anotar entidades externas que no son SGML.
El estándar SGML lo describe en términos de mapas y modos de reconocimiento (s9.6.1). Cada entidad, y cada elemento, puede tener asociada una notación o tipo de contenido declarado, que determina los tipos de referencias y etiquetas que se reconocerán en esa entidad y elemento. Además, cada elemento puede tener un mapa delimitador asociado (y un mapa de referencia breve), que determina qué caracteres se tratan como delimitadores en el contexto. El estándar SGML caracteriza el análisis sintáctico como una máquina de estado que cambia entre modos de reconocimiento. Durante el análisis, hay una pila de mapas que configuran el escáner, mientras que el tokenizador se relaciona con los modos de reconocimiento.
El análisis implica atravesar el gráfico de entidad recuperado dinámicamente, encontrar/implicar etiquetas y la estructura del elemento, y validar esas etiquetas con la gramática. Un aspecto inusual de SGML es que la gramática (DTD) se usa tanto de forma pasiva, para reconocer estructuras léxicas, como de forma activa, para generar estructuras y etiquetas faltantes que la DTD ha declarado. Opcional. Las etiquetas de inicio y fin se pueden omitir porque se pueden inferir. En términos generales, una serie de etiquetas se pueden omitir solo si hay una única ruta posible en la gramática para implicarlas. Fue este uso activo de gramáticas lo que hizo que el análisis SGML concreto fuera difícil de caracterizar formalmente.
SGML usa el término validación tanto para reconocimiento como para generación. XML no usa la gramática (DTD) para cambiar los mapas delimitadores o para informar los modos de análisis, y no permite la omisión de etiquetas; en consecuencia, la validación XML de elementos no está activa en el sentido en que la validación SGML está activa. SGML sin una DTD (por ejemplo, XML simple), es una gramática o un lenguaje; SGML con un DTD es un metalenguaje. SGML con una declaración SGML es, quizás, un metalenguaje, ya que es un metalenguaje cuyo mecanismo de declaración es un metalenguaje.
SGML tiene una sintaxis abstracta implementada por muchas posibles sintaxis concretas; sin embargo, este no es el mismo uso que en un árbol sintáctico abstracto y como en un árbol sintáctico concreto. En el uso de SGML, una sintaxis concreta es un conjunto de delimitadores específicos, mientras que la sintaxis abstracta es el conjunto de nombres para los delimitadores. El XML Infoset corresponde más a la noción de lenguaje de programación de sintaxis abstracta introducida por John McCarthy.
Derivados
XML
El W3C XML (Extensible Markup Language) es un perfil (subconjunto) de SGML diseñado para facilitar la implementación del analizador en comparación con un analizador SGML completo, principalmente para su uso en la World Wide Web. Además de deshabilitar muchas opciones de SGML presentes en la sintaxis de referencia (como omitir etiquetas y subdocumentos anidados), XML agrega una serie de restricciones adicionales sobre los tipos de sintaxis de SGML. Por ejemplo, a pesar de habilitar formularios de etiquetas abreviadas SGML, XML no permite etiquetas de inicio o finalización no cerradas. También se basó en muchas de las adiciones hechas por el Anexo WebSGML. Actualmente, XML se usa más ampliamente que SGML completo. XML tiene una internacionalización ligera basada en Unicode. Las aplicaciones de XML incluyen XHTML, XQuery, XSLT, XForms, XPointer, JSP, SVG, RSS, Atom, XML-RPC, RDF/XML y SOAP.
HTML
Si bien HTML (lenguaje de marcado de hipertexto) se desarrolló de forma parcialmente independiente y en paralelo con SGML, su creador, Tim Berners-Lee, pretendía que fuera una aplicación de SGML. Por lo tanto, el diseño de HTML se inspiró en el etiquetado SGML, pero, dado que no se establecieron pautas claras de expansión y análisis, la mayoría de los documentos HTML reales no son documentos SGML válidos. Posteriormente, se reformuló HTML (versión 2.0) para que fuera más una aplicación SGML; sin embargo, el lenguaje de marcas HTML tiene muchas características heredadas y de manejo de excepciones que difieren de los requisitos de SGML. HTML 4 es una aplicación SGML que cumple totalmente con ISO 8879 - SGML.
El estatuto para la reactivación de 2006 del Grupo de Trabajo de HTML del Consorcio World Wide Web dice: "el Grupo no supondrá que se utiliza un analizador SGML para 'HTML clásico'". Aunque la sintaxis HTML se parece mucho a la sintaxis SGML con la sintaxis concreta de referencia predeterminada, HTML5 abandona cualquier intento de definir HTML como una aplicación SGML, definiendo explícitamente sus propias reglas de análisis, que se asemejan más a las implementaciones y documentos existentes. Sin embargo, define una serialización XHTML alternativa, que se ajusta a XML y, por lo tanto, también a SGML.
DEO
La segunda edición del Oxford English Dictionary (OED) está completamente marcada con un lenguaje de marcado basado en SGML que utiliza el editor de texto LEXX.
La tercera edición está marcada como XML.
Otros
Otros lenguajes de marcado de documentos están parcialmente relacionados con SGML y XML, pero, debido a que no se pueden analizar ni validar ni procesar de otra manera con herramientas estándar de SGML y XML, no se consideran lenguajes SGML ni XML; el lenguaje de marcado Z Format para composición tipográfica y documentación es un ejemplo.
Varios lenguajes de programación modernos admiten etiquetas como tipos de token primitivos, o ahora admiten Unicode y coincidencia de patrones de expresiones regulares. Un ejemplo es el lenguaje de programación Scala.
Aplicaciones
Los lenguajes de marcado de documentos definidos mediante SGML se denominan "aplicaciones" por la norma; muchas aplicaciones SGML anteriores a XML eran propiedad exclusiva de las organizaciones que las desarrollaron y, por lo tanto, no estaban disponibles en la World Wide Web. La siguiente lista es de aplicaciones pre-XML SGML.
- Text Encoding Initiative (TEI) es un consorcio académico que diseña, mantiene y desarrolla estándares técnicos para aplicaciones de representación textual en formato digital.
- DocBook es un lenguaje de marcado creado originalmente como una aplicación SGML, diseñada para autorizar la documentación técnica; DocBook actualmente es una aplicación XML.
- CALS (Continuous Acquisition and Life-cycle Support) es una iniciativa del Departamento de Defensa de EE.UU. para la captura electrónica de documentos militares y para vincular datos e información relacionados.
- HyTime define un conjunto de tipos de elementos orientados al hipertexto que permiten a los autores de documentos SGML construir presentaciones hipertexto y multimedia.
- EDGAR (Electronic Data-Gathering, Analysis, and Retrieval) efectos del sistema de recopilación, validación, indexación, aceptación y reenvío de presentaciones, por empresas y otros, que están legalmente obligados a presentar datos e formularios de información con la US Securities and Exchange Commission (SEC).
- LinuxDoc. Documentación para paquetes Linux ha utilizado el DTD de LinuxDoc SGML y el DTD XML Docbook.
- AAP DTD es una definición de tipo documento para documentos científicos, definida por la Asociación de Editores Americanos.
- ISO 12083, sucesor de AAP DTP, es un estándar internacional SGML para el intercambio de documentos entre autores y editores.
- SGMLguid fue una definición temprana del tipo de documento SGML creado, desarrollado y utilizado en CERN.
Implementaciones de código abierto
Entre las implementaciones significativas de código abierto de SGML se incluyen:
- ASP-SGML
- ARC-SGML, por Standard Generalized Markup Language Users', 1991, C language
- SGMLS, by James Clark, 1993, C language
- Proyecto YAO, por Yuan-ze Institute of Technology, Taiwan, con Charles Goldfarb, 1994, objeto
- SP by James Clark, C++ language
SP y Jade, los procesadores DSSSL asociados, son mantenidos por el proyecto OpenJade y son partes comunes de las distribuciones de Linux. Un archivo general de software y materiales SGML reside en SUNET. La clase de analizador HTML original, en la implementación de Java de Sun System, es un analizador SGML de características limitadas, que utiliza terminología y conceptos SGML.
Contenido relacionado
Patrón de fachada
Impresora de energía almacenada
Espectro ZX