stringtranslate.com

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 la norma ISO 8879 establece que el marcado generalizado se basa en dos postulados : [1]

DocBook SGML y LinuxDoc son ejemplos que utilizan herramientas SGML.

Versiones estándar

SGML es una norma ISO : “ISO 8879:1986 Procesamiento de la información – Sistemas de texto y de oficina – Lenguaje de marcado generalizado estándar (SGML)”, de la que existen tres versiones:

SGML es parte de un trío de estándares ISO habilitadores para documentos electrónicos desarrollados por ISO/IEC JTC 1/SC 34 [1] [2] (Comité Técnico Conjunto ISO/IEC 1, Subcomité 34 – Lenguajes de procesamiento y descripción de documentos):

SGML está respaldado por varios informes técnicos, en particular

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 término "GML" utilizando las iniciales de sus apellidos. [5] Goldfarb también escribió el trabajo definitivo sobre la sintaxis de SGML en "The SGML Handbook". [6] La sintaxis de SGML es más cercana al formato COCOA . [ aclaración necesaria ] Como lenguaje de marcado de documentos, SGML fue diseñado 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 seguir siendo 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 de publicación industrial. La llegada del perfil XML ha hecho que SGML sea adecuado para una aplicación generalizada para uso general a pequeña escala.

Validez del documento

SGML (ENR+WWW) define dos tipos de validez. Según los términos y definiciones revisados ​​de la norma ISO 8879 (del borrador público [7] ):

Un documento SGML conforme debe ser un documento SGML válido en cuanto a tipo, un documento SGML válido en cuanto a etiqueta, o ambos. Nota: Un usuario puede desear aplicar restricciones adicionales a un documento, como por ejemplo si una instancia de documento se almacena de forma íntegra o no tiene referencias de entidad.

El estándar define un documento SGML de tipo válido como

Un documento SGML en el que, para cada instancia de documento, hay una declaración de tipo de documento (DTD) asociada a cuya DTD se ajusta esa instancia.

El estándar define un documento SGML con etiquetas válidas como

Un documento SGML, todas cuyas instancias de documento están completamente etiquetadas. No es necesario que haya una declaración de tipo de documento asociada con ninguna de las instancias. Nota: Si hay una declaración de tipo de documento , la instancia se puede analizar con o sin referencia a ella.

Terminología

La validez de etiquetas 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 no realiza contribuciones al conjunto de información XML al documento. El estándar llama a esto " totalmente etiquetado" . El almacenamiento integral refleja el requisito de XML de que los elementos terminan en la misma entidad en la que comenzaron. El almacenamiento sin referencias refleja el requisito de HTML de que las referencias de entidad son para caracteres especiales y no contienen marcado. Los comentarios sobre validez de SGML, especialmente los comentarios que se realizaron antes de 1997 o que no conocen SGML (ENR+WWW), solo cubren la validez de tipo .

El énfasis del SGML en la validez respalda el requisito de que el marcado generalizado debe ser riguroso. (ISO 8879 A.1)

Sintaxis

Un documento SGML puede tener tres partes:

  1. La Declaración SGML,
  2. el Prólogo, que contiene una declaración DOCTYPE con las diversas declaraciones de marcado que juntas forman una Definición de Tipo de Documento (DTD), y
  3. la instancia en sí, que contiene un elemento superior y su contenido.

Un documento SGML puede estar compuesto por muchas entidades (fragmentos discretos de texto). En SGML, las entidades y los tipos de elementos utilizados en el documento pueden especificarse 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 del documento.

Aunque el 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 está compuesto de unidades llamadas entidades. Una entidad puede hacer referencia a otras entidades para provocar su inclusión en el documento. Un documento comienza en una "raíz" o entidad de documento. Lógicamente, el documento está compuesto de declaraciones, elementos, comentarios, referencias de caracteres e instrucciones de procesamiento , todos los cuales se indican en el documento mediante marcado explícito.

Para obtener información introductoria sobre una sintaxis SGML básica y moderna, consulte XML . El siguiente material se centra en características que no se encuentran en XML y no constituye un resumen exhaustivo de la sintaxis SGML.

Características opcionales

SGML generaliza y admite una amplia gama de lenguajes de marcado que se utilizaban a mediados de los años 80. Estos iban desde sintaxis concisas similares a Wiki hasta lenguajes entre corchetes similares a RTF y lenguajes de etiquetas coincidentes similares a HTML . SGML logró esto mediante una sintaxis concreta de referencia predeterminada relativamente simple aumentada con una gran cantidad de características opcionales que se podían habilitar en la Declaración SGML. No todos los analizadores sintácticos SGML pueden procesar necesariamente 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 de las características de SGML están relacionadas con la minimización del marcado. Otras características están relacionadas con el marcado simultáneo (paralelo) (CONCUR), con la vinculación de atributos de procesamiento (LINK) y con la incorporación de documentos SGML dentro de documentos SGML (SUBDOC).

La noción de características personalizables no era apropiada para el uso en la Web, por lo que uno de los objetivos de XML era minimizar las características opcionales. Sin embargo, las reglas de formación correcta de XML no pueden soportar lenguajes tipo Wiki, lo que los deja sin estandarizar y difíciles de integrar con sistemas de información no textuales.

Sintaxis concretas y abstractas

La sintaxis concreta SGML habitual (predeterminada) se parece a este ejemplo, que es la sintaxis concreta HTML predeterminada:

<QUOTE TYPE= "ejemplo" > normalmente algo como <ITALICS> esto </ITALICS> </QUOTE>     

SGML proporciona una sintaxis abstracta que se puede implementar en muchos tipos diferentes de sintaxis concreta . Aunque la norma de marcado utiliza corchetes angulares como delimitadores de etiquetas de inicio y fin en un documento SGML (según la sintaxis concreta de referencia definida por el estándar ), es posible utilizar otros caracteres, siempre que se defina una sintaxis concreta adecuada en la declaración SGML del documento. [8] Por ejemplo, un intérprete SGML podría programarse para analizar GML, donde las etiquetas están delimitadas por dos puntos a la izquierda y un punto a la derecha , y un :eprefijo denota una etiqueta de fin: :xmp.Hello, world:exmp.. Según la sintaxis de referencia, no se distingue entre mayúsculas y minúsculas en los nombres de las etiquetas, por lo que las tres etiquetas <quote>, <QUOTE>, y <quOtE>son equivalentes. (Una sintaxis concreta podría cambiar esta regla a través de las declaraciones NAMECASE NAMING).

Minimización del marcado

SGML tiene funciones para reducir la cantidad de caracteres necesarios para marcar un documento, que deben estar habilitadas en la Declaración SGML. Los procesadores SGML no necesitan admitir todas las funciones disponibles, lo que permite que las aplicaciones toleren muchos tipos de omisiones de marcado involuntarias; sin embargo, los sistemas SGML generalmente no toleran estructuras no válidas. XML no tolera omisiones de sintaxis y no requiere una DTD para verificar que estén bien formadas.

OMITIR ETIQUETA

Tanto las etiquetas de inicio como las de finalización se pueden omitir de una instancia de documento, siempre que:

  1. La función OMITTAG está habilitada en la Declaración SGML,
  2. La DTD indica que se permite omitir las etiquetas,
  3. #REQUIRED(para las etiquetas de inicio) el elemento no tiene atributos obligatorios ( ) asociados , y
  4. La etiqueta se puede inferir de forma inequívoca por el 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:

<!ELEMENT  capítulo  -  -  ( título ,  sección +) > <!ELEMENT  título  o  o  ( #PCDATA ) > <!ELEMENT  sección  -  -  ( título ,  subsección +) >

Luego este extracto:

<capítulo> Introducción  a  SGML <sección> La Declaración  SGML <subsección> ...

que omite dos <title>etiquetas y dos </title>etiquetas, representaría un marcado válido.

Omitir etiquetas es opcional: el mismo extracto podría etiquetarse de esta manera:

<capítulo><título> Introducción  a  SGML </título> <sección><título> La Declaración  SGML </título> <subsección> ...

y aún representaría un marcado válido.

Nota: La función OMITTAG no está relacionada con el etiquetado de elementos cuyo contenido declarado es EMPTYel definido en el DTD:

<!ELEMENTO  imagen  -  o  VACÍO >

Los elementos definidos de esta manera no tienen etiqueta de cierre y, si se especifica una en la instancia del documento, se obtendrá un marcado no válido. En este sentido, esto es sintácticamente diferente de los elementos XML vacíos.

REF. CORTA

Las etiquetas se pueden reemplazar con cadenas delimitadoras para lograr un marcado más conciso mediante la función SHORTREF. Este estilo de marcado ahora está asociado con el marcado wiki , por ejemplo, donde dos signos de igual (==) al comienzo de una línea son la "etiqueta de inicio del encabezado" y dos signos de igual (==) después son la "etiqueta de fin del encabezado".

Etiqueta corta

Los lenguajes de marcado SGML cuya sintaxis concreta habilita la función SHORTTAG VALUE no requieren que los valores de atributos que contienen solo caracteres alfanuméricos estén encerrados entre comillas, ya sean dobles " "(LIT) o simples ' '(LITA), de modo que el ejemplo de marcado anterior podría escribirse:

<QUOTE TYPE= ejemplo > normalmente algo como <ITALICS> esto < /> </QUOTE>     

Una característica de los lenguajes de marcado SGML es el "etiquetado vacío presuntuoso", de modo que la etiqueta de cierre 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). La expresión es, por tanto, equivalente a <ITALICS>this</ITALICS>.

NETO

Otra característica es la construcción NET<ITALICS/this/ (Null End Tag): , que es estructuralmente equivalente a <ITALICS>this</ITALICS>.

Otras características

Además, la función SHORTTAG NETENABL IMMEDNET permite acortar las etiquetas que rodean un valor de texto vacío, pero prohíbe acortar etiquetas completas:

<CITA></CITA>

se puede escribir como

<CITA// 

donde la primera barra (/) representa el "cierre de etiqueta de inicio" que permite NET (NESTC), y la segunda barra representa NET. NOTA: XML define NESTC con una / y NET con un > (corchete angular); por lo tanto, la construcción correspondiente en XML aparece como <QUOTE/> .

La tercera característica es "texto en la misma línea", que permite que un elemento de marcado termine con un final de línea; especialmente útil para encabezados y similares, que requieren el uso de la minimización de SHORTREF o DATATAG. Por ejemplo, si el DTD incluye las siguientes declaraciones:

<!ELEMENT  líneas  ( línea *) > <!ELEMENT  línea  O  -  ( #PCDATA ) > <!ENTITY  etiqueta-línea  "</line>" > <!SHORTREF  línea única  "&#RE;&#RS;"  etiqueta-línea > <!USEMAP  línea única  >

(y "&#RE;&#RS;" es un delimitador de referencia corta en la sintaxis concreta), entonces:

<lines>
primera  líneasegunda  linea </lines>

es equivalente a:

<lines> <line> primera  línea </line> <line> segunda  línea </line> </lines>

Caracterización formal

SGML tiene muchas características que desafiaban la descripción conveniente con la popular teoría de autómatas formales y la tecnología de análisis sintáctico contemporánea de los años 1980 y 1990. El estándar advierte en el Anexo H:

La notación de grupos de modelos SGML fue diseñada deliberadamente para parecerse a la notación de expresiones regulares de la teoría de autómatas , porque la teoría de autómatas proporciona una base teórica para algunos aspectos de la noción de conformidad con un modelo de contenido. No se debe hacer ninguna suposición sobre la aplicabilidad general de los autómatas a los modelos de contenido.

Un informe sobre una implementación temprana de un analizador para SGML básico, el Amsterdam SGML Parser, [9] señala

La gramática DTD en SGML debe cumplir con una noción de unívoca que se asemeja mucho a las condiciones LL(1)

y especifica varias diferencias.

No parece haber una clasificación definitiva del SGML completo en relación con una clase conocida de gramática formal . Las clases plausibles pueden incluir gramáticas de árboles adyacentes y gramáticas adaptativas .

XML se describe como generalmente analizable como una gramática de dos niveles para XML no validado y una tubería de corrutinas de estilo Conway ( analizador léxico , analizador sintáctico , validador) para XML válido. [10] Se informa que las producciones SGML en el estándar ISO son LL(3) o LL(4). [11] Se informa que los subconjuntos de clases XML se pueden expresar utilizando una gramática W. [12] Según un artículo, [13] y probablemente se considere a nivel de conjunto de información o árbol de análisis sintáctico en lugar de a nivel de carácter o delimitador:

La clase de documentos que se ajustan a una gramática de documento SGML dada forma un lenguaje LL(1). ... Sin embargo, 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 con raíz (RDAG) de unidades de almacenamiento físico 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 dispositivo para vincular y anotar entidades externas que no sean SGML.

El estándar SGML lo describe en términos de mapas y modos de reconocimiento (s9.6.1). Cada entidad y cada elemento pueden tener una notación asociada o un 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 de delimitadores asociado (y un mapa de referencias breve ), que determina qué caracteres se tratan como delimitadores en contexto. El estándar SGML caracteriza el análisis como una máquina de estados 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 sintáctico implica recorrer el gráfico de entidades 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 utiliza tanto de forma pasiva (para reconocer estructuras léxicas) como de forma activa (para generar estructuras y etiquetas faltantes que el DTD ha declarado opcionales). Las etiquetas de inicio y de fin se pueden omitir, porque se pueden inferir. En términos generales, una serie de etiquetas se puede omitir solo si existe una única ruta posible en la gramática para implicarlas. Fue este uso activo de las gramáticas lo que hizo que el análisis sintáctico concreto de SGML fuera difícil de caracterizar formalmente.

SGML utiliza el término validación tanto para el reconocimiento como para la generación. XML no utiliza la gramática (DTD) para cambiar los mapas de 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 lo está la validación SGML. SGML sin una DTD (por ejemplo, XML simple), es una gramática o un lenguaje; SGML con una DTD es un metalenguaje . SGML con una declaración SGML es, quizás, un meta-metalenguaje, ya que es un metalenguaje cuyo mecanismo de declaración es un metalenguaje.

SGML tiene una sintaxis abstracta implementada por muchas sintaxis concretas posibles; sin embargo, este no es el mismo uso que en un árbol de sintaxis abstracta y en un árbol de sintaxis concreta . 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 conjunto de información XML corresponde más a la noción de lenguaje de programación de sintaxis abstracta introducida por John McCarthy .

Derivados

XML

El XML (lenguaje de marcado extensible) del W3C 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 SGML presentes en la sintaxis de referencia (como omitir etiquetas y subdocumentos anidados), XML agrega una serie de restricciones adicionales a los tipos de sintaxis SGML. Por ejemplo, a pesar de habilitar formas de etiqueta abreviadas SGML, XML no permite etiquetas de inicio o fin sin cerrar. También se basó en muchas de las adiciones realizadas por el Anexo WebSGML. XML actualmente 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

Aunque HTML (Hyper Text Markup Language) 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. [ cita requerida ] Por tanto, el diseño de HTML se inspiró en el etiquetado SGML, pero, como no se establecieron directrices claras de expansión y análisis, la mayoría de los documentos HTML actuales no son documentos SGML válidos. Más tarde, HTML se reformuló (versión 2.0) para que fuera más una aplicación SGML; sin embargo, el lenguaje de marcado 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 la norma ISO 8879 – SGML. [14]

El estatuto para la reactivación en 2006 del Grupo de Trabajo HTML del Consorcio World Wide Web dice que "el Grupo no asumirá que se utiliza un analizador SGML para 'HTML clásico ' ". [15] 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, [16] que coinciden más estrechamente con 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. [17]

Diccionario Oxford Inglés

Un fragmento del Oxford English Dictionary (1985), que muestra el marcado SGML

La segunda edición del Oxford English Dictionary (OED) está completamente marcada con un lenguaje de marcado basado en SGML utilizando el editor de texto LEXX . [18]

La tercera edición está marcada como XML.

Otros

Otros lenguajes de marcado de documentos están parcialmente relacionados con SGML y XML, pero, dado que no se pueden analizar, validar ni procesar de ninguna otra manera utilizando herramientas SGML y XML estándar, no se consideran lenguajes SGML o XML; el lenguaje de marcado de formato Z 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, en la actualidad, admiten la coincidencia de patrones con expresiones regulares y Unicode. Un ejemplo es el lenguaje de programación Scala .

Aplicaciones

Los lenguajes de marcado de documentos definidos mediante SGML se denominan "aplicaciones" según el estándar; 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 SGML anteriores a XML.

Implementaciones de código abierto

Entre las implementaciones de código abierto más importantes de SGML se incluyen:

SP y Jade, los procesadores DSSSL asociados, son mantenidos por el proyecto OpenJade y son partes comunes de las distribuciones Linux. Un archivo general de software y materiales SGML se encuentra en SUNET. La clase de analizador HTML original, en la implementación de Java de Sun System, es un analizador SGML con características limitadas, que utiliza terminología y conceptos SGML.

Véase también

Referencias

  1. ^ ab ISO (5 de marzo de 2008). «JTC 1/SC 34 – Lenguajes de procesamiento y descripción de documentos». ISO . Consultado el 25 de diciembre de 2009 .
  2. ^ ISO JTC1/SC34. «JTC 1/SC 34 – Lenguajes de procesamiento y descripción de documentos» . Consultado el 25 de diciembre de 2009 .{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  3. ^ ISO/IEC 10744 – Higiene
  4. ^ "ISO/IEC TR 9573" (PDF) . ISO . 1991 . Consultado el 5 de diciembre de 2017 .
  5. ^ Goldfarb, Charles F. (1996). «Las raíces de SGML: un recuerdo personal». Archivado desde el original el 20 de diciembre de 2012. Consultado el 7 de julio de 2007 .
  6. ^ Goldfarb, Charles F. (1990). Manual de SGML. Clarendon Press. ISBN 9780198537373.
  7. ^ "Términos y definiciones del borrador de la norma ISO 8879".
  8. ^ Wohler, Wayne (21 de julio de 1998). «Declaraciones SGML» . Consultado el 17 de agosto de 2009 .
  9. ^ Egmond (diciembre de 1989). "La implementación del analizador SGML de Amsterdam" (PDF) .
  10. ^ Carroll, Jeremy J. (26 de noviembre de 2001). "CoParsing of RDF & XML" (PDF) . Hewlett-Packard . Consultado el 9 de octubre de 2009 .
  11. ^ "SGML: Producciones gramaticales".
  12. ^ "Re: Otros problemas de espacios en blanco fue Re: Reglas de espacios en blanco (v2)".
  13. ^ Bruggemann-Klein. "Herramientas y técnicas de construcción de compiladores para analizadores SGML: dificultades y soluciones".
  14. ^ "Conformidad con HTML 4–4: requisitos y recomendaciones" . Consultado el 30 de diciembre de 2009 .
  15. ^ Lilley, Chris ; Berners-Lee, Tim (6 de febrero de 2009). «HTML Working Group Charter» . Consultado el 19 de abril de 2007 .
  16. ^ "HTML5 — Análisis de documentos HTML". World Wide Web Consortium . 28 de octubre de 2014. Consultado el 29 de junio de 2015 .
  17. ^ Dubost, Karl (15 de enero de 2008). «HTML 5, un vocabulario, dos serializaciones». Blog de preguntas y respuestas . W3C . Consultado el 25 de febrero de 2009 .
  18. ^ Cowlishaw, MF (1987). "LEXX: un editor estructurado programable". Revista IBM de investigación y desarrollo . 31 (1). IBM : 73. doi :10.1147/rd.311.0073.

Enlaces externos