
XML keel loodi 1996. aastal. Peaaegu kohe pÀrast selle ilmumist hakkasid selle rakendamise vÔimalusi valesti mÔistetama, ja eesmÀrkide jaoks, mille jÀrgi prooviti seda kohandada, ei olnud see parim valik.
Ei ole liialdus öelda, et suurem osa XML skeeme, mida olen nÀinud, on olnud mÔttetu vÔi vale kasutamine XML-ist. Veelgi enam, selline XML-i rakendamine nÀitab pÔhimÔttelist arusaamatust sellest, mis XML tegelikult on.
XML on mÀrgistuskeel. See ei ole andmevorming.. Enamikus XML skeemides seda eristust ei arvestatud, segades XML-i andmevorminguga, mis tÀhendas, et XML-i valik oli vale, kuna tegelikult vajalik oli just andmevorming.
Kui mitte minna detailidesse, siis sobib XML kÔige paremini tekstilÔikude struktuuri ja metaandmetega annotatsiooniks. Kui teie peamine eesmÀrk ei ole töötada tekstilÔikidega, siis pole XML-i valik tÔenÀoliselt Ôigustatud.
Selle vaatenurgast on lihtne viis kontrollida, kui hĂ€sti on XML skeem tehtud. VĂ”tame nĂ€iteks dokumendi ettepanekuga skeemis ja kustutame kĂ”ik sildid ning atribuudid. Kui allesjÀÀnud tekstis ei ole mĂ”tet (vĂ”i kui jÀÀb tĂŒhi rida), siis on teie skeem kas valesti ĂŒles ehitatud vĂ”i ei olnud XML-i kasutamine lihtsalt Ă”igustatud.
JĂ€rgnevalt tutvustan mĂ”ningaid kĂ”ige levinumaid valesti ĂŒles ehitatud skeeme.
Siin nĂ€eme nĂ€idet pĂ”hjendamatu ja kummalise (kuigi ĂŒsna levinud) katse kohta vĂ€ljendada XML-i keeles lihtsat «vĂ”ti-vÀÀrtus» sĂ”nastikku. Kui kustutada kĂ”ik sildid ja atribuudid, jÀÀb alles tĂŒhi rida. Sisuliselt esindab see dokument, kuigi see vĂ”ib tunduda absurdne, semantilist annotatsiooni tĂŒhjale reale.
<root name="John" city="London" />Veel hullem, meil pole siin lihtsalt semantilist tĂŒhja rida sĂ”nastiku erakordse vĂ€ljendamise viisina â seekord on "sĂ”nastik" otse kodeeritud juureelemendi atribuutide nĂ€ol. SeetĂ”ttu muutub mÀÀratud atribuutide nimekiri elemendil mÀÀramatuks ja dĂŒnaamiliseks. Veelgi enam, siin on selgelt nĂ€ha, et kĂ”ik, mida autor tegelikult vĂ€ljendada tahtis, on lihtne sĂŒntaks "vĂ”ti-vÀÀrtus", kuid selle asemel valis ta tĂ€iesti kummalise lahenduse rakendada XML-i, sunniviisiliselt mÀÀrates tĂŒhja elemendi kasutamise lihtsalt atribuutide sĂŒntaksi eelprefiksina. Sellised skeemid satuvad mulle vĂ€ga sageli.
John
LondonSee on juba parem, aga nĂŒĂŒd on vĂ”tmed mingil pĂ”hjusel metaandmed, kuid vÀÀrtused mitte. Ăks kummaline vaade sĂ”nastikele. Kui eemaldada kĂ”ik sildid ja atribuudid, kaob pool teabest.
Ăige sĂ”nastiku vĂ€ljendus XML-is nĂ€eks umbes vĂ€lja nii:
Name
John
City
LondonAga kui inimesed on teinud kummalise otsuse rakendada XML-i andmeformaadina ja seejĂ€rel selle abil sĂ”nastikku korraldada, peavad nad mĂ”istma, et see, mida nad teevad, on sobimatu ja ebamugav. Sageli valivad projekteerijad ekslikult XML-i oma rakenduste loomiseks. Veelgi sagedamini sĂŒvendavad nad olukorda mĂ”ttetuks XML-i rakendamisega ĂŒhes ĂŒlaltoodud vormis, ignoreerides fakti, et XML pole selleks lihtsalt sobiv.
Halvim XML-skeem? Muide, auhind halvima XML-skeemi eest, mida olen kunagi nĂ€inud, lĂ€heb Polycomi IP-telefonide automaatsete ressursihalduse seadete konfiguratsioonifailivormingule. Sellised failid nĂ”uavad XML-i laadimist TFTP kaudu, mis... ĂhesĂ”naga, siin on katkend ĂŒ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 halb nalja. Ja see ei ole minu vÀljamÔeldis:
- elemendid kasutatakse lihtsalt eelsÔnana atribuutide kinnitamiseks, millel endil on hierarhilised nimed.
- Kui on vajalik lisada vÀÀrtusi mitmele ĂŒlesande eksemplarile, siis tuleb kasutada atribuutide nimesid, millel on indeksid.
- Lisaks sellele tuleb atribuudid, mis algavad
softkey., paigutada elementidele<softkey/>, atribuudid, mis algavadfeature., paigutada elementidele<feature/>jne., hoolimata sellest, et see tundub tĂ€iesti ĂŒleliigne ja esmapilgul mĂ”ttetu. - Ja lĂ”puks, kui loodsite, et atribuudi nime esimene komponent langeb alati kokku elemendi nimega â seda ei juhtu! NĂ€iteks atribuudid
up.peavad olema kinnitatud<userpreferences/>. Atribuutide nimede kinnitamise jÀrjekord elementidele on meelevaldne ja praktiliselt tÀielik.
Dokumendid vĂ”i andmed. Aeg-ajalt tegeleb keegi tĂ€iesti kummaliste asjadega, pĂŒĂŒdes vĂ”rrelda XML-i ja JSON-i â ning nĂ€itab seelĂ€bi, et ei mĂ”ista kumbagi. XML on dokumentide mĂ€rgistamise keel. JSON on aga struktureeritud andmete formaat, nii et nende omavaheline vĂ”rdlemine on nagu proovida vĂ”rrelda sooja ja pehmet.
Selle mÔistmisel aitab arusaam erinevusest dokumendid ja andmed. XML-i analoogina vÔib tinglikult vÔtta masinloetava dokumendi. Kuigi see on mÔeldud masina lugemiseks, viitab see metafooriliselt dokumentidele ja on seega tÔeliselt vÔrreldav PDF formaadi dokumentidega, mis enamasti pole masinloetavad.
NĂ€iteks XML-is on elementide jĂ€rjekord tĂ€htis. JSON-is aga ei oma objektide sees «vĂ”ti-vÀÀrtus» paaride jĂ€rjekord mĂ”tet ja ei ole mÀÀratud. Kui soovite saada jĂ€rjestamata sĂ”nastikku «vĂ”ti-vÀÀrtus» paaridest, siis ei ole selle faili elementide tĂ”eline jĂ€rjekord oluline. Kuid saate nende andmete pĂ”hjal luua palju erinevaid dokumente, kuna dokumendis on kindel jĂ€rjekord. Metafooriliselt on see sarnane paberdokumendile, kuigi tal ei ole fĂŒĂŒsilisi mÔÔtmeid, nagu trĂŒkitud lehe vĂ”i PDF-faili puhul.
Minu nĂ€ites on XML-keeles sĂ”nastiku esitlemise Ă”ige korraldus, mis nĂ€itab elementide jĂ€rjestust sĂ”nastikus, erinevalt esitlemisest JSON-keeles. Ma ei saa seda jĂ€rjekorda ignoreerida: selline lineaarne struktuur on algselt omane dokumendimudelitele ja XML-formaadile. Keegi vĂ”ib selle XML-dokumendi tĂ”lgendamisel otsustada, et ignoreerib jĂ€rjekorda, kuid selle ĂŒle vaielda on mĂ”ttetu, kuna see kĂŒsimus ĂŒletab formaadi arutelu. Veelgi enam, kui dokument muuta brauseris vaadatavaks, lisades sellele kaskaadstiilide tabeli, on vĂ”imalik nĂ€ha, et sĂ”nastiku elemendid jĂ€rgivad teatud jĂ€rjekorda, ja mitte mingis muus.
TeisisĂ”nu, sĂ”nastik (struktureeritud andmete fragment) saab muuta n erinevateks vĂ”imalike dokumentideks (XML, PDF, paberil jne), kus n â sĂ”nastikus elementide vĂ”imalike kombinatsioonide arv, ja me ei ole veel arvesse vĂ”tnud teisi vĂ”imalikke muutujaid.
Samas tuleneb sellest ka see, et kui soovite edastada ainult andmeid, siis ei ole masinloetava dokumendi kasutamine tĂ”hus. Seal kasutatakse mudelit, mis on sel juhul liig, see ainult segab. Lisaks tuleb algandmete vĂ€lja ekstraktimiseks kirjutada programm. Keeruline on leida mĂ”tet kasutada XML-i millegi jaoks, mis mingil hetkel ei formeerita dokumendiks (ĂŒtleme, CSS vĂ”i XSLT abil, vĂ”i mĂ”lema abiga), kuna see on peamine (kui mitte ainus) pĂ”hjus, et jÀÀda dokumendimudeli juurde.
Veelgi enam, kuna XML-is ei ole numbrite (vĂ”i boolean-vĂ€ljendite vĂ”i teiste andmetĂŒĂŒpide) mĂ”istet, loetakse selles formaadis esitatud numbreid vaid tĂ€iendavaks tekstiks. Andmete ekstrakteerimiseks peab olema teada skeem ja selle seos vastava vĂ€ljendatud andmetega. Samuti peab olema selge, millal konteksti pĂ”hjal esindab tekstielement numbrit, ja see tuleb muuta numbriks jne.
Seega, andmete vĂ€ljavĂ”tmise protsess XML-dokumentidest ei erine eriti sellest, kuidas tuvastatakse skaneeritud dokumente, mis sisaldavad nĂ€iteks tabelit, mis koosneb paljusid lehekĂŒlgi numbreid. Jah, see on tĂ”epoolest vĂ”imalik, kuid see pole kĂ”ige optimaalsem tee â vĂ€lja arvatud ÀÀrmisel juhul, kui pole muud vĂ”imalust. MĂ”istlik lahendus oleks lihtsalt leida originaalsete andmete digitaalne koopia, mis ei ole dokumentide mudelisse sisse ehitatud, kus andmed on ĂŒhendatud nende konkreetse tekstilise esitusega.
Sellegipoolest ei ĂŒllata mind ĂŒldse, et XML on ettevĂ”tetes populaarne. Selle pĂ”hjuseks on just see, et dokumentide formaat (paberil) on ettevĂ”tetele arusaadav ja tuttav, ning nad soovivad jĂ€tkuvalt kasutada tuttavat ja selget mudelit. Sama tĂ”ttu kasutatakse ettevĂ”tetes liiga tihti PDF-dokumente, mitte masinaliselt töödeldavaid formaate - sest nad on endiselt seotud mĂ”istega trĂŒkitud leht, millel on kindel fĂŒĂŒsiline suurus. See kehtib isegi nende dokumentide kohta, mis tĂ”enĂ€oliselt kunagi ei trĂŒkitakse (nĂ€iteks 8000-lehekĂŒljeline PDF-fail registri dokumentatsioonist). Sellest vaatepunktist on XML-i kasutamine ettevĂ”tetes sisuliselt skevomorfism. Inimestele on arusaadav metafoorne idee piiratud suurusega trĂŒkitud lehe kohta ja nad mĂ”istavad, kuidas luua Ă€ri protsesse trĂŒkitud dokumentide pĂ”hjal. Kui see on teie suunanĂ€itajaks, siis piiramatud fĂŒĂŒsilise suurusega, masinloetavad dokumendid â XML-dokumendid â esindavad innovatsiooni, olles samas tuttav ja mugav dokumentide analoog. Mis ei takista neil jÀÀmast vale ja liiga skevomorfiliseks andmete esitamise viisiks.
Praegu on ainsad XML-skeemid, mida ma tÔeliselt saan nimetada selle formaadi Ôigeteks rakendusteks, XHTML ja DocBook.
Allikas: habr.com
