Was sind die Vorteile von XML gegenüber der S-Ausdrücke (-ish)?

11

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?

MatthewRock
quelle
3
XML ist nicht S-Expressions
Robert Harvey
5
Für Downvoter: Stimmen Sie nicht ab, wenn Sie mit der Frage nicht einverstanden sind, aber wenn Sie der Meinung sind, dass sie von schlechter Qualität ist (und schlagen Sie dann Änderungen vor, um die Qualität zu verbessern). @RobertHarvey Wenn Sie der Meinung sind, dass es sich um eine Antwort handelt, beantworten Sie bitte meine Frage, anstatt einen Kommentar abzugeben.
Matthew Rock
1
Der Tooltip über der Downvote-Schaltfläche enthält den Satz "Diese Frage zeigt keinen Forschungsaufwand."
Robert Harvey
1
Denken Sie daran, dass dies kein Diskussionsforum ist. Echte Fragen haben Antworten, und von Community-Mitgliedern wird erwartet, dass sie Antworten geben, keine Meinungen.
Robert Harvey
1
Die Redundanzargumente für XML (z. B. schließende Klammern mit dem Namen der öffnenden Klammer) können leicht durch S-Ausdrücke emuliert werden. Einfach schreiben (para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para).
Andrew

Antworten:

13

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:

<p>Hi! <a href="example.com">Click here</a>!</p>

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.

JacquesB
quelle
3
Werden in seinem Beispiel keine Doppelpunkte für Attribute verwendet? Z.B. (p Hi! (a: href "example.com" Hier klicken)!)? (oder hat er das gerade bearbeitet, nachdem Ihre Antwort veröffentlicht wurde?)
Headcrab
Obwohl es Ihrer (ausgezeichneten) Antwort nichts nimmt, wer erstellt bei klarem Verstand manuell XML-Dokumente?
Jared Smith
Hey Jacques, danke für diese hervorragende Antwort! Ich stimme Headcrab zu, dass gemischte Inhalte kein Problem sind. Ich stimme auch Jared zu, obwohl ich denke, dass XML manchmal sowieso manuell gelesen / geschrieben wird.
Matthew Rock
@ Headcrab: Es ist schwer zu sagen, da es keine tatsächliche Spezifikation gibt, nur ein hypothetisches Beispiel. Es scheint mir jedoch, dass die Darstellung von Text als Symbole und nicht als Zeichenfolge in Anführungszeichen zu Mehrdeutigkeiten mit Leerzeichen führen würde. S-Ausdrücke unterstützen kein signifikantes Leerzeichen zwischen Atomen AFAIK, aber Sie benötigen dies, um z. B. das <PRE>Element in HTML zu unterstützen. Also nahm ich an, dass Zitate benötigt würden.
JacquesB
2
Es sieht also wirklich so aus, als ob XML mit all diesen Schnickschnack und der bekannten HTML-ähnlichen Syntax erstellt wurde, was dazu beigetragen hat, S-Ausdrücke zu gewinnen. Als viele Entwickler entschieden, dass in ihren Anwendungsfällen all diese Funktionen für die Kommunikation von Maschine zu Maschine nicht wirklich erforderlich sind, gab es eine andere leichte Alternative in Form von JSON.
Kamilk
9

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).

Erik Eidt
quelle
1
Obwohl ich die Ausführlichkeit von XML nicht mag, +1 für die Erwähnung der Schemafunktionen, die es fast wert machen. :-)
user949300
1

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:

  • Das schließende Tag für jeden Ausdruck wurde entfernt.
  • Beseitigt das >, was normalerweise das öffnende Tag von seinen Kindern trennen würde.
  • Ersetzt das =, 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:

  • Die Fähigkeit eines Elements, Attribute zu enthalten, die sich semantisch von untergeordneten Elementen unterscheiden. Nützlich für Out-of-Band-Informationen, z. B. zur Beschreibung des nativen Datentyps des Inhalts des Elements. Aber vielleicht brauchen Sie das nicht, weil Ihre externe Spezifikation den Inhalt definiert.
  • Gemischter Inhalt, in dem ein Element sowohl untergeordnete Elemente als auch Text (sowie Kommentare und Verarbeitungsanweisungen) enthalten kann. Nützlich für Markups, aber möglicherweise nicht für die einfache Datendarstellung.
kdgregory
quelle