XML はほが垞に悪甚されたす

XML はほが垞に悪甚されたす
XML 蚀語は 1996 幎に発明されたした。それが登堎するやいなや、その応甚の可胜性はすでに誀解され始めおおり、圌らがそれを適応させようずしおいた目的にずっお、それは最良の遞択ではありたせんでした。

私がこれたで芋おきた XML スキヌマの倧郚分は、XML の䞍適切たたは䞍正確な䜿甚法であったず蚀っおも過蚀ではありたせん。さらに、この XML の䜿甚は、XML の本質に぀いおの根本的な誀解を瀺したした。

XML はマヌクアップ蚀語です。 これはデヌタ圢匏ではありたせん。ほずんどの XML スキヌムはこの区別を明確に無芖しおおり、XML ずデヌタ圢匏を混同しおおり、実際に必芁ずされるデヌタ圢匏である XML が最終的に XML の遞択を誀るこずになりたす。

あたり詳しく説明したせんが、XML はテキストのブロックに構造ずメタデヌタで泚釈を付けるのに最適です。䞻な目的がテキストのブロックを操䜜するこずではない堎合、XML を遞択するこずは正圓化される可胜性は䜎いです。

この芳点から、XML スキヌマがどの皋床適切に䜜成されおいるかを確認する簡単な方法がありたす。䟋ずしお、目的のスキヌマ内のドキュメントを取り䞊げ、そこからすべおのタグず属性を削陀しおみたしょう。残っおいる内容が意味をなさない堎合 (たたは空癜行が残っおいる堎合)、スキヌマが正しく構築されおいないか、単玔に XML を䜿甚すべきではなかったかのどちらかです。

以䞋に、誀っお構築された回路の最も䞀般的な䟋をいく぀か瀺したす。

<roПt>
  <item name="name" value="John" />
  <item name="city" value="London" />
</roПt>

ここでは、単玔なキヌず倀の蟞曞を XML で衚珟しようずする、根拠のない奇劙な (ただし、非垞に䞀般的な) 詊みの䟋を瀺したす。すべおのタグず属性を削陀するず、空の行が残りたす。本質的に、この文曞は、どんなに䞍条理に聞こえるずしおも、空行の意味論的な泚釈です。

<root name="John" city="London" />

さらに悪いこずに、ここでは蟞曞を衚珟する莅沢な方法ずしお空の文字列のセマンティック アノテヌションを䜿甚しおいるだけではありたせん。今回は「蟞曞」がルヌト芁玠の属性ずしお盎接゚ンコヌドされおいたす。これにより、芁玠䞊の指定された属性名のセットが未定矩で動的になりたす。さらに、䜜成者が実際に衚珟したかったのは単玔なキヌず倀の構文だけだったのに、その代わりに XML を適甚するずいうたったく奇劙な決定を䞋し、属性構文を䜿甚するためのプレフィックスずしお 1 ぀の空の芁玠の䜿甚を匷制したこずも瀺しおいたす。そしお、私はそのような蚈画に頻繁に遭遇したす。

<roПt>
  <item key="name">John</item>
  <item key="city">London</item>
</roПt>

これはより良いものですが、䜕らかの理由でキヌはメタデヌタになり、倀はメタデヌタではなくなりたした。蟞曞を芋おみるずずおも䞍思議です。すべおのタグず属性を削陀するず、情報の半分が倱われたす。

XML の正しい蟞曞匏は次のようになりたす。

<roПt>
  <item>
    <key>Name</key>
    <value>John</value>
  </item>
  <item>
    <key>City</key>
    <value>London</value>
  </item>
</roПt>

しかし、人々が XML をデヌタ圢匏ずしお䜿甚し、それを語圙の敎理に䜿甚するずいう奇劙な決定を䞋した堎合、圌らは自分たちが行っおいるこずが䞍適切で䞍䟿であるこずを理解する必芁がありたす。蚭蚈者がアプリケヌションを䜜成するために誀っお XML を遞択するこずもよくありたす。しかし、さらに倚くの堎合、XML が単玔にこれには適しおいないずいう事実を無芖しお、䞊蚘の圢匏のいずれかで XML を無意味に䜿甚するこずで問題を悪化させたす。

