¿Por qué XML se llama exactamente un "lenguaje"?

105

Me he estado preguntando por qué XML tiene una L en su nombre.

Por sí mismo, XML no "hace" nada. ¡Es solo un formato de almacenamiento de datos, no un idioma! Los idiomas "hacen" cosas.

La forma en que obtienes XML para "hacer" cosas, para convertirlo en un lenguaje apropiado, es agregar xmlnsatributos a su elemento raíz. Solo entonces le dice a su entorno de qué se trata.
Un ejemplo es XHTML. Está activo, tiene enlaces, hipertexto, estilos, etc., todos activados por xmlns. Sin eso, un archivo XHTML es solo un conjunto de datos en nodos de marcado.

Entonces, ¿por qué XML se llama lenguaje? No describe nada, no interpreta, simplemente es.

Editar: Tal vez mi pregunta debería haber sido más amplia. Dado que la respuesta es actualmente "porque XML fue nombrado después de SGML, que fue nombrado después de GML, etc." la pregunta debería haber sido, ¿por qué los lenguajes de marcado (como XML) se llaman lenguajes?

Ah, y WRT los votos cerrados: no, no estoy preguntando por la X. ¡Estoy preguntando por la L!

Señor lister
fuente
128
¿En qué basa su requisito de que un idioma tenga que "hacer" algo? No veo eso en ninguna de las definiciones en dictionary.com .
kdgregory
10
Al igual que el swahili solo se entiende si ambos lo entienden. O se entiende un artículo de revista médica si el lector comprende esa parte del lenguaje. No es diferente Y la gente inventa las definiciones.
Sami Kuhmonen
42
El lenguaje de marcado es un término común en.wikipedia.org/wiki/Markup_language
paparazzo
37
@ MrLister: "Esos son idiomas humanos, no idiomas de computadora" Un idioma es un idioma. En su forma más extrema, incluso el inglés requiere información contextual (qué dialecto se está usando) para comprender sin ambigüedades. No impide que sea un idioma. Su pregunta simplemente tiene una premisa falsa.
Carreras de ligereza en órbita
68
Los idiomas no hacen cosas, expresan y comunican cosas
Hagen von Eitzen

Respuestas:

238

La verdadera respuesta es que XML tiene una L en el nombre porque un tipo llamado Raymond L orie fue uno de los diseñadores del primer "lenguaje de marcado" en IBM en la década de 1970. Los desarrolladores tuvieron que encontrar un nombre para el idioma, por lo que eligieron GML porque eran las iniciales de los tres desarrolladores (Goldfarb, Mosher y Lorie). Luego crearon el backronym Generalized Markup Language .

Más tarde, esto se estandarizó como SGML ( lenguaje de marcado general estandarizado ), y cuando se creó XML, los desarrolladores querían conservar el ML-postfix para indicar la relación familiar con SGML, y agregaron la X al frente porque pensaron que se veía genial. (Aunque en realidad no tiene sentido, XML es un metalenguaje que le permite definir lenguajes extensibles, pero XML no es realmente extensible en sí mismo).

En cuanto a su segunda pregunta si XML se puede llamar legítimamente un lenguaje:

Cualquier formato textual estructurado (o incluso binario) que pueda procesarse computacionalmente puede denominarse lenguaje. Un idioma no "hace" nada como tal, pero algunos programas pueden procesar entradas en el idioma y "hacer" algo basado en él.

Usted nota que XML es un "formato de almacenamiento" que es cierto, pero un formato de almacenamiento textual puede llamarse un lenguaje, estos términos no son mutuamente excluyentes.

Los lenguajes de programación son un subconjunto de idiomas. Por ejemplo, HTML y CSS son lenguajes pero no lenguajes de programación , mientras que JavaScript es un lenguaje de programación real. Dicho esto, tampoco hay una definición formal de lenguaje de programación , y hay una gran zona gris de lenguajes que podrían llamarse formatos de datos o lenguajes de programación dependiendo de su punto de vista.

Dado esto, XML es claramente un lenguaje. simplemente no es un lenguaje de programación , aunque puede usarse para definir lenguajes de programación como XSLT.

Su punto sobre los espacios de nombres es irrelevante. Los espacios de nombres son una característica opcional de XML y no cambian la semántica de un vocabulario XML. Solo es necesario desambiguar los nombres de los elementos si el formato puede contener múltiples vocabularios.


