23 Stimmen

Was sind die Vor- und Nachteile von yaml vs xml für Object graph de/serialization?

Der Anwendungsfall ist die langfristige Serialisierung von komplexen Objektgraphen in einem Textformat.

37voto

Andrey Punkte 2793

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.

4voto

CommaToast Punkte 10365

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.

3voto

StaxMan Punkte 107669

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.

2voto

John Conrad Punkte 195

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X