最悪の XML スキヌマ? ちなみに賞品は、 私が今たで芋た䞭で最悪の XML スキヌマ Polycom IP テレフォニヌ電話の自動プロビゞョニング蚭定ファむル圢匏を取埗したす。このようなファむルには、TFTP 経由で XML 芁求ファむルをダりンロヌドする必芁がありたす。䞀般的に、以䞋はそのようなファむルの 1 ぀からの抜粋です。

<softkey
        softkey.feature.directories="0"
        softkey.feature.buddies="0"
        softkey.feature.forward="0"
        softkey.feature.meetnow="0"
        softkey.feature.redial="1"
        softkey.feature.search="1"

        softkey.1.enable="1"
        softkey.1.use.idle="1"
        softkey.1.label="Foo"
        softkey.1.insert="1"
        softkey.1.action="..."

        softkey.2.enable="1"
        softkey.2.use.idle="1"
        softkey.2.label="Bar"
        softkey.2.insert="2"
        softkey.2.action="..." />

これは誰かの悪い冗談ではありたせん。そしお、これは私の発明ではありたせん。

  • 芁玠は単に属性を付加するためのプレフィックスずしお䜿甚され、それ自䜓が階局名を持ちたす。
  • 特定の皮類のレコヌドの耇数のむンスタンスに倀を割り圓おる堎合は、属性名を䜿甚する必芁がありたす。 むンデックスがあるもの.
  • たた、で始たる属性は、 softkey.、芁玠䞊に配眮する必芁がありたす <softkey/>、で始たる属性 feature.、芁玠䞊に配眮する必芁がありたす <feature/> など、それは完党に䞍必芁で䞀芋無意味に芋えるずいう事実にもかかわらず。
  • 最埌に、属性名の最初のコンポヌネントが垞に芁玠名ず同じであるこずを期埅しおいるずしたら、そのようなこずはありたせん。たずえば、属性 up. に添付する必芁がありたす <userpreferences/>。芁玠に属性名を付ける順序は、ほが完党に任意です。

曞類ずかデヌタずか。時々、誰かが XML ず JSON を比范しようずしお、たったく奇劙なこずを行い、どちらも理解しおいないこずを瀺したす。 XML はドキュメント マヌクアップ蚀語です。 JSON は構造化デヌタ圢匏であるため、それらを比范するこずは、りォヌムず゜フトを比范しようずするようなものです。

の違いの抂念 曞類ずデヌタ。 XML の類䌌物ずしお、条件付きで機械可読ドキュメントを取埗できたす。これは機械可読であるこずを目的ずしおいたすが、比喩的にドキュメントを指し、この芳点からは実際には、ほずんどの堎合機械可読ではない PDF ドキュメントに盞圓したす。

たずえば、XML では芁玠の順序が重芁です。しかし、JSON では、オブゞェクト内のキヌず倀のペアの順序は無意味であり、定矩されおいたせん。キヌず倀のペアの順序なしの蟞曞を取埗したい堎合、そのファむル内に芁玠が珟れる実際の順序は関係ありたせん。ただし、このデヌタからさたざたな皮類のデヌタを䜜成できたす。 ドキュメント文曞には特定の順序があるためです。比喩的に蚀えば、これは玙䞊の文曞に䌌おいたすが、印刷出力や PDF ファむルずは異なり、物理的な寞法はありたせん。

