XML valoda tika izgudrota 1996. gadÄ. TiklÄ«dz tas parÄdÄ«jÄs, tÄ pielietoÅ”anas iespÄjas jau bija sÄkuÅ”as pÄrprast, un mÄrÄ·iem, kÄdiem viÅi to mÄÄ£inÄja pielÄgot, tÄ nebija labÄkÄ izvÄle.
Nav pÄrspÄ«lÄts teikt, ka lielÄkÄ daļa XML shÄmu, ko esmu redzÄjis, bija neatbilstoÅ”s vai nepareizs XML lietojums. TurklÄt Ŕī XML izmantoÅ”ana parÄdÄ«ja bÅ«tisku pÄrpratumu par XML bÅ«tÄ«bu.
XML ir iezÄ«mÄÅ”anas valoda. Å is nav datu formÄts. LielÄkÄ daļa XML shÄmu ir nepÄrprotami ignorÄjuÅ”as Å”o atŔķirÄ«bu, sajaucot XML ar datu formÄtu, kas galu galÄ rada kļūdu, izvÄloties XML, jo tas ir datu formÄts, kas patiesÄ«bÄ ir vajadzÄ«gs.
Neiedziļinoties detaļÄs, XML ir vislabÄk piemÄrots teksta bloku anotÄÅ”anai ar struktÅ«ru un metadatiem. Ja jÅ«su galvenais mÄrÄ·is nav strÄdÄt ar teksta bloku, XML izvÄle, visticamÄk, nebÅ«s pamatota.
No Ŕī viedokļa ir vienkÄrÅ”s veids, kÄ pÄrbaudÄ«t, cik labi ir izveidota XML shÄma. Å emsim par piemÄru dokumentu iecerÄtajÄ shÄmÄ un noÅemsim no tÄ visus tagus un atribÅ«tus. Ja tam, kas ir palicis, nav jÄgas (vai ja ir palikusi tukÅ”a rindiÅa), vai nu shÄma nav izveidota pareizi, vai arÄ« jums vienkÄrÅ”i nevajadzÄja izmantot XML.
TÄlÄk es sniegÅ”u dažus no visbiežÄk sastopamajiem nepareizi konstruÄtu Ä·Äžu piemÄriem.
<roŠ¾t>
<item name="name" value="John" />
<item name="city" value="London" />
</roŠ¾t>
Å eit mÄs redzam piemÄru nepamatotam un dÄ«vainam (lai gan ļoti izplatÄ«tam) mÄÄ£inÄjumam izteikt vienkÄrÅ”u atslÄgas vÄrtÄ«bu vÄrdnÄ«cu XML formÄtÄ. Ja noÅemsit visus tagus un atribÅ«tus, tiks atstÄta tukÅ”a rinda. BÅ«tÄ«bÄ Å”is dokuments, lai arÄ« cik absurdi tas neizklausÄ«tos, ir tukÅ”as rindas semantiskÄ anotÄcija.
<root name="John" city="London" />
Lai padarÄ«tu situÄciju vÄl ļaunÄku, mums Å”eit ir ne tikai tukÅ”as virknes semantiskÄ anotÄcija kÄ ekstravagants vÄrdnÄ«cas izteiksmes veids - Å”oreiz "vÄrdnÄ«ca" ir tieÅ”i kodÄta kÄ saknes elementa atribÅ«ti. Tas padara norÄdÄ«to elementa atribÅ«tu nosaukumu kopu nedefinÄtu un dinamisku. TurklÄt tas parÄda, ka viss, ko autors patieÅ”Äm vÄlÄjÄs izteikt, bija vienkÄrÅ”a atslÄgas vÄrtÄ«bas sintaksi, bet tÄ vietÄ viÅÅ” pieÅÄma absolÅ«ti dÄ«vainu lÄmumu lietot XML, liekot izmantot vienu tukÅ”u elementu vienkÄrÅ”i kÄ prefiksu, lai izmantotu atribÅ«tu sintaksi. Un ar Å”ÄdÄm shÄmÄm es sastopos ļoti bieži.
<roŠ¾t>
<item key="name">John</item>
<item key="city">London</item>
</roŠ¾t>
Tas ir kaut kas labÄks, taÄu tagad kaut kÄdu iemeslu dÄļ atslÄgas ir metadati, bet vÄrtÄ«bas nav. Ä»oti dÄ«vains skats uz vÄrdnÄ«cÄm. Ja noÅemsit visus tagus un atribÅ«tus, puse informÄcijas tiks zaudÄta.
Pareiza vÄrdnÄ«cas izteiksme XML formÄtÄ izskatÄ«tos apmÄram Å”Ädi:
<roŠ¾t>
<item>
<key>Name</key>
<value>John</value>
</item>
<item>
<key>City</key>
<value>London</value>
</item>
</roŠ¾t>
Bet, ja cilvÄki ir pieÅÄmuÅ”i dÄ«vainu lÄmumu izmantot XML kÄ datu formÄtu un pÄc tam to izmantot, lai sakÄrtotu vÄrdu krÄjumu, tad viÅiem vajadzÄtu saprast, ka tas, ko viÅi dara, ir nepiemÄroti un nav Ärti. TÄpat bieži vien dizaineri kļūdaini izvÄlas XML, lai izveidotu savas lietojumprogrammas. Bet vÄl biežÄk tie pasliktina situÄciju, bezjÄdzÄ«gi izmantojot XML kÄdÄ no iepriekÅ” aprakstÄ«tajÄm formÄm, ignorÄjot faktu, ka XML tam vienkÄrÅ”i nav piemÄrots.
SliktÄkÄ XML shÄma? Starp citu, balva par sliktÄkÄ XML shÄma, ko esmu redzÄjis, IegÅ«st automÄtiskÄs nodroÅ”inÄÅ”anas konfigurÄcijas faila formÄtu Polycom IP telefonijas tÄlruÅiem. Å Ädiem failiem ir nepiecieÅ”ams lejupielÄdÄt XML pieprasÄ«juma failus, izmantojot TFTP, kas... KopumÄ Å”eit ir izvilkums no viena Å”Äda faila:
<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="..." />
Tas nav neviena slikta joks. Un tas nav mans izgudrojums:
- elementi tiek vienkÄrÅ”i izmantoti kÄ prefikss, lai pievienotu atribÅ«tus, kuriem paÅ”iem ir hierarhiski nosaukumi.
- Ja vÄlaties pieŔķirt vÄrtÄ«bas vairÄkiem noteikta veida ieraksta gadÄ«jumiem, jums ir jÄizmanto atribÅ«tu nosaukumi. kuriem ir indeksi.
- TurklÄt atribÅ«ti, kas sÄkas ar
softkey.
, jÄnovieto uz elementiem<softkey/>
, atribÅ«ti, sÄkot arfeature.
, jÄnovieto uz elementiem<feature/>
utt., neskatoties uz to, ka tas izskatÄs pilnÄ«gi nevajadzÄ«gi un no pirmÄ acu uzmetiena bezjÄdzÄ«gi. - Un visbeidzot, ja jÅ«s cerat, ka atribÅ«ta nosaukuma pirmais komponents vienmÄr bÅ«s tÄds pats kÄ elementa nosaukums - nekas tamlÄ«dzÄ«gs! PiemÄram, atribÅ«ti
up.
ir jÄpievieno<userpreferences/>
. Atribūtu nosaukumu pievienoŔanas secība elementiem ir patvaļīga, gandrīz pilnīga.
Dokumenti vai dati. Ik pa laikam kÄds izdara kaut ko pavisam dÄ«vainu, mÄÄ£inot salÄ«dzinÄt XML un JSON, tÄdÄjÄdi parÄdot, ka arÄ« nesaprot. XML ir dokumentu iezÄ«mÄÅ”anas valoda. JSON ir strukturÄts datu formÄts, tÄpÄc to salÄ«dzinÄÅ”ana ir kÄ mÄÄ£inÄjums salÄ«dzinÄt silto ar mÄ«kstu.
JÄdziens par atŔķirÄ«bu starp dokumentus un datus. KÄ XML analogu mÄs varam nosacÄ«ti Åemt maŔīnlasÄmu dokumentu. Lai gan tas ir paredzÄts kÄ maŔīnlasÄms, tas metaforiski attiecas uz dokumentiem, un no Ŕī viedokļa faktiski ir salÄ«dzinÄms ar PDF dokumentiem, kas visbiežÄk nav maŔīnlasÄmi.
PiemÄram, XML ir svarÄ«ga elementu secÄ«ba. TaÄu JSON atslÄgu un vÄrtÄ«bu pÄru secÄ«ba objektos ir bezjÄdzÄ«ga un nenoteikta. Ja vÄlaties iegÅ«t nesakÄrtotu atslÄgu un vÄrtÄ«bu pÄru vÄrdnÄ«cu, faktiskajai secÄ«bai, kÄdÄ elementi tiek parÄdÄ«ti Å”ajÄ failÄ, nav nozÄ«mes. TaÄu no Å”iem datiem varat veidot dažÄdu veidu datus. dokumentus, jo dokumentÄ ir noteikta kÄrtÄ«ba. Metaforiski tas ir lÄ«dzÄ«gs dokumentam uz papÄ«ra, lai gan tam nav fizisko izmÄru, atŔķirÄ«bÄ no izdrukas vai PDF faila.
Mans pareizas XML vÄrdnÄ«cas attÄlojuma piemÄrs parÄda elementu secÄ«bu vÄrdnÄ«cÄ pretstatÄ JSON attÄlojumam. Es nevaru ignorÄt Å”o secÄ«bu: Ŕī linearitÄte ir raksturÄ«ga dokumenta modelim un XML formÄtam. Daži, interpretÄjot Å”o XML dokumentu, var izvÄlÄties ignorÄt Å”o secÄ«bu, taÄu nav jÄgas par to strÄ«dÄties, jo Ŕī problÄma neietilpst diskusijÄ par paÅ”u formÄtu. TurklÄt, ja padarÄ«sit dokumentu skatÄmu pÄrlÅ«kprogrammÄ, pievienojot tam kaskÄdes stila lapu, redzÄsit, ka vÄrdnÄ«cas elementi parÄdÄs noteiktÄ secÄ«bÄ, nevis citÄ.
Citiem vÄrdiem sakot, vÄrdnÄ«cu (strukturÄtu datu daļu) var pÄrveidot par n dažÄdi iespÄjamie dokumenti (XML, PDF, papÄ«ra utt.), kur n - iespÄjamo elementu kombinÄciju skaits vÄrdnÄ«cÄ, un mÄs vÄl neesam ÅÄmuÅ”i vÄrÄ citus iespÄjamos mainÄ«gos.
TomÄr no tÄ izriet arÄ« tas, ka, ja vÄlaties pÄrsÅ«tÄ«t tikai datus, maŔīnlasÄma dokumenta izmantoÅ”ana Å”im nolÅ«kam nebÅ«s efektÄ«va. Tas izmanto modeli, kas Å”ajÄ gadÄ«jumÄ ir lieks, tas tikai traucÄs. TurklÄt, lai iegÅ«tu avota datus, jums bÅ«s jÄraksta programma. Diez vai ir jÄgas izmantot XML kaut kam, kas kÄdÄ brÄ«dÄ« netiks formatÄts kÄ dokuments (piemÄram, izmantojot CSS vai XSLT, vai abus), jo tas ir galvenais (ja ne vienÄ«gais) iemesls to darÄ«t. uz dokumenta modeli.
TurklÄt, tÄ kÄ XML nav skaitļu (vai BÅ«la izteiksmju vai citu datu tipu) jÄdziena, visi Å”ajÄ formÄtÄ attÄlotie skaitļi tiek uzskatÄ«ti tikai par papildu tekstu. Lai iegÅ«tu datus, ir jÄzina shÄma un tÄs saistÄ«ba ar attiecÄ«gajiem izteiktajiem datiem. Jums arÄ« jÄzina, kad, pamatojoties uz kontekstu, konkrÄts teksta elements apzÄ«mÄ skaitli un ir jÄpÄrvÄrÅ” par skaitli utt.
TÄdÄjÄdi datu iegÅ«Å”anas process no XML dokumentiem tik ļoti neatŔķiras no skenÄtu dokumentu atpazÄ«Å”anas procesa, kas satur, piemÄram, tabulas, kas veido daudzas skaitlisku datu lappuses. JÄ, principÄ to ir iespÄjams izdarÄ«t, taÄu tas nav optimÄlÄkais veids, izÅemot kÄ pÄdÄjo lÄ«dzekli, kad nav absolÅ«ti nekÄdu citu iespÄju. SaprÄtÄ«gs risinÄjums ir vienkÄrÅ”i atrast oriÄ£inÄlo datu digitÄlu kopiju, kas nav iegulta dokumenta modelÄ«, kas apvieno datus ar to specifisko teksta attÄlojumu.
To sakot, mani nemaz nepÄrsteidz, ka XML ir populÄrs biznesÄ. Iemesls tam ir tieÅ”i tas, ka dokumenta formÄts (uz papÄ«ra) ir uzÅÄmÄjiem saprotams un pazÄ«stams, un viÅi vÄlas arÄ« turpmÄk izmantot pazÄ«stamu un saprotamu modeli. TÄ paÅ”a iemesla dÄļ uzÅÄmumi pÄrÄk bieži izmanto PDF dokumentus, nevis maŔīnlasÄmÄkus formÄtus, jo tie joprojÄm ir saistÄ«ti ar drukÄtas lapas jÄdzienu ar noteiktu fizisko izmÄru. Tas attiecas pat uz dokumentiem, kuri, visticamÄk, nekad netiks izdrukÄti (piemÄram, 8000 lappuÅ”u reÄ£istra dokumentÄcijas PDF). No Ŕī viedokļa XML izmantoÅ”ana uzÅÄmÄjdarbÄ«bÄ bÅ«tÄ«bÄ ir skeuomorfisma izpausme. CilvÄki saprot metaforisko ideju par ierobežota izmÄra drukÄtu lapu un saprot, kÄ izveidot biznesa procesus, pamatojoties uz drukÄtiem dokumentiem. Ja tas ir jÅ«su ceļvedis, dokumenti bez fiziska izmÄra ierobežojumiem, kas ir maŔīnlasÄmi ā XML dokumenti ā ir jauninÄjumi, vienlaikus labi pazÄ«stami un Ärti dokumenti. Tas neliedz tiem palikt par nepareizu un pÄrÄk skeuomorfisku datu prezentÄÅ”anas veidu.
LÄ«dz Å”im vienÄ«gÄs XML shÄmas, kuras es zinu, ko es patieÅ”Äm varu saukt par derÄ«gu formÄta lietojumu, ir XHTML un DocBook.
Avots: www.habr.com