XML sa takmer vždy zneužíva

XML sa takmer vždy zneužíva
Jazyk XML bol vynájdený v roku 1996. Sotva sa objavil, možnosti jeho aplikácie už začali byť nepochopené a na účely, ktorým sa ho snažili prispôsobiť, to nebola najlepšia voľba.

Bez preháňania môžem povedať, že drvivá väčšina schém XML, ktoré som videl, boli nevhodné alebo nesprávne použitia XML. Navyše toto použitie XML demonštrovalo zásadné nepochopenie toho, o čom XML je.

XML je značkovací jazyk. Toto nie je dátový formát. Väčšina schém XML tento rozdiel výslovne prehliadla a zamieňala XML s dátovým formátom, čo v konečnom dôsledku vedie k chybe pri výbere XML, pretože je to dátový formát, ktorý je skutočne potrebný.

Bez toho, aby sme zachádzali do prílišných podrobností, XML sa najlepšie hodí na anotovanie blokov textu štruktúrou a metadátami. Ak vaším hlavným cieľom nie je pracovať s blokom textu, výber XML pravdepodobne nebude opodstatnený.

Z tohto hľadiska existuje jednoduchý spôsob, ako skontrolovať, ako dobre je XML schéma urobená. Zoberme si ako príklad dokument v zamýšľanej schéme a odstráňte z neho všetky značky a atribúty. Ak to, čo zostalo, nedáva zmysel (alebo ak zostal prázdny riadok), potom buď vaša schéma nie je zostavená správne, alebo ste jednoducho nemali používať XML.

Nižšie uvediem niektoré z najbežnejších príkladov nesprávne zostavených obvodov.

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

Tu vidíme príklad nepodloženého a zvláštneho (hoci veľmi bežného) pokusu o vyjadrenie jednoduchého slovníka kľúč-hodnota v XML. Ak odstránite všetky značky a atribúty, zostane vám prázdny riadok. V podstate je tento dokument, nech to znie akokoľvek absurdne, sémantickou anotáciou prázdneho riadku.

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

Aby toho nebolo málo, nemáme tu len sémantickú anotáciu prázdneho reťazca ako extravagantný spôsob vyjadrenia slovníka – tentoraz je „slovník“ priamo zakódovaný ako atribúty koreňového prvku. Vďaka tomu je daná množina názvov atribútov na prvku nedefinovaná a dynamická. Navyše to ukazuje, že všetko, čo chcel autor skutočne vyjadriť, bola jednoduchá syntax kľúč-hodnota, ale namiesto toho urobil absolútne bizarné rozhodnutie použiť XML, pričom si vynútil použitie jedného prázdneho prvku jednoducho ako predponu na použitie syntaxe atribútu. A s takýmito schémami sa stretávam veľmi často.

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

Toto je niečo lepšie, ale teraz z nejakého dôvodu sú kľúče metaúdaje a hodnoty nie. Veľmi zvláštny pohľad na slovníky. Ak odstránite všetky značky a atribúty, polovica informácií sa stratí.

Správny slovníkový výraz v XML by vyzeral asi takto:

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

Ale ak ľudia urobili zvláštne rozhodnutie použiť XML ako dátový formát a potom ho použiť na usporiadanie slovnej zásoby, potom by mali pochopiť, že to, čo robia, je nevhodné a nevhodné. Je tiež bežné, že dizajnéri si omylom vyberú XML na vytváranie svojich aplikácií. Ešte častejšie však situáciu zhoršujú nezmyselným používaním XML v niektorej z vyššie opísaných foriem, pričom ignorujú fakt, že XML na to jednoducho nie je vhodné.

Najhoršia schéma XML? Mimochodom, cena za najhoršia schéma XML, akú som kedy videl, Získa formát konfiguračného súboru automatického poskytovania pre telefóny IP telefónie Polycom. Takéto súbory vyžadujú sťahovanie súborov požiadaviek XML cez TFTP, čo... Vo všeobecnosti tu je úryvok z jedného takéhoto súboru:

<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="..." />

Toto nie je niečí zlý vtip. A toto nie je môj vynález:

  • prvky sa jednoducho používajú ako predpona na pripojenie atribútov, ktoré samotné majú hierarchické názvy.
  • Ak chcete priradiť hodnoty viacerým inštanciám konkrétneho typu záznamu, musíte na to použiť názvy atribútov. ktoré majú indexy.
  • Okrem toho atribúty začínajúce na softkey., musia byť umiestnené na prvkoch <softkey/>, atribúty začínajúce na feature., musia byť umiestnené na prvkoch <feature/> atď., napriek tomu, že to vyzerá úplne zbytočne a na prvý pohľad nezmyselne.
  • A nakoniec, ak by ste dúfali, že prvý komponent názvu atribútu bude vždy rovnaký ako názov prvku – nič také! Napríklad atribúty up. musí byť pripojený k <userpreferences/>. Poradie pripájania názvov atribútov k prvkom je ľubovoľné, takmer úplne.

Dokumenty alebo údaje. Z času na čas niekto urobí niečo úplne zvláštne, keď sa pokúsi porovnať XML a JSON – a tým ukáže, že nerozumie ani jednému. XML je značkovací jazyk dokumentov. JSON je štruktúrovaný dátový formát, takže ich vzájomné porovnávanie je ako snažiť sa porovnávať teplý s mäkkým.