Editar: reinierpost señaló que podría haber significado algo diferente con la pregunta de lo que entendí. Tal vez quisiste decir que vocabularios específicos como XHTML, RSS, XSLT, etc. son lenguajes porque asocian elementos y atributos con una semántica particular, pero el estándar XML en sí no define ninguna semántica para elementos y atributos específicos, por lo que no parece un " lenguaje real ".

Mi respuesta a esto sería que XML hace definir tanto sintaxis y la semántica, sólo se define en un nivel diferente. Por ejemplo, define la sintaxis de elementos y atributos y reglas sobre cómo procesarlos. XML es un "metalenguaje" que sigue siendo una especie de lenguaje (¡al igual que los metadatos siguen siendo datos!). Como ejemplo, EBNF también es claramente un lenguaje, pero su propósito es definir la sintaxis de otros idiomas, por lo que también es un metalenguaje.

JacquesB
fuente
19
@Snowman: Un "lenguaje formal" no se corresponde necesariamente con lo que generalmente se llama lenguaje en informática. Por ejemplo, un "lenguaje formal" no necesita ser textual: el código de máquina es tan formal como la mayoría de los formatos y protocolos binarios. Así que no diría que el término "lenguaje formal" cubre el mismo significado que "lenguaje" en informática.
JacquesB
15
No conozco ningún requisito de que un idioma debe ser textual o no textual. La idea de construir una oración desde terminales no tiene nada que ver con una interpretación arbitraria de los bits en esos terminales, o qué tipos de computadoras (basadas en silicio o carbono) son capaces de leerlas.
44
@NicolBolas: Buen punto, el código de máquina es definitivamente un lenguaje. Simplemente creo que es más común llamar a los formatos binarios de los idiomas binarios, por ejemplo, usted dice que el formato GIF no es el lenguaje GIF.
JacquesB
3
@BenCottrell: ¿No sería un gráfico entonces, ya que puede tener bucles?
JacquesB
181

Porque es un lenguaje. Un lenguaje de marcado , no un lenguaje de programación.

Tenga en cuenta que los idiomas humanos naturales como el inglés y el español tampoco "hacen" nada. De hecho, técnicamente C ++ y Java y similares no "hacen" nada hasta que se introducen en un compilador y la salida se ejecuta. Hacer cosas y ser un idioma son en gran medida ortogonales entre sí.

Ixrec
fuente
43
Sustituir "intérprete" por "compilador". Ser alimentado a un compilador no los hace "hacer" nada, simplemente los traduce a un idioma diferente, que, de nuevo, no "hace" nada. Toda ejecución es interpretación. A veces, el intérprete puede ser extremadamente simple e implementado en silicio, en cuyo caso lo llamamos una "unidad de ejecución", pero sigue siendo un intérprete. </nitpick>De todos modos, buena respuesta!
Jörg W Mittag
8
@ JörgWMittag Buen punto. Como elegí al azar los idiomas que normalmente se compilan, agregué "y la salida se ejecuta".
Ixrec
1
Un lenguaje de marcado extensible, por así decirlo.
doppelgreener
1
Yo diría que los lenguajes humanos "hacen" cosas. Ver Teoría del discurso-acto ...
Ray
2
Dulce, dulce ortogonalidad. Ejecute el lenguaje en un álgebra diferente, y se desarrolla un conjunto completamente nuevo de acciones. Bajo teoría, de todos modos.
Kenogu Labz
103

Sea Σ un conjunto finito no vacío de símbolos, llamado alfabeto . Entonces Σ * es el conjunto infinito contable de palabras finitas que se pueden formar concatenando cero o más símbolos de Σ. Cualquier subconjunto bien definido L ⊆ Σ * es un lenguaje .

Apliquemos esto a XML. Su alfabeto es el juego de caracteres Unicode U , que no está vacío y es finito. No cada concatenación de cero o más caracteres Unicode es un documento XML bien formado, por ejemplo, la cadena

<tag> soup &; not <//good>

Claramente no lo es. El subconjunto XML ⊂ U * que forma documentos XML bien formados es decidible (o "recursivo"). Existe una máquina (algoritmo o programa de computadora) que toma como entrada cualquier palabra wU * y después de una cantidad de tiempo finita, genera 1 si w ∈ XML y 0 en caso contrario. Tal algoritmo es una subrutina de cualquier software de procesamiento XML. No todos los idiomas son decidibles. Por ejemplo, el conjunto de programas C válidos que terminan en un tiempo finito no lo es (esto se conoce como el problema de detención) Cuando uno diseña un nuevo lenguaje, una decisión importante es si debe ser lo más poderoso posible o si la expresividad se restringiría mejor a favor de la capacidad de decisión.

