it-swarm.com.de

XML für Konfigurationsdateien, warum?

Warum verwenden so viele Projekte XML für Konfigurationsdateien?

43
Omry Yadan

Danke für eure Antworten ... Diese Frage, so naiv wie es auf den ersten Blick scheinen mag, war nicht so naiv :)

Persönlich mag ich XML nicht für Konfigurationsdateien. Ich denke, es ist schwer für Leute, sie zu lesen und zu ändern, und für Computer ist es schwer zu parsen, weil sie so generisch und mächtig sind.

INI-Dateien oder Java-Propery-Dateien eignen sich nur für die grundlegendsten Anwendungen, für die eine Verschachtelung erforderlich ist. Übliche Lösungen zum Verschachteln dieser Formate sehen folgendermaßen aus:

level1.key1=value
level1.key2=value
level2.key1=value

kein schöner Anblick, viel Redundanz und schwer zu bewegende Dinge zwischen Knoten.

JSON ist keine schlechte Sprache, aber es ist so konzipiert, dass es für Computer leicht zu analysieren ist (es ist gültiges JavaScript), es wird also nicht für Konfigurationsdateien verwendet.

JSON sieht so aus:

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

Meiner Meinung nach ist es zu voll von Kommas und Zitaten.

YAML ist gut für Konfigurationsdateien, hier ein Beispiel:

invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars

ich mag die Syntax jedoch nicht sehr, und ich denke, dass die Verwendung von Leerzeichen zum Definieren von Bereichen die Dinge ein bisschen fragil macht (denken Sie, wenn Sie einen Block in eine andere Verschachtelungsebene einfügen).

Vor ein paar Tagen habe ich angefangen, meine eigene Sprache für die Konfigurationsdatei zu schreiben. Ich nannte sie Swush .

Hier einige Beispiele: Als einfache Schlüssel-Wert-Paare:

key:value
key:value2
key1:value3

oder als komplexer und kommentiert

server{
    connector{
         protocol : http // HTTP or BlahTP
         port : 8080     # server port
         Host : localhost /* server Host name*/
    }

    log{
        output{
             file : /var/log/server.log
             format : %t%s
        }
    }
}

Swush unterstützt Strings in der einfachen Form oben oder in Anführungszeichen - was Whitespaces und sogar Zeilenumbrüche innerhalb von Strings zulässt. Ich werde bald Arrays hinzufügen.

name [1 2 b c "Delta force"]

Es gibt eine Java-Implementierung, aber weitere Implementierungen sind willkommen. :) . Überprüfen Sie die Site auf weitere Informationen (ich habe das meiste besprochen, aber die Java-API bietet einige interessante Funktionen wie Selektoren.)

9
Omry Yadan

Dies ist eine wichtige Frage.

Die meisten Alternativen (JSON-, YAML-, INI -Dateien) sind einfacher als XML zu analysieren.

In Sprachen wie Python - wo alles die Quelle ist - ist es einfacher, Ihre Konfiguration in ein klar gekennzeichnetes Python-Modul zu packen.

Einige Leute werden jedoch sagen, dass XML einen Vorteil gegenüber JSON oder Python hat. 

Das Wichtigste an XML ist, dass die "Universalität" der XML-Syntax beim Schreiben einer Konfigurationsdatei, die für eine Anwendung spezifisch ist, nicht viel gilt. Da die Portabilität einer Konfigurationsdatei keine Rolle spielt, schreiben einige Python-Benutzer ihre Konfigurationsdateien in Python.


Bearbeiten

Die Sicherheit einer Konfigurationsdatei spielt keine Rolle. Das Argument "Ein Python-Programm in Python zu konfigurieren ist ein Sicherheitsrisiko" scheint die Tatsache zu ignorieren, dass Python bereits installiert ist und als Quelle ausgeführt wird. Warum einen komplexen Hack in einer Konfigurationsdatei aufarbeiten, wenn Sie die Quelle haben? Hacken Sie einfach die Quelle.

Ich habe gehört, dass Leute sagen, dass "jemand" Ihre App über die Konfigurationsdatei hacken könnte. Wer ist das "jemand"? Der sysadmin? Der DBA? Der Entwickler? Es gibt nicht viele mysteriöse "jemanden" mit Zugriff auf die Konfigurationsdateien.

