XMLタイプが安全なのはなぜですか?


30

なぜ彼らはXMLが型の安全性を提供すると言っているのか、そしてそれはXML自体でどのように表現されているのか?

(たとえば)JSONとはどう違いますか(私が理解しているように)、タイプセーフではありませんか?

回答:


36

以下のため、XMLスキーマ定義(XSD)。

XMLを使用すると、スキーマを説明する追加フ​​ァイルを作成できます。たとえば、要素/a/bが配列で1〜10個の要素を含むこと、または要素/a/cが整数であることを示します。XSDの例については、こちらをご覧ください

XSDを介した特定のXMLファイルの検証は、多くの言語でサポートされています。たとえば、.NETアプリケーションは、信頼できないソースからXMLファイルを要求し、XSDと一致することを確認できます。そして、それは順番に缶Microsoft SQL Serverデータベースに保存することができXSDが含まれていて、もう一度チェックを行う(ことを保証するために、任意のクライアントがどのデータベースの準拠へのアクセスを持っています)。

XSDだけが言語ではありません。

  • Web開発を行ったことがあれば、XMLの構造を定義し、特にHTML関連コンテンツの検証に使用されるマークアップ言語であるDocument Type Definition(DTD)について聞いたことがあるでしょう。要素や属性に整数が含まれていることを確認するなど、XSDでできることはすべて実行できませんが、それでも一連の構造チェックを実行できます。

  • RELAX NGには、他の言語と比較して比較的単純であるという利点があり、XMLよりもコンパクトな形式で記述できます。

  • Schematronはもう 1つの「XMLツリーのパターンの有無についてアサーションを作成するためのルールベースの検証言語」(ウィキペディア)であり、XPathアサーションに基づいてわずかに異なるアプローチを提示します。

JSONに対する同様のイニシアチブはそれほど人気が​​ありません(特に、マイクロソフト中心の企業の世界では)。理由の1つは、JSONがデータ構造がかなり基本的である(たとえば、属性を必要とせずにツリーとして表現できる)ためであり、必ずしも検証する必要がない場合に使用されることです。優れた例は、動的に型指定された言語で使用されるREST APIです。

  • クライアントは非常に簡単かつ迅速に実装できます。
  • APIは変更されないと信頼されています。
  • クライアントは、検証が必要な特定のリーフを簡単に処理できます(たとえば/something/percentage、実際の数値で0..100の範囲にあるチェック)。

20

XML 、XSDスキーマを使用して要素のデータ型を宣言できるため、型保証できます。XSDスキーマに対して検証されたドキュメントは、期待されるタイプに準拠することが保証されます。ただし、XML形式はスキーマを持つ必要はないため、XMLであるだけではドキュメントは自動的にタイプセーフではありません。

実際にはJSONのスキーマ言語も存在するため、タイプセーフなJSONが可能です。ただし、めったに使用されないため、通常、JSONはタイプセーフではありません。


2
あなたの答えは、XSDに相当するJSONの名前またはリンクの方が良いでしょう。
DougM

1
ところで、XMLスキーマは、XMLのスキーマ定義言語だけではありません。Schematron、RelaxNG、そしてもちろん昔ながらのSGML DTDもあります。
ヨルグWミットタグ

また、スキーマを使用しても、XMLはタイプセーフではない可能性があることに注意してください。「任意の」タイプのコンテンツを持つように要素を指定できます。それは型安全性の形式であると主張することができます(私は気にしません、何も有効ではありません)同時に検証を実行することはできません:それは本質的に「バリアント」型です。

3

コンピュータサイエンスでは、タイプセーフティは、プログラミング言語がタイプエラーを阻止または防止する程度です。

型安全性は絶対的な属性ではありません。ブール値ではありません。言語(およびXMLとJSON 言語)は、さまざまな種類のエラーとミスを許可および防止します。たとえば、要素に誤った名前を付けることができます。ただし、終了タグや中括弧などの必要な構文要素をスキップすることはできません。

プレーンなXMLとJSONは、ほぼ等しくタイプセーフ(またはタイプセーフでない)です。有効なXML / JSON文字列には、特定の構文およびセマンティック構造がありますが、アプリケーションがこれを使用するのに十分なことはほとんどありません。アプリケーションは、だけではなく、いずれかの操作を行い構造が、特定のものを。

XMLは、スキーマに対して特定のXMLドキュメントを検証するための柔軟で強力な方法であるXMLスキーマ定義(XSD)で輝いています。これにより、上記の定義の下で多くのタイプセーフティが提供されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.