XMLの防御


私がキャリアを始めたとき、XMLは遍在していました.Java JARファイルのメタ情報-マニフェスト-独自の形式に従います.しかし、Java EEデザイナーはそれをXML上で構築しました:すべてのアーティファクトのメタ情報はXML形式にあります.web.xml , ejb-jar.xml , application.xml , など
Java EEは個人的に経験した例です.しかし、XMLは、その時点で企業の世界のどこにあった.その有病率は2つの領域で構成された.
以来ずっと、それはXMLが人気がなくなっていると言う婉曲表現です.JSONやYAMLなどの他のフォーマットは、開発者の心に置き換えられている.このポストでは
  • 強力なXMLが下落した理由のいくつかを探る
  • 人気のある選択肢のいくつかの欠点を上げる
  • XMLが既にどのように解決したかを説明する
  • XMLの没落


    私は、XMLの没落につながったいくつかの理由があると思います.それは単一のものではなく、現在の状態につながったそれらの結合です.

    "エンタープライズ"と関連付けられる


    私は、XMLの最悪の欠陥が企業界との密接な関連であるのを恐れます.誰もが知っているように、企業は悪名高い悪いです-定義によって:流血、重い、軽快な、等、はい、それはあなたが疑問に思った皮肉です.
    一般に、知覚は真実を切り裂く.開発者はその点では何の違いもない.結局、それは誇大宣伝によって開発された開発者と大部分の開発者が今日XMLを知覚する方法です.

    フロントエンドとの統合の欠如


    XMLの主な使用法の一つは、レルムSOAP web services . JavaScriptやブラウザからこれらのWebサービスを消費するのは簡単ではありません.
    JavaScriptのオブジェクト表記、別名Jsonが事実上の標準になったのは不思議ではありません.ジェンソンREST それとともに.名前が意味するように、JSONはJavaScriptネイティブですが、XMLはそうではありません.

    急な第一歩


    JSONは始めるのが非常に簡単です.裸のXMLでさえ、1つは初心者フレンドリーでない名前空間の概念を持ちます.XMLでは、1つのドキュメントが異なる名前空間から要素を使用できます.フリップ側では、単純なドキュメントをより複雑に設計できます.
    XMLは多くの強力な機能を持っていますが、このすべての力は初心者に混乱させることができます.私は、彼らが彼らがそうするより複雑なものをより複雑にすると認めます.

    パフォーマンス


    私は、「引数」というパフォーマンスを2、3回つまずきました.これは通常、XML、JSON、YAMLで記述されたサンプルを使用して“証明”されます.その開始と終了タグのために、作家は、XMLが他の2つと比較して非常に騒々しいことを示します.
    IMHO、この引数はすべて3つのフォーマットがテキストベースであるので浅いです.したがって、ファイルを圧縮することができます.構文解析は少し遅いかもしれませんが、厳密な解析器(および関連するテクノロジスタック)に依存します.最終的に、XMLでの送信と解析のオーバーヘッドは、すべてのユースケースの合計時間と比較して無視できます.
    JSONの上でYAMLを支持する人々は、同じ推理を使用します:以下の性格.

    虐待


    上記の理由は多かれ少なかれXMLと一致する.しかし、私は建築家がXMLを悪用していることを認めたくない.私は個人的にペイロードを数メガバイトのオーダーでSOAPウェブサービスを見ました.その時、あなたは、そのようなデザインのパフォーマンスが恒星でないと想像するかもしれません.

    選択肢の失敗


    JSON、YAML&ALはすべて自分の失敗を持っている.以下はサンプルです.

  • Jソンには、コメントがありません.最も普通のフォールバックは"_comment" プロパティ.
    {
      "foo": {
        "_comment" : "My important comment",
        "bar": true
      }
    }
    
  • YAMLには、統治体がありません.個人は仕様を管理します.

  • YAMLには、Boleansを書く22の方法があります!

    Anyone who uses YAML long enough will eventually get burned when attempting to abbreviate Norway.

        -- Nobody wants to write YAML



    ニコラス・フランネル(長い間私は信じている)
    フランクリン

    YAMLはPythonのプログラミング言語に対する設定構文です.真剣に、重要な白人?あなたのKubernetes展開を構成するためにYAMLの500行で楽しんでください.
    午前7時59分
  • これに対処するために、他のフォーマットがポップアップしました.

  • TOML からインスピレーションを描くhttps://en.wikipedia.org/wiki/INI_file 形式.これは、プロパティのネスト階層を許可します

  • HighBon形式を押す

    This is an informal spec, but hopefully it's clear.

        -- HOCON README


    この1つの声明は、私に自信を満たしません.
  • 原罪:文法の欠如


    どのような形式に関係なく、自分の特定の欠点に関係なく、最も重要な問題の一つは、クライアントが読むデータが正しいかどうかを決定することです.
    JSONとYAMLを使用する場合、異なるクライアントがアドホック検証を提供する必要があります.プロバイダがデータ形式を変更すると問題が発生します.
  • クライアントがどのようにフォーマットが変わったかについてわかっているようにする方法?
  • どのような情報については、クライアントに通信するための情報を変更するには?
  • 検証をクライアント間で同期させる方法
  • XMLは、この問題は文法を提供することによって初めから解決しています.文法は、XMLデータベースの制約と型と同じ役割を果たします.最も重要な違いは、文法を外在化することです.
    XML文法の実装はいくつかあります.Document Type Definition , XML Schema , Relax NG , などが最も広く、XMLスキーマです.XMLスキーマもXML形式で書かれているので、Webサーバーがホストできます.次に、パブリックアクセス可能なURLで参照できます.
    このアプローチは上記の問題を解決します:クライアントがXMLドキュメントを受け取ると、前者はXMLスキーマURLを見ます.それを取得し、データがスキーマに準拠していることを確認できます.
    データ形式を変更するのは、XMLスキーマファイルをバージョン管理するのと同じくらい簡単です.

    その他のXMLの利点


    このセクションでは、XMLを使用する2、3の利点をリストしたいです.

    公募


    XMLは、単一の人または会社の代わりにNGO、すなわちW3C . W 3 C仕様はpublicly documented process and defined lifecycle .

    バトル実績


    XMLは誇大宣伝されていませんが、多くのドキュメント、ブログ記事、およびFAQs 利用可能

    作曲可能な


    XMLが厳密に名前空間を強制しない間、それは良い実行と考えられます.このように、異なる名前空間で定義されている同様の名前付きエンティティは、セマンティクスについて混乱せずに同じドキュメントに共存できます.

    異なる風味


    XML構文解析は2つの風味になります.
  • ツリーベースの構文解析Document Object Model . 文書全体をメモリにロードする
  • イベントベースの構文解析Simple API for XML . これは大きなドキュメントの解析を可能にします.
  • SAXはW 3 C仕様ではないことに注意してください.

    異なる言語での実装


    業界のあらゆる一般的に使用される言語は、少なくとも1つのXML構文解析実装を提供します.これは、言語、またはサードパーティ製の1つで利用できる標準的なライブラリで焼かれます.ここにいくつかあります:
    言語
    実装
    ドム
    サックス
    ノート
    ジャバ
    Standard Library


    ジャバ
    Standard Library


    ルビー
    Nokogiri


    libxml 2のラッパ
    Python
    Standard library


    試み
    Standard Library


    試み
    Gogogiri
    ?

    libxml 2のラッパ
    C
    Standard Library


    C
    libxml2


    C
    libexpat


    C++
    pugixml


    C++
    Xerces


    アーラン
    Standard library


    アーラン
    Fast XML


    NODEJS
    libxmljs


    libxml周辺のラッパー
    NODEJS
    node-expat


    libexpat周辺のラッパー

    文書変換


    XSLTはa W3C specification . つのXMLドキュメントを宣言的な方法で別のドキュメントに変換できます.ターゲットドキュメントはXML自身のいずれかを指定できます.

    ドキュメント問い合わせ


    XPathはanother W3C specification . これは、CSSセレクタに似たXMLドキュメントの問い合わせ方法を定義します.

    結論


    XLMは他の代替技術に比べて多くの利点を有する.私が上で述べたものに加えて、それはAから利益を得ますrich ecosystem .
    それは多くの若い(そしてそれほど若くない)開発者によって誇大宣伝されていない.我々の産業が新しい光るものより多くの戦い証明されたテクノロジーを評価するならば、私は有益であると思います.
    さらに進む
  • Introducing JSON
  • The JavaScript Object Notation (JSON) Data Interchange Format
  • YAML Ain't Markup Language
  • YAML Ain’t Markup Language (YAML™) v1.2
  • Nobody wants to write YAML
  • Tom’s Obvious, Minimal Language
  • eXtensible Markup Language (W3C recommandation)
  • 当初公開A Java Geek 2020年9月27日