Jeder, der die Python-Konfigurationsdatei für schändliche Zwecke hacken könnte, könnte wahrscheinlich Keylogger, gefälschte Zertifikate oder andere ernstere Bedrohungen installieren.

39
S.Lott
  1. XML ist leicht zu analysieren. In den meisten Sprachen sind mehrere populäre, leichte, sinnvolle und/oder kostenlose XML-Parsing-Bibliotheken verfügbar.
  2. XML ist leicht zu lesen. Es ist eine sehr gut lesbare Markup-Sprache, so dass sowohl Menschen als auch Computer leicht schreiben können.
  3. XML ist gut spezifiziert. Jeder und sein Hund können anständiges XML schreiben, daher gibt es keine Verwirrung hinsichtlich der Syntax.
  4. XML ist beliebt. Irgendwann begannen einige Important People ™ die Idee zu fördern, dass XML die "Zukunft" sei, und viele Leute kauften es.
  5. XML ist ein bidirektionales Format. Das heißt, Leerzeichen, Kommentare und Ordnung bleiben erhalten. Sie können es programmgesteuert laden, ändern und dann speichern, während die Formatierung beibehalten wird. Dies ist wichtig für Tools, mit denen Benutzer ihre Anwendungen konfigurieren können. Dies ist einer der Gründe, warum XML ursprünglich entwickelt wurde (die Welt ist technischer geworden, daher ist dies weniger notwendig).
  6. XML hat eine optionale Schemaüberprüfung. Wichtig für Tools und komplexe Konfigurationsformate.
  7. XML hat Namespaces. Auf diese Weise können andere Konfigurationen oder Anmerkungen eingebettet werden, ohne das Parsen durchzuführen. In anderen Konfigurationsformaten wird dies normalerweise als spezielle Kommentare mit Hacks oder als Eigenschaftsnamenverstümmelung ausgeführt.

Als Randbemerkung versuche ich nicht, XML zu verteidigen. Es hat seine Verwendung, und ich werde es in einem Projekt verwenden, wenn ich darauf zurückkomme. In vielen Fällen und vor allem bei Konfigurationsdateien besteht der einzige Vorteil darin, dass es ein standardisiertes Format ist, und ich denke, dass dies durch zahlreiche Nachteile (d. H. Es ist zu umfangreich) aufgewogen wird. Meine persönlichen Vorlieben spielen jedoch keine Rolle - ich habe nur geantwortet, warum manche Leute XML als Konfigurationsdateiformat verwenden. Ich persönlich werde es niemals tun.

30
Chris Lutz

Weil XML cool und unternehmerisch klingt.

Edit: Ich wusste nicht, dass meine Antwort so vage war, bis ein Kommentator die Definition von enterprisey anforderte. Zitieren von Wikipedia :

[...] Der Begriff "Unternehmen" soll über das Anliegen von "Overkill für kleinere Organisationen" hinausgehen, impliziert, dass die Software selbst für große Organisationen zu komplex ist und einfachere, bewährte Lösungen zur Verfügung stehen.

Mein Punkt ist, dass XML ein Schlagwort ist und als solches überbeansprucht wird. Trotz anderer Meinungen ist XML nicht einfach zu parsen (schauen Sie sich nur libxml2 an, das gzipped-Quellpaket ist derzeit über 3 MB groß). Aufgrund der Redundanz ist es auch ärgerlich, von Hand zu schreiben. Zum Beispiel listet Wikipedia die XML-Konfiguration auf als einen der Gründe für den Rückgang der Popularität von jabberd zugunsten anderer Implementierungen.

23
avakar

XML ist ein gut entwickelter und übernommener Standard, der das Lesen und Verstehen gegenüber proprietären Konfigurationsformaten erleichtert. 

Es ist auch wichtig zu verstehen, dass die XML-Serialisierung ein in den meisten Sprachen verfügbares Werkzeug ist, das das Speichern von Objektdaten für Entwickler extrem einfach macht. Warum sollten Sie Ihre eigene Methode zum Speichern einer Hierarchie komplexer Daten aufbauen, wenn bereits jemand anderes die Arbeit für Sie erledigt hat?

