XML-i kasutatakse praktiliselt alati valesti

XML-i kasutatakse praktiliselt alati valesti
XML-i keel leiutati 1996. aastal. Peaaegu kohe pÀrast selle ilmumist hakkasid inimesed selle rakendamise vÔimalusi valesti mÔistma ning selleks, mille jaoks seda prooviti kohandada, ei olnud see parim valik.

Ei oleks ĂŒlemÀÀrane öelda, et enamik XML-skeeme, mida olen nĂ€inud, kujutas endast mĂ”ttetut vĂ”i vale XML-i kasutamist. Veelgi enam, selline XML-i rakendamine nĂ€itas pĂ”hjalikku arusaamatust selle kohta, millega XML eelkĂ”ige on.

XML on mÀrgistuskeel. See ei ole andmevorming. Enamikus XML-skeemides seda eristust selgelt ei arvestatud, segades XML-i andmevorminguga, mis lÔppkokkuvÔttes tÀhendas, et XML-i valik ise oli vale, kuna tegelikult oli vajalik just andmevorming.

Ilma detailidesse laskumata sobib XML kĂ”ige paremini struktureeritud teksti ja metaandmetega plokkide annotatsiooniks. Kui teie peamine ĂŒlesanne ei ole töötada tekstiplokiga, ei pruugi XML-i valik olla pĂ”hjendatud.

Sellest vaatepunktist on lihtne viis kontrollida, kui hĂ€sti on XML-skeem koostatud. VĂ”tame nĂ€iteks dokumendi eeldatavas skeemis ja eemaldame kĂ”ik sildid ja atribuudid. Kui jÀÀb midagi mĂ”tetust (vĂ”i kui jÀÀb tĂŒhi rida), siis on kas teie skeem valesti koostatud vĂ”i ei olnud XML-i kasutamine lihtsalt otstarbekas.

Edasi toon mÔned kÔige sagedamini esinevad valesti koostatud skeemide nÀited.

Siin nĂ€eme pĂ”hjendamata ja kummalist (kuigi ĂŒsna levinud) katset vĂ€ljendada XML-i keeles lihtsat sĂ”nastikku «vĂ”ti-vÀÀrtus». Kui eemaldada kĂ”ik sildid ja atribuudid, jÀÀb tĂŒhi rida. Tegelikult esindab see dokument — kui absurdne see ka ei tunduks — semantilist annotatsiooni tĂŒhi rida.

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

Miski veel hullem, meil pole siin lihtsalt semantilist annotatsiooni tĂŒhjast reast kui ekstsentriline viis sĂ”navara vĂ€ljendamiseks — seekord on „sĂ”navara“ otseselt kodeeritud juuri elementide atribuutidena. SeetĂ”ttu muutub mÀÀratletud atribuutide nimede kogum elemendil mÀÀramatuks ja dĂŒnaamiliseks. Veelgi enam, siit on nĂ€ha, et kĂ”ik, mida autor tegelikult vĂ€ljendada soovis, on lihtne sĂŒntaks „vĂ”ti-vÀÀrtus“, kuid selle asemel valis ta tĂ€iesti kummalise lahenduse, rakendades XML-i, sundides kasutama ĂŒhte tĂŒhja elementi lihtsalt atribuutide sĂŒntaksi eelseisjana. Ja selliste skeemidega kohtan ma vĂ€ga tihti.

John
  London

See on juba mĂ”nevĂ”rra parem, kuid nĂŒĂŒd on vĂ”tmed mingil pĂ”hjusel metaandmed, mitte vÀÀrtused. Üsna kummaline vaade sĂ”nastikele. Kui eemaldada kĂ”ik sildid ja atribuudid, kaob pool teabest.

SÔnastiku Ôige vÀljendus XML-is nÀeks vÀlja umbes nii:

Nimi
    John
  
  
    Linn
    London

Kuid kui inimesed otsustavad kummaliselt kasutada XML-i andmevorminguna ning korraldada sĂ”nastikku selle abil, peavad nad aru saama, et see, mida nad teevad, ei ole sobiv ega mugav. Tihti valivad projekteerijad valesti XML-i oma rakenduste loomiseks. Veelgi tihedamini sĂŒvendavad nad olukorda mĂ”ttetute XML-i rakendustega ĂŒhes ĂŒlaltoodud vormis, ignoreerides asjaolu, et XML ei sobi selleks lihtsalt.

