Frage

Für mich verwendbar bedeutet, dass:

  • Es wird in der Praxis verwendet
  • Es verfügt über Tools-Unterstützung.(zumindest ein einfacher Editor)
  • Es hat eine für Menschen lesbare Syntax (bitte keine spitzen Klammern)

Außerdem möchte ich, dass es so nah wie möglich an XML ist, d. h.Es muss sowohl Unterstützung für Attribute als auch für Eigenschaften geben.Also, nein YAML Bitte.Derzeit fällt mir nur eine passende Sprache ein: JSON.Kennen Sie weitere Alternativen?

War es hilfreich?

Lösung

YAML ist eine 100-prozentige Obermenge von JSON, daher macht es keinen Sinn, YAML abzulehnen und stattdessen JSON in Betracht zu ziehen.YAML macht alles, was JSON macht, aber YAML bietet noch viel mehr (z. B. Referenzen).

Mir fällt nichts ein, was XML tun kann, was YAML nicht kann, außer ein Dokument mit einer DTD zu validieren, was sich meiner Erfahrung nach nie gelohnt hat.Aber YAML ist viel schneller und einfacher zu tippen und zu lesen als XML.

Was Attribute oder Eigenschaften betrifft, wenn Sie darüber nachdenken, „fügen“ sie eigentlich nichts hinzu ...Es handelt sich lediglich um eine Notationsabkürzung, um etwas als Attribut des Knotens zu schreiben, anstatt es in seinen eigenen untergeordneten Knoten einzufügen.Wenn Ihnen dieser Komfort jedoch gefällt, können Sie ihn oft mit den Inline-Listen/Hashes von YAML emulieren.Z.B:

<!-- XML -->
<Director name="Spielberg">
    <Movies>
        <Movie title="Jaws" year="1975"/>
        <Movie title="E.T." year="1982"/>
    </Movies>
</Director>


# YAML
Director: 
    name: Spielberg
    Movies:
      - Movie: {title: E.T., year: 1975}
      - Movie: {title: Jaws, year: 1982}

Der Luxus, nicht jedes Node-Tag zweimal schreiben zu müssen, kombiniert mit der Freiheit von all dem spitzen Klammergewirr, macht YAML für mich zu einer bevorzugten Wahl.Eigentlich gefällt mir auch das Fehlen formaler Tag-Attribute, da mir das immer wie eine Grauzone von XML vorkam, die unnötigerweise zwei Syntaxsätze (sowohl beim Schreiben als auch beim Durchlaufen) für im Wesentlichen dasselbe Konzept einführte.YAML beseitigt diese Verwirrung vollständig.

Andere Tipps

JSON ist eine sehr gute Alternative und es gibt Tools dafür in mehreren Sprachen.Und es ist wirklich einfach in Web-Clients zu verwenden, da es sich um natives Javascript handelt.

ich habe gefunden S-Ausdrücke eine großartige Möglichkeit sein, strukturierte Daten darzustellen.Es handelt sich um ein sehr einfaches Format, das leicht zu generieren und zu analysieren ist.Es unterstützt keine Attribute, aber wie YAML und JSON ist dies auch nicht erforderlich.Attribute sind einfach eine Möglichkeit für XML, die Ausführlichkeit einzuschränken.Einfachere, sauberere Formate brauchen sie einfach nicht.

TL;DR

Prolog wurde hier nicht erwähnt, aber es ist das beste mir bekannte Format zur Darstellung von Daten.Prolog-Programme beschreiben im Wesentlichen Datenbanken mit komplexen Beziehungen zwischen Entitäten.Prolog ist kinderleicht zu analysieren, sein einziger Konkurrent sind wahrscheinlich S-Ausdrücke in diesem Bereich.

Vollversion

Programmierer „vergessen“ oft, woraus XML eigentlich besteht.Bezieht sich normalerweise auf eine sehr kleine Teilmenge dessen, was es ist.XML ist ein sehr komplexes Format, das mindestens aus diesen Teilen besteht: DTD-Schemasprache, XSD-Schemasprache, XSLT-Transformationssprache, RNG-Schemasprache Und XPath (plus XQuery)-Sprachen – sie alle sind fester Bestandteil des XML-Standards.Außerdem gibt es einige Apokryphen E4X.Jeder einzelne von ihnen hat seine eigenen Versionen, einige Überschneidungen, Inkompatibilitäten usw.Nur sehr wenige XML-Parser implementieren sie alle.Ganz zu schweigen von den zahlreichen Macken und Fehlern der beliebten Parser, von denen einige zu erheblichen Sicherheitsproblemen führen, z https://en.wikipedia.org/wiki/XML_external_entity_attack .

Suchen Sie daher nach einem XML Alternative ist keine sehr gute Idee.Wahrscheinlich möchten Sie sich überhaupt nicht mit XML befassen.