.NET: http://msdn.Microsoft.com/de-de/library/system.xml.serialization.aspx

PHP: http://us.php.net/serialize

Python: http://docs.python.org/library/pickle.html

Java: http://Java.Sun.com/developer/technicalArticles/Programming/serialization/

13
Robert Venables

Wenn Sie eine XSD-Datei (Schemadatei) zur Beschreibung Ihrer Konfigurationsdatei haben, ist es für Ihre Anwendung einfach, die Konfigurationsdatei zu überprüfen.

8
JonnyBoats

Da das Parsen von XML relativ einfach ist und Ihr Schema eindeutig festgelegt ist, können alle Dienstprogramme Informationen darin lesen und schreiben.

3
Stefano Borini

Nun, XML ist eine Allzweckspezifikation, die Beschreibungen, verschachtelte Informationen und Daten zu etwas enthalten kann. Und es gibt viele APIs und Software, die es analysieren und lesen können.

Es ist daher sehr einfach, etwas auf formale Weise zu beschreiben, das über Plattformen und Anwendungen bekannt ist.

2
Saleh Al-Zaid

Hier einige historische Gründe:

  • Das W3C hat sich von der Erstellung von Tools in Perl zu Java entwickelt
  • Die Apache-Stiftung wechselte von der Erstellung von Tools in Perl zu Java
  • Java hat viele XML-APIs
  • Die Konfiguration kann daher in Java erfolgen
  • Konfiguration über XML und Eigenschaftendateien ist für Nicht-Java-Entwickler

JTidy configuration vs tidy configuration ist ein Paradebeispiel dafür.

1
Paul Sweatte

Ein Grund, der in anderen Antworten nicht angegeben wurde, ist Unicode/Textcodierung/Sie nennen es. Benötigen Sie eine chinesische Zeichenfolge in der Datei? Kein Problem. Das klingt vielleicht trivial, aber als XML eingeführt wurde, war es nicht so. Offensichtlich nicht in INI - Dateien.

Eine andere Sache - es war das erste, was uns die Möglichkeit gab, strukturierte Daten mit Listen, Wörterbüchern oder was auch immer Sie möchten zu haben, die maschinenverarbeitbar und vom Menschen gleichzeitig bearbeitbar sind.

Es hat Nachteile, aber was können Sie sonst noch verwenden? Yaml sieht großartig aus, aber ich habe Angst, es in Projekten einzuführen, an denen ich arbeite, weil ich in meiner Vorstellung all die Probleme sehe, bei denen Menschen ein weißes Feld an die falsche Stelle stellen oder Werkzeuge zusammenführen, die sich nicht darum kümmern.

0
Arek

Der Hauptvorteil von XML und der Grund, warum es so beliebt ist, ist, dass es in der Java-Welt beliebt ist und daher von allen in Java geschriebenen Unternehmensanwendungen verwendet wird, und weil Web Services und Soap auf XML basieren und diese häufig verwendet werden geschäftliche Anwendungen.

JSON und alle anderen Formate werden von der Industrie bisher nicht so gut unterstützt, außer in Ajax-Anwendungen. JSON hat auch keine Schemasprache oder eine definierte Syntaxanalyse wie XML.

Auch wenn es grob gesagt ist, dass JSON nicht die Tonnen von Sachen benötigt, die xml hat, zumindest nicht auf die gleiche Weise, und ich spreche in Webservices, wenn ich das sage ...

0
Coyote21

Das ist, weil Sie mit XML grundsätzlich ein eigenes semantisches Markup erstellen können, das von einem in fast jeder Sprache eingebauten Parser gelesen werden kann. Ein zusätzlicher Vorteil besteht darin, dass die in XML geschriebene Konfigurationsdatei in Projekten verwendet werden kann, in denen Sie zwei oder mehr Sprachen verwenden. Wenn Sie eine Konfigurationsdatei erstellen, in der alles als Variablen für eine bestimmte Sprache definiert wurde, funktioniert sie offensichtlich nur in dieser Sprache.

0
teh_noob