Ich möchte eine Frage zur XML- und S-Ausdrucksnotation (-ish) stellen. S-Ausdrücke sind ziemlich alt; Sie sind auch sehr einfach. Wir könnten zwei Formen mit gleicher Bedeutung und unterschiedlicher Syntax betrachten:
(XML-Code aus der polnischen Wikipedia )
<?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>
S-Expression (-ish) Version:
(: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)))
Die S-Expression-Version ist viel prägnanter. Wir vermeiden Redundanz durch die Verwendung einfacher Listennotationen, können jedoch die Syntax so definieren, dass sie Dinge enthält, die wir haben möchten (z. B. Eigenschaften). Dies ist natürlich nur ein Beispiel, und der tatsächliche Standard hätte besser oder einfach anders sein können. Es ist jedoch kürzer und einfacher zu analysieren. Warum hat XML gewonnen?
(para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para)
.Antworten:
Wir wissen, dass die Entwickler von XML mit S-Ausdrücken vertraut waren, da XML auf SGML basiert und SGML über eine Stylesheet-Sprache, DSSSL, verfügt, die die S-Ausdruckssyntax (und das Schema als eingebettete Skriptsprache) verwendet.
Trotzdem haben sie aufgrund der Anwendungsfälle für XML eine andere Syntax als S-Ausdrücke gewählt. XML wurde ursprünglich entwickelt, um sowohl maschinengenerierte strukturierte Daten als auch Markup-Sprachen wie HTML zu unterstützen, die manuell erstellt werden und gemischten Inhalt enthalten (Text gemischt mit Elementen mit Metadaten).
Redundanz
Markup-Textdokumente sind oft länger als ein Bildschirm. Wenn Sie a sehen
)
und den Anfang der Struktur nicht sehen können, sind Sie ziemlich verloren. Sie wissen nicht, ob es sich um ein Kapitel oder eine Seitenleiste handelt, die gerade beendet wurde. Die Redundanz der Wiederholung des Tagnamens in Endtags in XML wie</sidebar>
macht dies für den menschlichen Schreiber viel einfacher. Dies macht es auch robuster: Wenn Sie versehentlich ein End-Tag löschen, können Sie häufig ableiten, welches End-Tag fehlt.Mit SGML (dem Vorgänger von XML) konnten Sie das End-Tag optional auf ein einzelnes Zeichen kürzen. Diese Funktion wurde jedoch der Einfachheit halber in XML nicht berücksichtigt.
Kurz gesagt, XML ist von Natur aus ausführlicher, da es von Menschen bearbeitbare Dokumente unterstützt. Heute wird XML für eine Vielzahl von Zwecken verwendet, auch für die reine Kommunikation von Maschine zu Maschine, bei der diese Redundanz nicht benötigt wird.
Gemischter Inhalt
Ihre vorgeschlagene Syntax würde gemischte Inhalte nicht sehr gut unterstützen. Nehmen Sie dieses Beispiel in HTML:
Wie würden Sie dies in Ihrer Syntax ausdrücken? Sie benötigen ein zusätzliches Trennzeichen, um zwischen Attributen und Textinhalten zu unterscheiden. Plötzlich ist es nicht mehr so prägnant.
Spezielle Charaktere
Winkelklammern sind im normalen Text viel seltener als Klammern und Doppelpunkte.
Kompatibilität
HTML war bereits zu der Zeit, als XML entworfen wurde, äußerst erfolgreich, und es war sinnvoll, eine ähnliche Syntax zu wählen.
Warum hat XML gewonnen?
S-Ausdrücke waren niemals eine Alternative zu XML. Die XML-Spezifikation ist viel mehr als spitze Klammern. Es definiert eine Syntax für Elemente und Attribute sowie gemischten Inhalt, Escapezeichen, Zeichenkodierung, DTD-Syntax und Validierung usw. Für S-Ausdrücke gab es nichts Ähnliches. Natürlich können Sie einen ähnlichen Standard definieren, wie Sie hier vorschlagen, aber das hatte zu diesem Zeitpunkt noch niemand getan. XML wurde vom W3C gesegnet und daher von den Hauptakteuren übernommen und zum Defacto-Standard für den Datenaustausch.
quelle
<PRE>
Element in HTML zu unterstützen. Also nahm ich an, dass Zitate benötigt würden.Persönlich denke ich, dass das Beste an XML eher die genau definierten Schemafunktionen als die Syntax sind. Mit dem Schema-Mechanismus können Benutzer ihr Dokumentformat veröffentlichen, um das freizugeben, was sie als gültiges Dokument betrachten. Es gibt auch automatisierte Validatoren. Außerdem können von einem Benutzer erstellte Typen und Schemas von anderen Benutzern erweitert werden.
Soweit ich weiß, hat sich niemand annähernd die Mühe gemacht, einen Allzweckschema-Mechanismus für den S-Ausdruck zu standardisieren, mit Ausnahme der LISP-Sprache selbst (die das Beispiel in der OP-Frage nicht verwendet).
quelle
Hier sind zwei Gründe, warum ich XML gegenüber etwas "S-expression-ish" wählen würde:
Ein genau definiertes syntaktisches und semantisches Modell
XML ist nicht einfach ein Baum von Knoten, sondern ein Baum von kategorisierten Knoten, die eine unterschiedliche syntaktische Darstellung und ein unterschiedliches Verhalten aufweisen. Beispielsweise kann ein Attribut mit einem bestimmten Namen für einen bestimmten Knoten nur einmal angezeigt werden, während untergeordnete Knoten möglicherweise mehrmals angezeigt werden.
Sie können ein solches Modell zusätzlich zu generischen S-Ausdrücken definieren. Ihre Beispiele zeigen ein Schema zum Kategorisieren von Attributen und untergeordneten Elementen. Wenn Sie die Semantik für Text, Kommentare und Verarbeitungsanweisungen hinzufügen, erhalten Sie etwas, das mit XML isomorph ist.
Werkzeuge
Aus dem syntaktischen und semantischen Standardmodell können Sie Tools erstellen - und viele Leute haben. Sie finden für jede gängige Sprache / Plattform eine Form von XML-Parser / Serializer, XPath und XSLT-Prozessor. Und Sie wissen, dass sich alle auf jeder Plattform gleich verhalten.
Und hier sind noch ein paar andere Dinge zu beachten:
Im großen Schema ist XML nicht so ausführlich
Was haben Sie in Ihrem Beispiel tatsächlich beseitigt? Während ich es lese, haben Sie:
>
, was normalerweise das öffnende Tag von seinen Kindern trennen würde.=
, das Attributname und Wert trennt, durch a,:
um anzuzeigen, dass das Kind ein Attribut ist. Keine Einsparungen.Ich denke, es ist auch wichtig zu erkennen, dass die internen und externen Darstellungen von XML sehr unterschiedlich sind. Intern ist ein XML-Baum sehr kompakt. Und da die verschiedenen Elemente bereits kategorisiert sind, ist die Manipulation sehr effizient. Äußerlich, na ja, Sie bekommen all diese schließenden Tags, aber sie werden gut komprimiert.
Ist "Ausführlichkeit" das eigentliche Problem?
Ich denke, dass die eigentliche Frage nicht ist, ob XML "ausführlich" ist, sondern ob es aussagekräftiger ist, als es für einen bestimmten Zweck benötigt wird. Einige Beispiele:
quelle