YAML ist wahrscheinlich die zweitschlechteste Option.Es ist nicht so umfangreich wie XML, wurde aber auch so konzipiert, dass es alle Grundlagen abdeckt ...jeweils mehr als zehnmal...auf unterschiedliche und einzigartige Weise, die sich niemand jemals vorstellen konnte.Ich habe noch nichts von einem ordnungsgemäß funktionierenden YAML-Parser gehört.Ruby, die Sprache, die häufig YAML verwendet, hatte dies bekanntermaßen vermasselt deswegen.Alle YAML-Parser, die ich bisher gesehen habe, sind Kopien davon Libyen, bei dem es sich selbst um einen handgeschriebenen (nicht aus einer formalen Beschreibung generierten) Parsertyp handelt, dessen Code sehr schwer auf Korrektheit zu überprüfen ist (Funktionen, die sich über Hunderte von Zeilen mit kompliziertem Kontrollfluss erstrecken).Wie bereits erwähnt, ist JSON vollständig darin enthalten ...zusätzlich zu einer Handvoll Unicode-Codierungstechniken ...im selben Dokument und wahrscheinlich noch eine Menge anderer Dinge, von denen Sie nichts hören möchten.

JSON hingegen unterscheidet sich völlig von den beiden anderen.Sie können wahrscheinlich einen JSON-Parser schreiben, während Sie darauf warten, das JSON-Parser-Artefakt von Ihrem Maven Nexus herunterzuladen.Es kann sehr wenig, aber Sie wissen zumindest, wozu es fähig ist.Keine Überraschungen.(Außer einigen Unstimmigkeiten im Zusammenhang mit Zeichen-Escapezeichen in Zeichenfolgen und Doppelkodierung).Keine verdeckten Heldentaten.Sie können darin keine Kommentare schreiben.Mehrzeilige Zeichenfolgen sehen schlecht aus.Was auch immer Sie unter der Unterscheidung zwischen Eigenschaften und Attributen verstehen, Sie können es durch stärker verschachtelte Wörterbücher implementieren.

Angenommen, Sie wollten wiedergutmachen, was XML angerichtet hat ...Nun, dann reichen die beliebten Dinge wie YAML oder JSON nicht aus.Irgendwann Mitte der siebziger Jahre trennten sich in der Programmierung Mode und rationales Denken.Sie müssen also dorthin zurückkehren, wo alles mit McCarthy, Hoare, Codd und Kowalski begann, herausfinden, was Sie darzustellen versuchen, und dann herausfinden, welche Darstellungstechnik für das, was Sie sind, am besten geeignet ist versuche es darzustellen :)

Jeff hat darüber geschrieben Hier Und Hier.Das sollte Ihnen den Einstieg erleichtern.

Ich würde JSON empfehlen ...aber da du es bereits erwähnt hast, solltest du vielleicht einen Blick darauf werfen Google-Protokollpuffer.

Bearbeiten:Protokollpuffer sind für die programmgesteuerte Verwendung konzipiert (es gibt Bindungen für C++, Java, Python ...), daher sind sie möglicherweise nicht für Ihren Zweck geeignet.

Ihre Forderungen sind etwas unmöglich.Sie möchten etwas, das XML ähnelt, lehnen aber wahrscheinlich das nächstgelegene Äquivalent ohne spitze Klammer (YAML) ab.

So sehr es mir auch nicht gefällt, warum nicht einfach XML verwenden?Sie sollten eigentlich nie XML lesen müssen (abgesehen vom Debuggen, nehme ich an), es gibt eine absurde Menge an Tools dafür.

So ziemlich alles, was nicht XML ist, wird nicht so weit verbreitet sein, daher wird es weniger Tool-Unterstützung geben.

JSON ist wahrscheinlich ungefähr gleichwertig, aber es ist im Großen und Ganzen gleichermaßen unlesbar.Aber auch hier sollten Sie es nie wirklich lesen müssen (laden Sie es in die von Ihnen verwendete Sprache und es sollte in native Arrays/Dikte/Variablen/was auch immer umgewandelt werden).

Oh, ich finde JSON weit schöner zu analysieren als XML:Ich habe es in Javascript und im Python-Modul „simplejson“ verwendet – etwa ein Befehl und es wurde schön in ein natives Python-Dikt oder ein Javascript-Objekt umgewandelt (daher der Name!)

Es gibt AXON die das Beste von XML und JSON abdecken.Lassen Sie uns das an mehreren Beispielen erklären.

AXON könnte als kürzere Form von XML-Daten betrachtet werden.

XML

<person>
   <name>Frank Martin</name>
   <age>32</age>
 </person>

AXON

person{
  name{"Frank Martin"}
  age{32}}

oder

person
  name:
    "Frank Martin"
  age:
    32

XML

<person name="Frank Martin" age="32" />

AXON

person{name:"Frank Martin" age:32}

oder

person
  name: "Frank Martin"
  age: 32

AXON enthält eine Form von JSON.

JSON

{"name":"Frank Martin" "age":32 "birth":"1965-12-24"}

AXON

