Warum ist der XML-Typ sicher?

30

Warum geben sie an, dass XML Typensicherheit bietet, und wie kommt dies im XML selbst zum Ausdruck?

Wie unterscheidet es sich von JSON (zum Beispiel), das (wie ich verstehe) nicht typsicher ist?

user3339411
quelle

Antworten:

36

Aufgrund der XML-Schemadefinition (XSD).

Mit XML können Sie eine zusätzliche Datei haben, die das Schema beschreibt. Es gibt beispielsweise an, dass das Element /a/bein Array ist und 1 bis 10 Elemente enthält, oder dass das Element /a/ceine Ganzzahl ist. Ein Beispiel für eine XSD finden Sie hier .

Die Validierung einer bestimmten XML-Datei über eine XSD wird von vielen Sprachen unterstützt . Beispielsweise kann eine .NET-Anwendung eine XML-Datei von einer nicht vertrauenswürdigen Quelle anfordern und prüfen, ob sie mit der XSD übereinstimmt . Anschließend kann es in einer Microsoft SQL Server-Datenbank gespeichert werden, die wiederum eine XSD-Datei enthält, und die Überprüfung erneut durchführen (um sicherzustellen, dass alle Clients, die Zugriff auf die Datenbank haben, kompatibel sind).

XSD ist nicht die einzige Sprache.

  • Wenn Sie eine Webentwicklung durchgeführt haben, haben Sie sicherlich von der Document Type Definition (DTD) gehört, einer Auszeichnungssprache, die die Struktur von XML definiert und insbesondere zur Validierung von HTML-Inhalten verwendet wird. XSD kann zwar nicht alle Funktionen ausführen, z. B. sicherstellen, dass ein Element oder ein Attribut eine Ganzzahl enthält, es kann jedoch eine Reihe von Strukturprüfungen durchführen.

  • RELAX NG hat den Vorteil, dass es im Vergleich zu anderen Sprachen relativ einfach ist und kompakter als XML geschrieben werden kann.

  • Schematron ist eine weitere "regelbasierte Validierungssprache für Aussagen über das Vorhandensein oder Fehlen von Mustern in XML-Bäumen" ( Wikipedia ) und präsentiert einen etwas anderen Ansatz, der auf XPath-Aussagen basiert.

Ähnliche Initiativen für JSON sind nicht so beliebt (insbesondere in Microsoft-zentrierten Unternehmenswelten). Einer der Gründe ist, dass JSON für Situationen gedacht ist, in denen die Datenstruktur eher grundlegend ist (dh als Baum ausgedrückt werden kann, ohne dass beispielsweise Attribute erforderlich sind) und nicht unbedingt validiert werden müssen. Ein hervorragendes Beispiel ist eine REST-API, die von einer dynamisch typisierten Sprache verwendet wird:

  • der Client ist sehr einfach und schnell zu implementieren,
  • Es wird vertraut, dass sich die API nicht ändert.
  • Der Kunde kann sich leicht mit bestimmten Blättern befassen, bei denen eine Validierung erforderlich ist (z. B. prüfen, ob /something/percentagees sich um eine tatsächliche Zahl handelt, die im Bereich von 0..100 liegt).
Arseni Mourzenko
quelle
20

XML kann typsicher sein, da es mit XSD-Schemas möglich ist, den Datentyp von Elementen zu deklarieren. Es wird garantiert, dass ein anhand eines XSD-Schemas validiertes Dokument den erwarteten Typen entspricht. Da für ein XML-Format kein Schema erforderlich ist, ist ein Dokument nicht automatisch als XML-Dokument typensicher.

Es gibt tatsächlich auch eine Schemasprache für JSON , sodass typensicheres JSON möglich ist. Da es jedoch nur selten verwendet wird, ist JSON in der Regel nicht typsicher.

JacquesB
quelle
2
Ihre Antwort wäre besser mit einem Namen oder Link für das JSON-Äquivalent zu XSD.
DougM
1
Übrigens: XML-Schema ist bei weitem nicht die einzige Schemadefinitionssprache für XML. Es gibt auch Schematron, RelaxNG und natürlich die gute alte SGML DTD.
Jörg W Mittag
Beachten Sie auch, dass XML selbst bei einem Schema möglicherweise nicht typsicher ist. Man kann ein Element angeben, um "irgendeinen" Inhaltstyp zu haben. Man könnte zwar argumentieren, dass es sich um eine Form der Typensicherheit handelt (es ist mir egal, alles ist gültig), aber gleichzeitig kann keine Validierung durchgeführt werden: Es handelt sich im Wesentlichen um einen "varianten" Typ.
3

In der Informatik ist Typensicherheit das Ausmaß, in dem eine Programmiersprache Tippfehler abschreckt oder verhindert.

Typensicherheit ist kein absolutes Attribut. Es ist nicht boolesch. Sprachen (und XML und JSON sind Sprachen) ermöglichen und verhindern verschiedene Arten von Fehlern und Irrtümern. Beispielsweise können Sie Elemente falsch benennen. Erforderliche syntaktische Elemente wie das Schließen von Tags und geschweiften Klammern können jedoch nicht übersprungen werden.

Normales XML und JSON sind ziemlich gleichermaßen typsicher (oder typunsicher). Eine gültige XML / JSON-Zeichenfolge hat eine bestimmte syntaktische und semantische Struktur, die jedoch für eine Anwendung fast nie ausreicht, um damit zu arbeiten. Anwendungen sind nicht nur eine Struktur, sondern eine bestimmte.

XML glänzt mit XML Schema Definition (XSD), einer flexiblen und leistungsstarken Methode, um ein bestimmtes XML-Dokument anhand eines Schemas zu validieren. Dies bietet viel Typensicherheit unter der oben angegebenen Definition.

usr
quelle