Algunos idiomas se pueden definir por medio de una gramática que se dice que produce el idioma. Una gramática consiste en

  • un conjunto finito de literales (también llamados símbolos terminales ),
  • un conjunto finito disjunto de variables de la gramática (también llamados símbolos no terminales ),
  • un símbolo de inicio distinguido , tomado del conjunto de variables y
  • Un conjunto finito de reglas (llamadas producciones ) que permiten ciertos tipos de reemplazos.

Cualquier palabra que consista exclusivamente en literales y se pueda derivar comenzando con el símbolo de inicio y luego aplicando las reglas dadas pertenece al lenguaje producido por la gramática.

Por ejemplo, la siguiente gramática (en notación bastante informal) le permite derivar exactamente los enteros en notación decimal.

  1. Los literales de la gramática son los dígitos 1, 2, 3, 4, 5, 6, 7, 8, 9, y 0.
  2. Las variables son los símbolos S y D .
  3. S es el símbolo inicial.
  4. Cualquier ocurrencia de la variable S puede ser reemplazada
    • con el literal 0o
    • por cualquiera de los literales distintos 0seguido por la variable D .
  5. Cualquier ocurrencia de la variable D puede ser reemplazada
    • por cualquiera de los literales seguidos por otra instancia de la variable D o
    • por la cuerda vacía.

Así es como derivamos 42:

S - (aplica la regla 4, segunda variante) → 4 D - (aplica la regla 5, primera variante) → 42 D - (aplica la regla 5, segunda variante) → 42.

Dependiendo de cuán elaboradas sean las reglas que permita en su gramática, se requieren máquinas sofisticadas para demostrar que la gramática puede producir una palabra determinada. El ejemplo dado anteriormente es una gramática regular , que es la más simple y menos poderosa. La próxima clase poderosa de gramáticas se llama libre de contexto . Estas gramáticas también son muy simples de verificar. XML (a menos que esté pasando por alto alguna característica oscura que no conozco) puede describirse mediante una gramática libre de contexto. La clasificación de las gramáticas forma la jerarquía Chomsky de las gramáticas (y, por lo tanto, los idiomas). Cada lenguaje que puede ser descrito por una gramática es al menos semi-decidible(o "recursivamente enumerable"). Es decir, existe una máquina que, dada una palabra que realmente pertenece al lenguaje, obtiene una prueba de que puede ser producida por la gramática en un tiempo finito y nunca generará una prueba incorrecta. Tal máquina se llama un verificador . Tenga en cuenta que la máquina nunca puede detenerse cuando se le da una palabra que en realidad no pertenece al idioma. Claramente, queremos que nuestros lenguajes de programación sean descritos por gramáticas menos poderosas para el beneficio de poder rechazar programas inválidos dentro de un tiempo finito.

Los esquemas son una adición a XML que permiten refinar el conjunto de documentos bien formados. Un documento bien formado que sigue un cierto esquema se llama válido de acuerdo con ese esquema. Por ejemplo, la cadena

<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>

es un documento XML bien formado pero no es un documento XHTML válido. Existen esquemas para XHTML , SVG , XSLT y lo que no. La validación del esquema también puede realizarse mediante un algoritmo que se garantiza que se detiene después de una cantidad finita de pasos para cada entrada. Tal programa se llama un validador o un analizador de validación. Los esquemas se definen mediante los llamados lenguajes de definición de scema , que son una forma de definir formalmente las gramáticas. XSD es el lenguaje oficial de definición de esquemas para XML y, en sí mismo, está basado en XML. RELAX NG es una alternativa más elegante, mucho más simple y un poco menos potente al XSD.

Como puede definir sus propios esquemas, XML se denomina lenguaje extensible , que es el origen de la "X" en "XML".

Puede definir un conjunto de reglas que le dan a los documentos XML una interpretación como descripciones de programas de computadora. XSLT, mencionado anteriormente, es un ejemplo de dicho lenguaje de programación construido con XML. En términos más generales, puede serializar el árbol de sintaxis abstracta de casi cualquier lenguaje de programación de forma bastante natural en XML, si esto es lo que desea.