{name:"Frank Martin" age:32 birth:1965-12-24}

AXON kann eine Kombination aus XML-ähnlichen und JSON-ähnlichen Daten darstellen.

AXON

table {
  fields {
    ("id" "int") ("val1" "double") ("val2" "int") ("val3" "double")
  }
  rows {
    (1 3.2 123 -3.4)
    (2 3.5 303 2.4)
    (3 2.3 235 -1.2)
  }
}

oder

table
  fields
    ("id" "int")
    ("val1" "double")
    ("val2" "int") 
    ("val3" "double")
  rows
    (1 3.2 123 -3.4)
    (2 3.5 303 2.4)
    (3 2.3 235 -1.2)

Es steht die Python-Bibliothek zur Verfügung Pyaxon Jetzt.

Ich finde Klarsilber ist eine sehr gute Alternative.Sie haben sogar eine Vergleichsseite Hier und eine Liste von Projekte die es benutzen

Zum Speichern codeartiger Daten, LES (Loyc Expression Syntax) ist eine aufstrebende Alternative.Mir ist aufgefallen, dass viele Leute XML für codeähnliche Konstrukte verwenden, etwa Build-Systeme, die Bedingungen, Befehlsaufrufe und manchmal sogar Schleifen unterstützen.Diese Dinge sehen in LES natürlich aus:

// LES code has no built-in meaning. This just shows what it looks like.
[DelayedWrite]
Output(
    if version > 4.0 {
        $ProjectDir/Src/Foo;
    } else {
        $ProjectDir/Foo;
    }
);

Es gibt allerdings noch keine großartige Tool-Unterstützung;Derzeit ist die einzige LES-Bibliothek für C#.Derzeit ist nur eine App bekannt, die LES verwendet: LLLPG.Es unterstützt „Attribute“, aber sie ähneln C#-Attributen oder Java-Annotationen, nicht XML-Attributen.

Theoretisch könnten Sie LES für Daten oder Markup verwenden, es gibt jedoch keine Standards dafür:

body {
    '''Click here to use the World's '''
    a href="http://google.com" {
        strong "most popular"; " search engine!"
    };
};

point = (2, -3);
tasteMap = { "lemon" -> sour; "sugar" -> sweet; "grape" -> yummy };

Wenn Sie allergisch gegen spitze Klammern sind, dann ist JSON, HDF (ClearSilver) und OGDL sind die einzigen, die ich ohne weiteres kenne.

Nach einigem Googeln habe ich auch hier eine Liste mit Alternativen gefunden:
http://web.archive.org/web/20060325012720/www.pault.com/xmlalternatives.html

YAML ist ein äußerst funktionsreiches und im Allgemeinen für Menschen lesbares Format, aber sein Achillesferse ist die Komplexität, wie die Rails-Schwachstellen zeigen, die wir diesen Winter gesehen haben.Aufgrund seiner Allgegenwärtigkeit in Ruby als Konfigurationssprache hat Tom Preston-Werner von Github eine vernünftige Alternative namens TOML entwickelt.Es gewann sofort enorm an Zugkraft und verfügt über eine hervorragende Werkzeugunterstützung.Ich kann jedem, der sich YAML anschaut, wärmstens empfehlen, es auszuprobieren:

https://github.com/mojombo/toml

AFAIK, JSON und YAML sind in Bezug auf die Datenstruktur genau gleichwertig.YAML hat einfach weniger Klammern und Anführungszeichen und so.Daher verstehe ich nicht, dass Sie das eine ablehnen und das andere behalten.

Außerdem sehe ich nicht, dass die spitzen Klammern von XML weniger „für den Menschen lesbar“ sind als die eckigen Klammern, die geschweiften Klammern und die Anführungszeichen von JSON.

Es gibt wirklich viele Alternativen zu XML, aber das Hauptproblem bei vielen davon scheint darin zu liegen, dass Bibliotheken möglicherweise nicht für jede gewünschte Sprache verfügbar sind und die Bibliotheken relativ mühsam zu implementieren sind.

Das Parsen einer Baumstruktur selbst ist möglicherweise nicht so angenehm, wenn man es mit Schlüssel-Wert-Paaren vergleicht, z. B.Hash-Tabellen.Wenn eine Hash-Tabelleninstanz die Anforderung erfüllt, dass alle ihre Schlüssel Zeichenfolgen und alle ihre Werte Zeichenfolgen sind, ist die Implementierung von hashtable2string() und string2hashtable() relativ einfach.

Ich habe die Hash-Tabellen-Serialisierung in AJAX zwischen PHP und JavaScript verwendet und das von mir entwickelte Format heißt ProgFTE (Programmer Friendly Text Exchange) und wird beschrieben unter:

http://martin.softf1.com/g/n//a2/doc/progfte/index.html

Eine Ruby-Version der ProgFTE-Implementierung finden Sie als Teil der Kibuvits Ruby Library:http://rubyforge.org/projects/kibuvits/

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