Halvim XML-i skeem? Muide, auhind halvima XML-i skeemi eest, mida mul on olnud vĂ”imalus nĂ€ha, minna konfiguratsioonifaili formaadi juurde, mis on mĂ”eldud IP-telefonide Polycom automaatseks ressursijagamiseks. Sellised failid nĂ”uavad TFTP kaudu XML-pĂ€ringufailide laadimist, mis... KokkuvĂ”ttes, siin on lĂ”ik ĂŒhest sellisest failist:

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

See ei ole kellegi naljakas nali. Ja see ei ole ka minu vÀljamÔeldis:

  • elemendid kasutatakse lihtsalt prefiksina atribuutide lisamiseks, mis omavad hierarhilisi nimesid.
  • Kui on vajalik lisada vÀÀrtusi mitmele rekordite eksemplarile, tuleb kasutada atribuutide nimesid, millel on indeksid.
  • Lisaks sellele tuleb atribuudid, mis algavad softkey.paigutada elementidele <softkey/>ja atribuudid, mis algavad feature.paigutada elementidele <feature/> jne., kuigi see nĂ€eb vĂ€lja tĂ€iesti liialdatud ja esmapilgul mĂ”ttetu.
  • Ja lĂ”puks, kui lootsite, et atribuutide nime esimene komponent sobib alati elemendi nimega — ei! NĂ€iteks atribuudid up. peavad olema seotud <userpreferences/>. Atribuutide nimede kinnitamise kord on vabalt valitud ja praktiliselt tĂ€ielik.

Dokumendid vĂ”i andmed. Üksikute isikute poolt aeg-ajalt tehakse tĂ€iesti kummalisi asju, pĂŒĂŒdes vĂ”rrelda XML-i ja JSON-i — sellega nĂ€idates, et ei mĂ”ista kumbagi. XML on dokumentide mĂ€rgistuskeel. JSON on aga struktuurse andmeformaadi kujul, nii et nende omavaheline vĂ”rdlemine on sama, mis pĂŒĂŒda vĂ”rrelda sooja kĂŒlmaga.

Sellesse arusaamisse aitab mÔisted dokumentide ja andmete erinevus. XML-i analoogina vÔib soovitada masinloetavat dokumenti. Kuigi see on mÔeldud masinaga lugemiseks, kuulub see metafooriliselt dokumentide hulka ning sellelt vaatenurgalt on see tegelikult vÔrreldav PDF formaadi dokumentidega, mis enamasti ei ole masinloetavad.

NĂ€iteks XML-is on elementide jĂ€rjekord oluline. JSON-is aga paaride «vĂ”ti-vÀÀrtus» jĂ€rjekord objektides ei oma tĂ€hendust ja ei ole mÀÀratletud. Kui soovite saada jĂ€rjekorrast sĂ”ltumatut sĂ”nastikku «vĂ”ti-vÀÀrtus» paaridest, siis elementide tegelik jĂ€rjekord selles failis ei ole oluline. Kuid vĂ”ite nende andmete pĂ”hjal luua palju erinevaid dokumente, kuna dokumendis on mÀÀratud teatud jĂ€rjekord. Metaforina on see sarnane paberil dokumendile, kuigi tal ei ole fĂŒĂŒsilisi mÔÔte, erinevalt vĂ€ljaprintimisest vĂ”i PDF-failist.

Minu nĂ€ites XML-keeles sĂ”naraamatu Ă”igest esitamisest on nĂ€idatud elementide jĂ€rjekord, mis erineb JSON-i esitamisest. Ma ei saa seda jĂ€rjekorda eirata: selline joonelisus on algselt dokumentide mudelile ja XML-formaadile omane. Keegi vĂ”ib selle XML-dokumendi tĂ”lgendamisel otsustada jĂ€rjekorda ignoreerida, kuid selle ĂŒle vaielda on mĂ”ttetu, kuna see kĂŒsimus ĂŒletab arutelu ise formaadi ĂŒle. Veelgi enam, kui muuta dokument brauseris nĂ€htavaks, lisades sellele kaskaadse stiilitabele, saab nĂ€ha, et sĂ”naraamatu elemendid jĂ€rgivad kindlat jĂ€rjekorda, mitte mingis muus.