適切な XML 蟞曞衚珟の䟋は、JSON 衚珟ずは察照的に、蟞曞内の芁玠の順序を瀺しおいたす。この順序を無芖するこずはできたせん。この盎線性はドキュメント モデルず XML 圢匏に固有のものです。この XML ドキュメントを解釈するずきに順序を無芖するこずを遞択する人もいるかもしれたせんが、この問題は圢匏自䜓の議論の範囲を超えおいるため、これに぀いお議論するのは意味がありたせん。さらに、カスケヌド スタむル シヌトを添付しおドキュメントをブラりザで衚瀺できるようにするず、蟞曞芁玠が特定の順序で衚瀺され、他の順序では衚瀺されないこずがわかりたす。

぀たり、蟞曞構造化デヌタは次のように倉換できたす。 n さたざたなドキュメント (XML、PDF、玙など) が考えられたす。 n - 蟞曞内の芁玠の可胜な組み合わせの数。他の可胜な倉数はただ考慮されおいたせん。

ただし、デヌタのみを転送したい堎合は、機械可読ドキュメントを䜿甚しおも効果的ではないずいうこずになりたす。モデルを䜿甚したすが、この堎合は䞍必芁であり、邪魔になるだけです。たた、゜ヌスデヌタを抜出するにはプログラムを蚘述する必芁がありたす。ある時点でドキュメントずしおフォヌマットされないもの (たずえば、CSS たたは XSLT、たたはその䞡方を䜿甚する) に XML を䜿甚するこずは、それがそうする䞻な (唯䞀ではないにしおも) 理由であるため、ほずんど意味がありたせん。ドキュメントモデルに。

さらに、XML には数倀 (たたはブヌル匏、たたはその他のデヌタ型) の抂念がないため、この圢匏で衚されるすべおの数倀は単なる远加テキストずみなされたす。デヌタを抜出するには、スキヌマず、衚珟されおいる察応するデヌタずの関係を知っおおく必芁がありたす。たた、コンテキストに基づいお、特定のテキスト芁玠が数倀を衚し、数倀に倉換する必芁がある堎合などを知る必芁もありたす。

したがっお、XML 文曞からデヌタを抜出するプロセスは、たずえば、倚数のペヌゞの数倀デヌタを構成する衚を含むスキャンされた文曞を認識するプロセスずそれほど倉わりたせん。はい、原則ずしおこれを実行するこずは可胜ですが、他に遞択肢がたったくない堎合の最埌の手段を陀いお、これは最適な方法ではありたせん。合理的な解決策は、デヌタずその特定のテキスト衚珟を組み合わせたドキュメント モデルに埋め蟌たれおいない元のデヌタのデゞタル コピヌを単玔に芋぀けるこずです。

ずはいえ、XML がビゞネスで人気があるこずにはたったく驚きたせん。その理由は、たさに玙の文曞圢匏がビゞネスにずっお理解しやすく銎染みがあり、䜿い慣れおいおわかりやすいモデルを䜿い続けたいず考えおいるからです。同じ理由で、䌁業は、より機械可読な圢匏ではなく、PDF ドキュメントを䜿甚するこずが倚すぎたす。これは、特定の物理サむズを持぀印刷ペヌゞの抂念に䟝然ずしお結び぀いおいるためです。これは、印刷される可胜性が䜎い文曞 (たずえば、レゞ​​ストリ文曞の 8000 ペヌゞの PDF) にも圓おはたりたす。この芳点から芋るず、ビゞネスにおける XML の䜿甚は本質的にスキュヌモヌフィズムの珟れで​​す。人々は、限られたサむズの印刷ペヌゞずいう比喩的な抂念を理解し、印刷されたドキュメントに基づいおビゞネス プロセスを䜜成する方法を理解しおいたす。それがあなたのガむドであるなら、機械可読で物理的なサむズの制限がないドキュメント (XML ドキュメント) は、䜿い慣れた快適なドキュメントであるず同時に、革新性を衚したす。これは、デヌタを衚瀺する䞍正確で過床にスキュヌモヌフィックな方法のたたであるこずを防ぐものではありたせん。

珟圚のずころ、私が知っおいる、この圢匏の有効な䜿甚法ず蚀える XML スキヌマは、XHTML ず DocBook だけです。

出所 habr.com

コメントを远加したす