XML se skoro uvek zloupotrebljava

XML se skoro uvek zloupotrebljava
XML jezik je izmišljen 1996. godine. Tek što se pojavio, mogućnosti njegove primjene već su se počele pogrešno shvaćati, a za svrhe kojima su ga pokušavali prilagoditi, nije bio najbolji izbor.

Nije pretjerano reći da je velika većina XML shema koje sam vidio neprikladna ili netačna upotreba XML-a. Štaviše, ova upotreba XML-a je pokazala fundamentalno nerazumijevanje o čemu se radi u XML-u.

XML je jezik za označavanje. Ovo nije format podataka. Većina XML shema je eksplicitno previdjela ovu razliku, brkajući XML s formatom podataka, što na kraju rezultira greškom u odabiru XML-a jer je to format podataka koji je zapravo potreban.

Ne ulazeći previše u detalje, XML je najprikladniji za označavanje blokova teksta strukturom i metapodacima. Ako vaš glavni cilj nije rad s blokom teksta, odabir XML-a vjerojatno neće biti opravdan.

Sa ove tačke gledišta, postoji jednostavan način da se proveri koliko je dobro napravljena XML šema. Uzmimo kao primjer dokument u predviđenoj šemi i uklonimo sve oznake i atribute iz njega. Ako ono što je ostalo nema smisla (ili ako je ostao prazan red), onda ili vaša šema nije pravilno izgrađena ili jednostavno niste trebali koristiti XML.

U nastavku ću dati neke od najčešćih primjera pogrešno konstruiranih kola.

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

Ovdje vidimo primjer neutemeljenog i čudnog (iako vrlo uobičajenog) pokušaja izražavanja jednostavnog rječnika ključ/vrijednost u XML-u. Ako uklonite sve oznake i atribute, ostat će vam prazan red. U suštini, ovaj dokument je, ma koliko apsurdno zvučao, semantička anotacija praznog reda.

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

Da stvar bude gora, ovdje nemamo samo semantičku oznaku praznog niza kao ekstravagantan način izražavanja rječnika – ovaj put je "rječnik" direktno kodiran kao atributi korijenskog elementa. Ovo čini dati skup imena atributa na elementu nedefiniranim i dinamičkim. Štaviše, pokazuje da je sve što je autor zaista želio izraziti bila jednostavna sintaksa ključ/vrijednost, ali je umjesto toga donio apsolutno bizarnu odluku da primijeni XML, prisiljavajući upotrebu jednog praznog elementa jednostavno kao prefiksa za korištenje sintakse atributa. I vrlo često nailazim na takve šeme.

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

Ovo je nešto bolje, ali sada su ključevi iz nekog razloga metapodaci, a vrijednosti nisu. Vrlo čudan pogled na rječnike. Ako uklonite sve oznake i atribute, polovina informacija će biti izgubljena.

Ispravan izraz rječnika u XML-u bi izgledao otprilike ovako:

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

Ali ako su ljudi doneli čudnu odluku da koriste XML kao format podataka, a zatim ga koriste za organizovanje rečnika, onda bi trebalo da shvate da je ono što rade neprikladno i nije zgodno. Takođe je uobičajeno da dizajneri greškom odaberu XML za kreiranje svojih aplikacija. Ali još češće, oni pogoršavaju stvari besmislenim korištenjem XML-a u jednom od gore opisanih oblika, zanemarujući činjenicu da XML jednostavno nije pogodan za ovo.

Najgora XML shema? Usput, nagrada za najgora XML shema koju sam ikada vidio, Dobiva format datoteke konfiguracije za automatsku dodelu za telefone Polycom IP telefonije. Takvi fajlovi zahtevaju preuzimanje datoteka XML zahteva preko TFTP-a, što... Generalno, evo izvoda iz jednog takvog fajla:

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

Ovo nije nečija loša šala. I ovo nije moj izum:

  • elementi se jednostavno koriste kao prefiksi za pričvršćivanje atributa, koji sami po sebi imaju hijerarhijska imena.
  • Ako želite dodijeliti vrijednosti višestrukim instancama određenog tipa zapisa, morate koristiti imena atributa da biste to učinili. koji imaju indekse.
  • Osim toga, atributi koji počinju sa softkey., moraju biti postavljeni na elemente <softkey/>, atributi koji počinju sa feature., moraju biti postavljeni na elemente <feature/> itd., uprkos činjenici da izgleda potpuno nepotrebno i na prvi pogled besmisleno.
  • I konačno, ako ste se nadali da će prva komponenta imena atributa uvijek biti ista kao ime elementa - ništa slično! Na primjer, atributi up. moraju biti pričvršćeni za <userpreferences/>. Redoslijed dodavanja imena atributa elementima je proizvoljan, gotovo u potpunosti.

Dokumenti ili podaci. S vremena na vreme, neko uradi nešto potpuno čudno pokušavajući da uporedi XML i JSON—i na taj način pokazuje da ni oni ne razumeju. XML je jezik za označavanje dokumenata. JSON je strukturirani format podataka, tako da ih međusobno upoređujete kao pokušaj usporedbe toplog sa mekim.

Koncept razlike između dokumenata i podataka. Kao analog XML-a, uslovno možemo uzeti mašinski čitljiv dokument. Iako je predviđeno da bude mašinski čitljiv, on se metaforički odnosi na dokumente, i sa ove tačke gledišta je zapravo uporediv sa PDF dokumentima, koji najčešće nisu mašinski čitljivi.

Na primjer, u XML-u je bitan redoslijed elemenata. Ali u JSON-u, redoslijed parova ključ/vrijednost unutar objekata je besmislen i nedefiniran. Ako želite da dobijete neuređeni rečnik parova ključ-vrednost, stvarni redosled u kome se elementi pojavljuju u toj datoteci nije bitan. Ali iz ovih podataka možete formirati mnogo različitih vrsta podataka. dokumenata, jer postoji određeni red u dokumentu. Metaforički, analogan je dokumentu na papiru, iako nema fizičke dimenzije, za razliku od ispisa ili PDF datoteke.

Moj primjer pravilnog XML rječnika predstavlja redoslijed elemenata u rječniku, za razliku od JSON reprezentacije. Ne mogu zanemariti ovaj redoslijed: ova linearnost je svojstvena modelu dokumenta i XML formatu. Neki će možda odlučiti da ignorišu redosled kada tumače ovaj XML dokument, ali nema smisla raspravljati o ovome jer je to pitanje izvan opsega rasprave o samom formatu. Štaviše, ako dokument učinite vidljivim u pretraživaču tako što ćete mu priložiti kaskadni stilski list, vidjet ćete da se elementi rječnika pojavljuju određenim redoslijedom i ni u kojem drugom.

Drugim riječima, rečnik (komad strukturiranih podataka) se može pretvoriti u n razni mogući dokumenti (u XML, PDF, papir, itd.), gdje n - broj mogućih kombinacija elemenata u rječniku, a ostale moguće varijable još nismo uzeli u obzir.

Međutim, također slijedi da ako želite prenijeti samo podatke, onda korištenje mašinski čitljivog dokumenta za to neće biti učinkovito. Koristi model, koji je u ovom slučaju suvišan, samo će stati na put. Osim toga, da biste izdvojili izvorne podatke, morat ćete napisati program. Gotovo da nema smisla koristiti XML za nešto što u nekom trenutku neće biti formatirano kao dokument (recimo, korištenjem CSS-a ili XSLT-a, ili oboje), budući da je to glavni (ako ne i jedini) razlog za to. na model dokumenta.

Štaviše, pošto XML nema koncept brojeva (ili logičkih izraza, ili drugih tipova podataka), svi brojevi predstavljeni u ovom formatu smatraju se samo dodatnim tekstom. Da biste izdvojili podatke, shema i njen odnos sa odgovarajućim podacima koji se izražavaju moraju biti poznati. Također morate znati kada, na osnovu konteksta, određeni tekstualni element predstavlja broj i treba ga pretvoriti u broj, itd.

Stoga se proces izdvajanja podataka iz XML dokumenata ne razlikuje toliko od procesa prepoznavanja skeniranih dokumenata koji sadrže, na primjer, tabele koje formiraju mnogo stranica numeričkih podataka. Da, u principu je to moguće, ali to nije najoptimalniji način, osim u krajnjoj nuždi, kada apsolutno nema drugih opcija. Razumno rješenje je jednostavno pronaći digitalnu kopiju originalnih podataka koja nije ugrađena u model dokumenta koji kombinuje podatke sa njihovim specifičnim tekstualnim prikazom.

Međutim, uopšte me ne čudi što je XML popularan u poslovanju. Razlog tome je upravo to što je format dokumenta (na papiru) razumljiv i poznat poslovnom okruženju, a oni žele i dalje koristiti poznati i razumljiv model. Iz istog razloga, preduzeća prečesto koriste PDF dokumente umjesto mašinski čitljivih formata – jer su i dalje vezani za koncept štampane stranice određene fizičke veličine. Ovo se čak odnosi i na dokumente za koje je malo vjerovatno da će ikada biti odštampani (na primjer, PDF od 8000 stranica dokumentacije registra). Sa ove tačke gledišta, upotreba XML-a u poslovanju je u suštini manifestacija skeuomorfizma. Ljudi razumeju metaforičku ideju štampane stranice ograničene veličine i razumeju kako da kreiraju poslovne procese na osnovu štampanih dokumenata. Ako je to vaš vodič, dokumenti bez ograničenja fizičke veličine koji su mašinski čitljivi – XML dokumenti – predstavljaju inovaciju dok su poznati i udobni pandan dokumentu. To ih ne sprečava da ostanu netačan i previše skeuomorfan način predstavljanja podataka.

Do danas, jedine XML šeme za koje znam i koje mogu nazvati valjanom upotrebom formata su XHTML i DocBook.

izvor: www.habr.com

Dodajte komentar