Frage

Beim Lesen Stackoverflow und die Podcasts von Joel Spolsky und Jeff Atwood hören, beginne ich zu glauben, dass viele Entwickler XML-Hass mit oder zumindest versuchen, mit Hilfe von XML so weit wie möglich zu vermeiden, für die Lagerung oder den Austausch von Daten .

Auf der anderen Seite habe ich viel Freude mit XML viel aus mehreren Gründen:

  • XML-Serialisierung ist in den meisten modernen Sprachen implementiert und ist extrem einfach zu bedienen ,
  • Die langsamer als binäre Serialisierung, XML-Serialisierung ist sehr nützlich, wenn es darum geht, die gleichen Daten aus mehreren Programmiersprachen mit oder wo es beabsichtigt ist, zu lesen und zu verstehen, auch für das Debuggen, indem eine Mensch (JSON, zum Beispiel, ist schwieriger zu verstehen),
  • XML unterstützt Unicode , und wenn sie richtig verwendet wird, gibt es keine Probleme mit anderen Kodierung, Zeichen, etc.
  • Es gibt viele Tools, die es einfach, die Arbeit mit XML-Daten macht. XSLT ist ein Beispiel, so dass es leicht zu Gegenwart und Daten zu transformieren. XPath ist ein anderes, so dass es leicht für Daten suchen,
  • XML kann in einigen SQL Server gespeichert werden, die die Szenarien, wenn Daten ermöglicht, was zu kompliziert, um in SQL-Tabellen leicht gespeichert werden müssen gespeichert und manipuliert werden; JSON oder Binärdaten, kann beispielsweise nicht durch SQL direkt manipuliert werden (außer durch Manipulation Strings, die in den meisten Situationen verrückt ist),
  • XML benötigt keine Anwendungen installiert werden. Wenn ich meine App eine Datenbank verwenden möchten, muss ich zuerst einen Datenbankserver installieren. Wenn ich meine App zu verwenden XML wollen, Ich muss nichts installieren ,
  • XML ist viel mehr explizite und erweiterbare als zum Beispiel Windows-Registry oder INI-Dateien,
  • In den meisten Fällen gibt es keine CR-LF Probleme , dank der Ebene der Abstraktion von XML zur Verfügung gestellt.

Also, in Berücksichtigung aller Vorteile von XML, warum so viele Entwickler Hass mit ihm? IMHO, das einzige Problem daran ist, dass:

  • XML ist zu ausführlich und erfordert viel mehr Platz als die meisten anderen Formen von Daten, vor allem, wenn es um Base64-Codierung kommt.

Natürlich gibt es viele Szenarien, in denen XML überhaupt nicht paßt. Speicher von Fragen und Antworten von SO in einer XML-Datei auf Server-Seite absolut falsch. Oder wenn ein AVI-Video oder ein Bündel von JPG-Bildern zu speichern, XML ist das Schlimmste, was zu verwenden.

Aber was ist mit anderen Szenarien? Was sind die Schwächen von XML?


Zu den Menschen, die Auffassung vertreten, dass diese Frage nicht eine wirkliche Frage ist:

Im Gegensatz zu Fragen wie ein nicht-geschlossenen Bedeutende neue Erfindungen in seit 1980 Berechnung , meine Frage ist eine ganz klare Frage und lädt klar, was Schwächen der anderen Erfahrung zu erklären, wenn mit Hilfe von XML und warum sie es nicht mögen. Es lädt nicht zu diskutieren, zum Beispiel, , wenn XML ist gut oder schlecht . Genauso wenig wie es längere Diskussionen erfordern; so werden die aktuellen Antworten erhalten, so weit sind kurz und präzise und bieten genügend Informationen, die ich wollte.

Aber es ist ein Wiki, da es kann nicht sein, ein unique gute Antwort auf diese Frage.