5gon12eder
fuente
77
@Giorgio: En matemáticas, "bien definido" es en gran parte solo un intensificador: todo lo que existe matemáticamente ya está bien definido.
Kevin
99
@Giorgio Con "bien definido" quiero decir que hay un predicado formal que dice si un elemento pertenece al conjunto o no. Este predicado en general no será computable, pero debe especificarse claramente sin contradicción. De lo contrario, podrían pasar cosas malas . "Los pares de cadenas ( w , M ) donde M es la descripción más pequeña de una máquina de Turing que genera w y luego se detiene" es un predicado bien definido pero no computable (ver la complejidad de Kolmogorov ). …
5gon12eder
2
@ 5gon12eder: ese conjunto no existe bajo ZFC (porque el esquema de separación del axioma no es lo suficientemente poderoso como para describirlo); Si está utilizando alguna otra teoría de conjuntos, debe especificarla.
Kevin
55
@ 5gon12eder: "El conjunto que contiene todas las cadenas que no están incluidas en el conjunto" no existe. El término "bien definido" irónicamente no está bien definido.
Kevin
3
La propiedad o validación bien formada se realiza mediante una gramática . Esta respuesta hubiera sido perfecta si hubieras mencionado eso.
Thibault D.
31

En ciencias de la computación, el lenguaje formal es solo un conjunto de cadenas, generalmente infinito y a menudo descrito mediante reglas (dos versiones comunes de esas reglas son expresiones regulares y gramáticas formales ).

Tenga en cuenta que esto significa que todo lo que necesita un lenguaje es sintaxis , el lenguaje no necesita describir lo que significa cada cadena válida (eso se llama semántica ).

Ahora, esto significa que los lenguajes de programación son lenguajes formales que también tienen semántica, lo que describe algunos cálculos. Y, por ejemplo, XHTML es un lenguaje formal, cuya semántica describe (aproximadamente e informalmente) cómo se ve y se comporta un documento de hipertexto.

XML sigue siendo un lenguaje, aunque no tiene semántica en sí (pero muchos lenguajes derivados de XML sí, como XHTML y XAML).

Técnicamente, los formatos binarios también son idiomas, pero no se llaman así. El término "lenguaje" está reservado para formatos legibles por humanos.

svick
fuente
10
@ MrLister Porque no son legibles para los humanos. Cuando no son legibles por humanos, tendemos a llamarlos formatos o formatos de datos .
Mason Wheeler
3
@JamesSnell No debe confundirse con la otra familia de idiomas de ML, por supuesto. ¡Yay por acrónimos abarrotados!
Mason Wheeler
3
Si uno está utilizando herramientas formales para construir un analizador sintáctico (o especialmente un validador) para JFIF, etc., los ingenieros pueden referirse a él como un "lenguaje". Más probable, sin embargo, como una "gramática".
JDługosz
3
@MrLister: Bueno, son idiomas, pero debido a que definen estructuras de datos reutilizables tienen un nombre especial: formatos . Pero sí, estos también son idiomas.
Carreras de ligereza en órbita
44
@ MrLister: nombrar un formato es más una cuestión de marketing. La gente de XML llamó a XML por XML porque "* ML" indica una relación familiar con el formato predecesor como GML y SGML, y porque pensaban que se veía bien con una X en el frente. Y GML se llamaba GML porque era un lenguaje de marcado generalizado, pero también porque eran las iniciales de los tres diseñadores de lenguaje. Básicamente, la L en XML se debe a que un tipo llamado Raymond L orie fue uno de los diseñadores del primer lenguaje de marcado.
JacquesB
12

Un lenguaje es un método para transmitir información.

Un lenguaje de programación es un método para transmitir algoritmos.

Un lenguaje de marcado como XML es un lenguaje para transmitir datos.

Philipp
fuente
... y esos datos pueden muy bien ser una descripción de un algoritmo.
Luaan
@Luaan ... y también se puede abusar de un lenguaje de programación para transmitir datos. Como con JSON, por ejemplo.
Philipp
2
Incluso puedes recurrir. He visto scripts NAnt (un lenguaje basado en XML) que contenía código C #, que solo se usaba para el almacenamiento de datos. Uso de literales de cadena que contenían XML. Sí, es el tipo de cosa que hace llorar a los hombres adultos: P
Luaan
2

XML es un metalenguaje. Lo usas para definir idiomas específicos. Los idiomas nunca hacen nada, solo nos permiten expresar cosas. Además, no es cierto que XML sea un "lenguaje de almacenamiento". Todo lo contrario, de hecho. Puede almacenar documentos XML como quiera. XML está mejor pensado como un lenguaje de transferencia. PD. Si no cree que XML "haga" nada, tendrá que explicar cómo es que muchos sistemas (por ejemplo, embarcadero) usan XML como lenguaje de programación (malo). Es un lamentable abuso de XML, pero existe en la naturaleza, y ese es solo uno de los muchos ejemplos.


fuente