Me gustaría hacer una pregunta sobre la notación XML y expresiones S (-ish). Las expresiones S son bastante antiguas; También son muy simples. Podríamos considerar dos formas que son iguales en significado, diferentes en sintaxis:
(código xml tomado de la wikipedia polaca )
<?xml version="1.0" encoding="UTF-8"?>
<ksiazka-telefoniczna kategoria="bohaterowie książek">
<!-- komentarz -->
<osoba charakter="dobry">
<imie>Ambroży</imie>
<nazwisko>Kleks</nazwisko>
<telefon>123-456-789</telefon>
</osoba>
<osoba charakter="zły">
<imie>Alojzy</imie>
<nazwisko>Bąbel</nazwisko>
<telefon/>
</osoba>
</ksiazka-telefoniczna>
Versión S-Expression (-ish):
(:version "1.0" :encoding "utf-8")
(ksiazka-telefoniczna :category "bohaterowie książek"
; komentarz(a comment)
(osoba :charakter "dobry"
(imie Ambroży)
(nazwisko Kleks)
(telefon 123-456-789))
(osoba :charakter "zły"
(imie Alojzy)
(nazwisko Bąbel)
(telefon)))
La versión S-Expression es mucho más concisa. Evitamos la redundancia mediante el uso de anotaciones de lista simples, pero aún podemos definir la sintaxis para incluir cosas que queremos tener (por ejemplo, propiedades). Por supuesto, esto es solo un ejemplo, y el estándar real podría haber sido mejor o simplemente diferente; Sin embargo, es más corto y más fácil de analizar. ¿Por qué ganó XML?
(para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para)
.Respuestas:
Sabemos que los diseñadores de XML estaban familiarizados con las expresiones S, ya que XML se basa en SGML, y SGML tiene un lenguaje de hoja de estilo, DSSSL, que utiliza la sintaxis de expresión S (y el esquema como lenguaje de script incorporado).
Sin embargo, eligieron una sintaxis diferente a las expresiones S debido a los casos de uso de XML. Inicialmente, XML fue diseñado para admitir datos estructurados generados por máquina y lenguajes de marcado como HTML, que se crean manualmente y contienen contenido mixto (texto entremezclado con elementos con metadatos).
Redundancia
Los documentos de texto marcado suelen ser más largos que una pantalla Si ve a
)
y no puede ver el comienzo de la estructura, está bastante perdido; no sabes si fue un capítulo o una barra lateral que acaba de terminar. La redundancia de repetir el nombre de la etiqueta en las etiquetas finales en XML</sidebar>
hace que esto sea mucho más fácil para el escritor humano. También lo hace más robusto: si elimina accidentalmente una etiqueta final, a menudo puede inferir qué etiqueta final falta.SGML (el predecesor de XML) le permitió acortar opcionalmente la etiqueta final a un solo carácter, pero esta característica se dejó fuera de XML por simplicidad.
En resumen, XML es más detallado por diseño, porque está diseñado para admitir documentos editables por humanos. Hoy XML se utiliza para una amplia variedad de propósitos, también para la comunicación pura de máquina a máquina, donde esta redundancia no es necesaria.
Contenido mixto
Su sintaxis sugerida no admitiría muy bien el contenido mixto. Tome este ejemplo en HTML:
¿Cómo expresarías esto en tu sintaxis? Necesitaría algún tipo de delimitador adicional para distinguir entre atributos y contenido de texto. De repente ya no es tan conciso.
Caracteres especiales
Los corchetes angulares son mucho más raros en el texto ordinario que los paréntesis y los dos puntos.
Compatibilidad
HTML ya tuvo un gran éxito en el momento en que se diseñaron los XML, y tenía sentido elegir una sintaxis similar.
¿Por qué ganó XML?
Las expresiones S nunca fueron una alternativa al XML. La especificación XML es mucho más que corchetes angulares; Define una sintaxis para elementos y atributos y contenido mixto, escape, codificación de caracteres, sintaxis y validación DTD, etc. Nada similar existía para las expresiones s. Por supuesto, puede definir un estándar similar, como propone aquí, pero nadie lo había hecho en ese momento. XML recibió la bendición del W3C y, por lo tanto, fue adoptado por los principales actores y se convirtió en el estándar de facto para el intercambio de datos.
fuente
<PRE>
elemento en HTML. Así que supuse que se necesitarían citas.Personalmente, creo que la mejor parte de XML son las capacidades de esquema bien definidas, en lugar de su sintaxis. El mecanismo de esquema permite a los usuarios publicar su formato de documento para compartir lo que consideran un documento válido. También hay validadores automatizados. Además, los tipos y esquemas creados por un usuario pueden ser extendidos por otros usuarios.
Hasta donde yo sé, nadie ha hecho ningún esfuerzo por estandarizar un mecanismo de esquema de propósito general para la expresión s, excepto el lenguaje LISP en sí (que la muestra en la pregunta del OP no está usando).
fuente
Aquí hay dos razones por las que elegiría XML sobre algo "S-expression-ish":
Un modelo sintáctico y semántico bien definido.
XML no es simplemente un árbol de nodos, sino un árbol de nodos categorizados que tienen una representación sintáctica diferente y un comportamiento diferente. Por ejemplo, un atributo con un nombre dado solo puede aparecer una vez para un nodo dado, mientras que los nodos secundarios pueden aparecer varias veces.
Podría definir dicho modelo sobre expresiones S genéricas. Sus ejemplos muestran un esquema para clasificar atributos y elementos secundarios. Agregue semántica para texto, comentarios e instrucciones de procesamiento, y tendrá algo que es isomorfo con XML.
Estampación
A partir del modelo sintáctico y semántico estándar, puede crear herramientas, y muchas personas lo han hecho. Puede encontrar algún tipo de analizador / serializador XML, XPath y procesador XSLT para cada lenguaje / plataforma común. Y sabes que todos se comportarán de la misma manera en cada plataforma.
Y aquí hay algunas otras cosas a considerar:
En el gran esquema, XML no es tan detallado
En tu ejemplo, ¿qué has eliminado realmente? Mientras lo leo, has:
>
que normalmente separaría la etiqueta de apertura de sus elementos secundarios.=
que separa el nombre y el valor del atributo con a:
para indicar que el hijo es un atributo; Sin ahorros.Creo que también es importante reconocer que las representaciones internas y externas de XML son muy diferentes. Internamente, un árbol XML es muy compacto. Y debido a que los diversos elementos ya están categorizados, es muy eficiente de manipular. Externamente, bueno, sí, obtienes todas esas etiquetas de cierre, pero se comprimen bien.
¿Es la "verbosidad" el verdadero problema?
Creo que la verdadera pregunta no es si XML es "detallado", sino si es más expresivo de lo que se necesita para un propósito determinado. Algunos ejemplos:
fuente