Nach SO, „keine wirkliche Frage“ ist eine Frage, wo "Es ist schwierig zu sagen, was hier gefragt wird. Diese Frage ist nicht eindeutig, vage, unvollständig oder rhetorische und vernünftigerweise nicht in seinem jetzigen beantwortet werden kann bilden. "

  • Was hier gefragt wird : Ich denke, die Frage selbst ist sehr klar, und mehrere Textabsätze oben macht es noch deutlicher,
  • Diese Frage ist nicht eindeutig, vage, unvollständig : auch hier gibt es nichts zweideutig, weder vage noch unvollständig,
  • oder rhetorische : it ist nicht: die Antwort auf meine Frage ist nicht etwas offensichtlich,
  • und vernünftigerweise nicht beantwortet werden kann . Mehrere Personen bereits gaben große Antworten auf die Frage, was zeigt, dass die Frage angemessen beantwortet werden kann

Es scheint auch ganz klar, wie die Antworten zu bewerten und die akzeptierte Antwort zu bestimmen. Wenn die Antwort gute Gründe gibt, was mit XML falsch ist, gibt es Chancen, dass diese Antwort wird gewählt, dann akzeptiert werden.

War es hilfreich?

Lösung

Einige Schwächen:

  • Es ist etwas schwierig zu assoziieren XML-Dateien und externe Ressourcen, weshalb die neuen Office-Dokumentformate einen Zip-Umschlag verwenden, die zusammen eine Skelett XML-Datei und Ressource-Dateien gebündelt enthält. Die andere Option Base64-Codierung zu verwenden, ist sehr ausführlich und erlaubt es nicht gut mit wahlfreiem Zugriff, die man zum nächsten Punkt bringt:
  • Random Zugang schwierig ist. Keines der beiden traditionellen Formen einer XML-Datei zu lesen -. Konstruieren ein DOM oder Vorwärts-SAX-Lese für wirklich zufällige Zugriff erlauben
  • Concurrent Schreibzugriff auf verschiedene Teile der Datei schwierig ist, weshalb seine Verwendung in Windows ausführbaren Manifeste fehleranfällig ist.
  • Was Codierung hat eine XML-Datei verwendet? Streng genommen Sie die Codierung zuerst erraten, dann die Datei lesen und überprüfen Sie die Kodierung richtig war.
  • Es ist auf die Version Teile einer Datei schwierig. Deshalb, wenn Sie granulare Versionierung zur Verfügung stellen möchten, müssen Sie Ihre Daten teilen. Dies ist nicht nur ein Dateiformat Ausgabe, sondern auch aufgrund der Tatsache, dass Werkzeuge pro-Datei Semantik der Regel bieten -. Versionskontrolle Tools, Sync-Tools wie DropBox, usw.

Andere Tipps

<xml>
    <noise>
        The
    </noise>
    <adjective>
        main
    </adjective>
    <noun>
        weakness
    </noun>
    <noise>
        of
    </noise>
    <subject>
        XML
    </subject>
    <noise>
        ,
    </noise>
    <whocares>
        in my opinion
    </whocares>
    <noise>
        ,
    </noise>
    <wildgeneralisation>
        is its verbosity
    </wildgeneralisation>
    <noise>
        .
    </noise>
</xml>

Ich bin nicht die richtige Person zu fragen, wie ich selbst ein großer Fan von xml bin. Allerdings kann ich Ihnen eine der wichtigsten Beschwerden sagen, dass ich gehört habe:

Es ist hart zur Arbeit mit. Hier hart bedeutet, dass es eine API nimmt zu wissen, und dass Sie benötigen relativ viel Code schreiben Ihre xml zu analysieren. Auch wenn ich nicht sagen würde, dass es wirklich alles so schwer, kann ich nur zustimmen, dass eine Sprache, die Objekte gemacht zu beschreiben, leichter zugegriffen werden kann, wenn eine Sprache verwenden, das unterstützt dynamisch Objekte erstellt.

ich glaube, allgemein in der Reaktion einfach ist, weil XML überstrapaziert wird.

Allerdings, wenn es ein Wort, das ich über XML-Hass, der mit Leidenschaft, ist Namensraum. Die verlorene Produktivität um Namespace Probleme ist entsetzlich.

XML stammt von SGML, der Ur-Urvater Markup-Sprachen. Der Zweck von SGML und durch die Erweiterung XML ist zu annotate Text . XML tut dies gut und hat eine breite Palette von Werkzeugen, die ihre Anlage für eine Vielzahl von Anwendungen zu erhöhen.

