Der Anwendungsfall ist die langfristige Serialisierung von komplexen Objektgraphen in einem Textformat.
Antworten
Zu viele Anzeigen?Kurze Antwort
wenn Sie erwarten, dass Menschen das Dokument erstellen/lesen (Konfigurationsdateien, Berichte usw.), dann können Sie YAML in Betracht ziehen, ansonsten wählen Sie XML (für die Kommunikation von Maschine zu Maschine).
Lange Antwort
Länge
XML und YAML sind in etwa identisch. Gute XML-Bibliotheken können alle Whitespaces weglassen, während sie bei YAML erforderlich sind. Eine komplexe YAML enthält viele Einrückungszeichen (keine Tabulatoren verwenden!)
Ausfall des Netzes
Oft ist ein Teil eines YAML-Dokuments ein gültiges Dokument, so dass es keine automatische Möglichkeit gibt, ein unvollständiges YAML-Dokument zu erkennen. Ein XML-Parser prüft immer, ob ein Dokument zumindest wohlgeformt ist, und kann die Gültigkeit automatisch gegen ein Schema prüfen.
Unterstützung von Sprachen
Viele wichtige Programmiersprachen unterstützen beides YAML und XML.
Allgemeines Wissen
Sie müssen einem Entwickler (auch einem Anfänger) nicht erklären, was XML ist. YAML ist noch nicht sehr weit verbreitet.
Schema
Mit XML können sich Produzent und Konsument auf ein Schema einigen, um ein zuverlässiges Datenaustauschformat zu schaffen.
Syntax
XML ist sehr reichhaltig: Namespaces, Entitäten, Attribute.
Externe Abhängigkeiten
Java und Python bieten in ihren Standardbibliotheken XML-Unterstützung. YAML benötigt für diese Sprachen eine externe Abhängigkeit.
Reifegrad
Die XML-Spezifikation ist älter und felsenfest, während sich YAML noch im Aufbau befindet. YAML 1.1 enthält Inkonsistenzen (es gibt sogar eine wiki um die Liste der Fehler zu pflegen).
XSLT
Wenn Sie ein XML-Dokument in ein anderes Format (XML, HTML, YAML, PDF) umwandeln möchten, können Sie XSLT verwenden, während Sie für YAML ein Programm schreiben müssen.
XML hat xpath und xquery.
YAML verfügt jedoch über komplexe Schlüssel und ermöglicht es, einen Wert mit Hilfe von Aliasen (& *-Syntax) an viele Stellen zu kopieren.
Ich denke, die Stärke von YAML ist nicht die menschliche Lesbarkeit, wie man sagt... Ich kann richtig formatiertes XML gut lesen.
Eigentlich ist die Stärke von YAML die menschliche Beschreibbarkeit . Wenn man auf einem iPhone sitzt und schnell ein paar Daten eintippt, während man ein Datenmodell oder ähnliches entwirft, ist YAML so viel einfacher einzugeben. Die Aliase sind dafür großartig.
Dann können Sie es in etwas anderes umwandeln.
Die fortgeschrittenen Funktionen von YAML, wie strikte Typisierung und Tags, verwende ich nie. Die YAML-Leute diskutieren derzeit über die Herausgabe eines "Mikro-YAML", um mit JSON zu konkurrieren, für diejenigen von uns, die es im Grunde nur als saubereres JSON mit Aliasen verwenden.
Aber XML eignet sich besser als Auszeichnungssprache, wenn man visuell unterscheiden will, welche Teile der Daten für den Endbenutzer sichtbar sind, wie jemand anderes bereits sagte.
Ich bin einverstanden: YAML ist besser lesbar und eignet sich z.B. gut für Konfigurationsdateien, die von Entwicklern gelesen und geschrieben werden können. Aber es gibt wenig Nutzen für die Maschine-zu-Maschine-Kommunikation. Auch für Textauszeichnungen (xml's traditionelle Stärke, wie xhtml, docbook), ist xml besser.
Speziell für die Serialisierung von Objekten kann ich mir keinen guten Grund vorstellen, YAML zu verwenden.
Ich würde sogar vorschlagen, stattdessen JSON in Betracht zu ziehen: Es basiert auf einem Objekt- (oder Struktur-, da es kein Verhalten gibt) Modell und nicht auf hierarchischen (XML) oder relationalen (SQL) Modellen. Aus diesem Grund eignet es sich besser für Objektdaten. Aber XML funktioniert auch sehr gut, und es gibt viele gute Tools.
Letzter Punkt: Die Begriffe "Langzeit" und "Objektserialisierung" passen nicht zusammen. Letzteres impliziert eine enge Kopplung: Wenn sich Ihre Objekte ändern, ändert sich auch die Serialisierung. Die eigentliche Objektserialisierung sollte nicht zum Speichern von Daten verwendet werden, Datenbindung/Zuordnung ist besser geeignet. Es kann aber sein, dass Sie Serialisierung im Sinne von "Speichern/Wiederherstellen von Daten unter Verwendung von praktischen Objekt-Wrappern" verwenden; wenn ja, ist das in Ordnung.
Wenn Sie YAML verwenden, werden möglicherweise etwas weniger Bytes über die Leitung geschickt. Nicht genug, um signifikant zu sein, denke ich, aber in manchen Situationen könnte es relevant sein. Ich denke auch, dass YAML einfacher zu lesen und mit einem Texteditor zu arbeiten ist, aber das ist wirklich ziemlich subjektiv, und es wäre nicht wirklich wichtig, wenn dies nicht ein normales Nutzungsszenario ist.
Wenn die Bandbreite keine Rolle spielt und Sie nicht oft mit YAML/XML in einem Texteditor arbeiten werden, ist es meiner Meinung nach egal, welchen Sie verwenden.