Koncept rozdielu medzi dokumenty a údaje. Ako analóg XML môžeme podmienečne brať strojovo čitateľný dokument. Hoci má byť strojovo čitateľný, metaforicky odkazuje na dokumenty a z tohto pohľadu je vlastne porovnateľný s PDF dokumentmi, ktoré väčšinou nie sú strojovo čitateľné.

Napríklad v XML záleží na poradí prvkov. Ale v JSON je poradie párov kľúč-hodnota v objektoch nezmyselné a nedefinované. Ak chcete získať nezoradený slovník párov kľúč – hodnota, nezáleží na skutočnom poradí, v akom sa prvky v danom súbore objavia. Z týchto údajov však môžete vytvoriť mnoho rôznych typov údajov. dokumentov, pretože v dokumente je určitý poriadok. Metaforicky je to obdoba dokumentu na papieri, hoci na rozdiel od výtlačku alebo súboru PDF nemá fyzické rozmery.

Môj príklad správnej reprezentácie slovníka XML ukazuje poradie prvkov v slovníku, na rozdiel od reprezentácie JSON. Nemôžem ignorovať toto poradie: táto linearita je vlastná modelu dokumentu a formátu XML. Niektorí sa môžu rozhodnúť ignorovať poradie pri interpretácii tohto dokumentu XML, ale o tom nemá zmysel polemizovať, pretože problém presahuje rámec diskusie o samotnom formáte. Navyše, ak sprístupníte dokument v prehliadači tak, že k nemu pripojíte kaskádový štýl, uvidíte, že prvky slovníka sa objavia v určitom poradí a v žiadnom inom.

Inými slovami, slovník (časť štruktúrovaných údajov) možno previesť na n rôzne možné dokumenty (v XML, PDF, papieri atď.), kde n - počet možných kombinácií prvkov v slovníku a ďalšie možné premenné sme zatiaľ nebrali do úvahy.

Z toho však vyplýva aj to, že ak chcete prenášať len dáta, tak použitie strojovo čitateľného dokumentu na to nebude efektívne. Používa model, ktorý je v tomto prípade nadbytočný, len bude prekážať. Okrem toho, aby ste mohli extrahovať zdrojové údaje, budete musieť napísať program. Sotva má zmysel používať XML na niečo, čo v určitom okamihu nebude naformátované ako dokument (povedzme pomocou CSS alebo XSLT, alebo oboch), pretože to je hlavný (ak nie jediný) dôvod, prečo tak urobiť. na model dokumentu.

Navyše, keďže XML nemá žiadnu koncepciu čísel (alebo booleovských výrazov alebo iných dátových typov), všetky čísla reprezentované v tomto formáte sa považujú len za dodatočný text. Na extrahovanie údajov musí byť známa schéma a jej vzťah k zodpovedajúcim vyjadreným údajom. Musíte tiež vedieť, kedy na základe kontextu konkrétny textový prvok predstavuje číslo a mal by byť prevedený na číslo atď.

Proces extrakcie údajov z XML dokumentov sa teda až tak nelíši od procesu rozpoznávania naskenovaných dokumentov obsahujúcich napríklad tabuľky tvoriace mnoho strán číselných údajov. Áno, v zásade je to možné, ale toto nie je najoptimálnejší spôsob, s výnimkou krajného riešenia, keď neexistujú absolútne žiadne iné možnosti. Rozumným riešením je jednoducho nájsť digitálnu kópiu pôvodných údajov, ktorá nie je vložená do modelu dokumentu, ktorý kombinuje údaje s ich špecifickou textovou reprezentáciou.

To znamená, že ma vôbec neprekvapuje, že XML je v podnikaní populárne. Dôvodom je práve to, že formát dokumentu (na papieri) je pre podniky zrozumiteľný a známy a chcú aj naďalej používať známy a zrozumiteľný model. Z rovnakého dôvodu podniky príliš často používajú dokumenty PDF namiesto strojovo čitateľnejších formátov – pretože sú stále viazané na koncept tlačenej stránky so špecifickou fyzickou veľkosťou. Týka sa to dokonca aj dokumentov, ktoré sa pravdepodobne nikdy nevytlačia (napríklad 8000 XNUMX-stranový dokument vo formáte PDF s registratúrou). Z tohto pohľadu je používanie XML v podnikaní v podstate prejavom skeuomorfizmu. Ľudia rozumejú metaforickej myšlienke tlačenej stránky obmedzenej veľkosti a rozumejú tomu, ako vytvárať obchodné procesy založené na tlačených dokumentoch. Ak je to váš sprievodca, dokumenty bez obmedzení fyzickej veľkosti, ktoré sú strojovo čitateľné – dokumenty XML – predstavujú inováciu a zároveň sú známym a pohodlným náprotivkom dokumentov. To im nebráni v tom, aby zostali nesprávnym a príliš skeuomorfným spôsobom prezentácie údajov.

K dnešnému dňu sú jediné schémy XML, o ktorých viem, a ktoré môžem skutočne nazvať platným použitím formátu, XHTML a DocBook.

Zdroj: hab.com

Pridať komentár