Das Problem, wie ich es sehe, ist, dass XML häufig verwendet wird, nicht mit Anmerkungen versehen Text, sondern repräsentiert strukturierte Daten , die ein subtiler, aber wichtiger Unterschied ist. In der Praxis muss strukturierte Daten präzise für eine Vielzahl von Gründen. Die Leistung ist eine der nahe liegende, vor allem, wenn die Bandbreite begrenzt ist. Dies ist wahrscheinlich einer der Hauptgründe, warum JSON für Web-Anwendungen so beliebt ist. Concise Datenstrukturdarstellung auf den Draht Mittel eine bessere Skalierbarkeit.

Leider ist JSON nicht sehr lesbar, ohne zusätzliche Leerzeichen Polsterung, die fast immer weggelassen. Auf der anderen Seite, wenn Sie jemals Bearbeitung eine große XML-Datei mit einem Kommandozeilen-Editor versucht haben, kann es auch sehr schwierig sein.

Ich persönlich finde, dass YAML zwischen den beiden Extremen ein schönes Verhältnis zueinander stehen. Vergleichen Sie die folgende (kopiert von yaml.org mit geringfügigen Änderungen).

YAML:

invoice: 34843
  date: 2001-01-23
  billto: &id001
    given: Chris
    family: Dumars
    address:
      lines: |
        458 Walkman Dr.
        Suite #292
      city: Royal Oak
      state: MI
      postal: 48046
  shipto: *id001
  product:
  - sku: BL394D
    quantity: 4
    description: Basketball
    price: 450.00
  - sku: BL4438H
    quantity: 1
    description: Super Hoop
    price: 2392.00
  tax : 251.42
  total: 4443.52
  comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

XML:

<invoice>
   <number>34843</number>
   <date>2001-01-03</date>
   <billto id="id001">
      <given>Chris</given>
      <family>Dumars</family>
      <address>
        <lines>
          458 Walkman Dr.
          Suite #292
        </lines>
        <city>Royal Oak</city>
        <state>MI</state>
        <postal>48046</postal>
      </address>
   </billto>
   <shipto xref="id001" />
   <products>
      <product>
        <sku>BL394D</sku>
        <quantity>4</quantity>
        <description>Basketball</description>
        <price>450.00</price>
      </product>
      <product>
        <sku>BL4438</sku>
        <quantity>1</quantity>
        <description>Super Hoop</description>
        <price>2392.00</price>
      </product>
   </products>
   <tax>251.42</tax>
   <total>4443.52</total>
   <comments>
    Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338
   </comments>
</invoice>

Sie beide die gleichen Daten darstellen, aber die YAML ist mehr als 30% kleiner und wohl besser lesbar. Welche würden Sie es vorziehen, mit einem Texteditor zu haben, zu ändern? Es gibt viele Bibliotheken zur Verfügung zu analysieren und emittieren YAML (das heißt SnakeYAML für Java-Entwickler).

Wie bei allem, das richtige Werkzeug für den richtigen Job ist die beste Regel zu folgen.

Mein Lieblings unangenehmes Problem ist mit XML Serialisierungsformaten, dass die Verwendung Attribute - wie XAML.

Das funktioniert:

<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding CurrentSelection}"/>

Dies gilt nicht:

<ListBox SelectedItem="{Binding CurrentSelection}" ItemsSource="{Binding Items}"/>

XAML Deserialisierung Abtretungseigenschaftswerte, wie sie sind Lesen aus dem XML-Stream. So im zweiten Beispiel, wenn die SelectedItem Eigenschaft zugeordnet ist, hat sich der Kontrolle des ItemsSource noch nicht eingestellt worden ist, und die SelectedItem Eigenschaft wird zu einem Element zugeordnet ist, dass noch Know existiert.

Wenn Sie Visual Studio verwenden Ihre XAML-Dateien zu erstellen, alles cool sein wird, weil Visual Studio die Reihenfolge der Attribute beibehält. Aber passen Sie Ihre XAML in einigen XML-Tool, das die XML-Empfehlung glaubt, wenn er sagt, dass die Reihenfolge der Attribute nicht signifikant ist, und der Junge sind Sie in einer Welt des Schmerzes.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top