TeisisĂ”nu, sĂ”naraamat (struktureeritud andmete fragment) vĂ”ib olla muudetud n erinevatesse vĂ”imalikesse dokumentidesse (XML, PDF, paberil jne), kus n — elementide vĂ”imalike kombinatsioonide arv sĂ”naraamatus, ja see on veel enne teiste vĂ”imalike muutujate arvessevĂ”tmist.

Samasugusel juhul on vaja arvesse vĂ”tta, et andmete edastamiseks ei oleks masinatoetava dokumendi kasutamine efektiivne. Sellisel juhul on mudel ĂŒleliigne ja takistab edasist tööd. Lisaks, et algandmeid vĂ€lja tĂ”mmata, tuleb kirjutada programm. Kahtlemata ei ole mĂ”tet kasutada XML-formaati millegi jaoks, mille puhul mingil hetkel ei kujundata dokumenti (nĂ€iteks CSS-i vĂ”i XSLT abil, vĂ”i nende kombinatsiooniga), kuna just see on peamine (kui mitte ainus) pĂ”hjus dokumentide mudeli jĂ€rgimiseks.

Veelgi enam, kuna XML-is ei ole numbrite, booleanide ega muude andmetĂŒĂŒpide mĂ”istet, peetakse kĂ”ik selle formaadis esitatud numbreid lihtsalt tĂ€iendavaks tekstiks. Andmete vĂ€ljatĂ”mbamiseks peab olema teada skeem ja selle seosed vastava vĂ€ljendatud andmega. Samuti tuleb mĂ”ista, millal konteksti pĂ”hjal esindab teatud tekstielement numbrit, ning see tuleb konverteerida numbriks jne.

Seega ei erine andmete ekstraheerimise protsess XML-dokumentidest oluliselt protsessist, mis kĂ€sitleb skaneeritud dokumentide tuvastamist, mis sisaldavad nĂ€iteks tabelite kujul mitmelehekĂŒljelist numbrilist teavet. Jah, see on pĂ”himĂ”tteliselt vĂ”imalik, kuid see ei ole kĂ”ige optimaalsem lĂ€henemine — vĂ€lja arvatud ÀÀrmuslikel juhtudel, kui ei ole muid vĂ”imalusi. MĂ”istlik lahendus on leida digitaalne koopia algsetest andmetest, mis pole dokumendi mudelisse integreeritud, kus andmed on kokku pandud nende konkreetse tekstilise esitusega.

Ei ĂŒllata mind ĂŒldse, et XML on ettevĂ”tluses populaarne. Selle pĂ”hjuseks on just see, et dokumendi formaat (paberil) on Ă€ritegevuses arusaadav ja tuttav ning soovitakse jĂ€tkata tuttava ja selge mudeli kasutamist. Sama pĂ”hjus on ka see, miks Ă€ri maailmas kasutatakse liiga sageli PDF-dokumente, mitte masinatega töötlemiseks sobivamaid formaate — sest nad on endiselt seotud trĂŒkitud lehe mĂ”istega, millel on kindel fĂŒĂŒsiline suurus. See kehtib isegi nende dokumentide kohta, mida tĂ”enĂ€oliselt kunagi ei trĂŒkita (nĂ€iteks 8000-lehekĂŒljeline registridokumendi PDF-fail). Selles mĂ”ttes on XML-i kasutamine ettevĂ”tluses oma olemuselt skevomorfism. Inimestele on arusaadav trĂŒkitud lehe piiratud suuruse metafooriline idee ja nad mĂ”istavad, kuidas luua Ă€riprotsesse trĂŒkitud dokumentide pĂ”hjal. Kui see on teie suund, siis dokumendid, millel ei ole piiratud fĂŒĂŒsilist suurust ja mis on masinloetavad — XML-dokumendid — esindavad innovatsiooni, olles samal ajal tuttav ja mugav dokumentide analoog. Mis ei takista neil jÀÀmast vale ja liialt skevomorfiliseks andmete esitamise viisiks.

Praegu on ainsad teadaolevad XML-skeemid, mida ma tÔeliselt Ôigeks rakenduseks pean, XHTML ja DocBook.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster