XML se gotovo uvijek zlorabi

XML se gotovo uvijek zlorabi
XML jezik je izumljen 1996. Tek što se pojavio, već su se počele krivo shvaćati mogućnosti njegove primjene, 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 bila neprikladna ili netočna upotreba XML-a. Štoviše, ova upotreba XML-a pokazala je temeljno nerazumijevanje o tome što je zapravo XML.

XML je označni jezik. Ovo nije format podataka. Većina XML shema izričito je previdjela ovu razliku, brkajući XML s formatom podataka, što u konačnici rezultira pogreškom u odabiru XML-a jer je to format podataka koji je zapravo potreban.

Ne ulazeći u previše detalja, 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.

S ove točke gledišta, postoji jednostavan način da provjerite koliko je dobro napravljena XML shema. Uzmimo kao primjer dokument u predviđenoj shemi i iz njega uklonimo sve oznake i atribute. Ako ono što je ostalo nema smisla (ili ako je ostao prazan redak), tada ili vaša shema nije ispravno izgrađena ili jednostavno niste trebali koristiti XML.

U nastavku ću dati neke od najčešćih primjera neispravno konstruiranih strujnih krugova.

<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 ćete s praznim redom. U suštini, ovaj dokument je, koliko god to apsurdno zvučalo, semantička anotacija praznog retka.

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

Da stvari budu još gore, ovdje nemamo samo semantičku oznaku praznog niza kao ekstravagantan način izražavanja rječnika - ovaj put je "rječnik" izravno kodiran kao atributi korijenskog elementa. Ovo čini dati skup imena atributa na elementu nedefiniranim i dinamičnim. Štoviše, pokazuje da je sve što je autor stvarno želio izraziti bila jednostavna sintaksa ključ-vrijednost, ali je umjesto toga donio apsolutno bizarnu odluku da primijeni XML, prisilivši korištenje jednog praznog elementa jednostavno kao prefiksa za korištenje sintakse atributa. I vrlo često nailazim na takve sheme.

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

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

Ispravan rječnički izraz u XML-u izgledao bi 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 donijeli čudnu odluku da koriste XML kao format podataka i zatim ga koriste za organiziranje vokabulara, onda bi trebali shvatiti da je ono što rade neprikladno i neprikladno. Također je uobičajeno da dizajneri pogrešno odaberu XML za izradu svojih aplikacija. Ali još češće pogoršavaju stvari besmislenim korištenjem XML-a u jednom od gore opisanih oblika, zanemarujući činjenicu da XML za to jednostavno nije prikladan.

Najgora XML shema? Usput, nagrada za najgora XML shema koju sam ikad vidio, Dobiva format konfiguracijske datoteke za automatsko dodjeljivanje za telefone Polycom IP telefonije. Takve datoteke zahtijevaju preuzimanje datoteka XML zahtjeva putem TFTP-a, što... Općenito, ovdje je izvadak iz jedne takve datoteke:

<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 prefiks za pridavanje atributa, koji sami imaju hijerarhijska imena.
  • Ako želite dodijeliti vrijednosti više instanci određene vrste zapisa, morate koristiti nazive atributa da to učinite. koji imaju indekse.
  • Osim toga, atributi koji počinju s softkey., moraju biti postavljeni na elemente <softkey/>, atributi koji počinju s feature., moraju biti postavljeni na elemente <feature/> itd., unatoč tome što izgleda potpuno nepotrebno i na prvi pogled besmisleno.
  • I na kraju, ako ste se nadali da će prva komponenta imena atributa uvijek biti ista kao i ime elementa - ništa slično! Na primjer, atributi up. moraju biti priloženi <userpreferences/>. Redoslijed pripajanja imena atributa elementima je proizvoljan, gotovo u potpunosti.

Dokumenti ili podaci. S vremena na vrijeme netko učini nešto potpuno čudno pokušavajući usporediti XML i JSON—i time pokazujući da ni jedno ni drugo ne razumiju. XML je jezik za označavanje dokumenata. JSON je strukturirani format podataka, pa je njihova međusobna usporedba poput pokušaja usporedbe toplog s mekim.

Koncept razlike između dokumenata i podataka. Kao analog XML-a možemo uvjetno uzeti strojno čitljiv dokument. Iako je namijenjen da bude strojno čitljiv, metaforički se odnosi na dokumente, te je s te točke gledišta zapravo usporediv s PDF dokumentima koji najčešće nisu strojno čitljivi.

Na primjer, u XML-u bitan je redoslijed elemenata. Ali u JSON-u, redoslijed parova ključ-vrijednost unutar objekata je besmislen i nedefiniran. Ako želite dobiti neuređeni rječnik parova ključ-vrijednost, stvarni redoslijed u kojem se elementi pojavljuju u toj datoteci nije bitan. Ali iz tih podataka možete oblikovati mnogo različitih vrsta podataka. dokumenata, jer postoji određeni red u dokumentu. Metaforički, to je analogno dokumentu na papiru, iako nema fizičke dimenzije, za razliku od ispisa ili PDF datoteke.

Moj primjer ispravne reprezentacije XML rječnika pokazuje redoslijed elemenata u rječniku, za razliku od JSON reprezentacije. Ne mogu zanemariti ovaj redoslijed: ova je linearnost svojstvena modelu dokumenta i XML formatu. Neki bi mogli odlučiti ignorirati redoslijed kada tumače ovaj XML dokument, ali nema smisla raspravljati o tome budući da je pitanje izvan dosega rasprave o samom formatu. Štoviše, ako dokument učinite vidljivim u pregledniku tako da mu priložite kaskadnu stilsku tablicu, vidjet ćete da se elementi rječnika pojavljuju određenim redoslijedom i nikakvim drugim.

Drugim riječima, rječnik (dio strukturiranih podataka) može se pretvoriti u n razne moguće dokumente (u XML, PDF, na papiru 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, korištenje strojno čitljivog dokumenta za to neće biti učinkovito. Koristi model, koji je u ovom slučaju suvišan, samo će smetati. Osim toga, da biste izdvojili izvorne podatke, morat ćete napisati program. Teško da ima 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), jer je to glavni (ako ne i jedini) razlog za to. pridržavati se prema modelu dokumenta.

Štoviše, budući da XML nema koncept brojeva (ili Booleovih izraza, ili drugih tipova podataka), svi brojevi predstavljeni u ovom formatu smatraju se samo dodatnim tekstom. Za ekstrahiranje podataka mora se poznavati shema i njezin odnos s odgovarajućim podacima koji se izražavaju. Također morate znati kada, na temelju konteksta, određeni element teksta predstavlja broj i treba ga pretvoriti u broj, itd.

Stoga se postupak izdvajanja podataka iz XML dokumenata ne razlikuje toliko od procesa prepoznavanja skeniranih dokumenata koji sadrže, na primjer, tablice koje tvore mnogo stranica numeričkih podataka. Da, to je načelno moguće učiniti, ali to nije najoptimalniji način, osim u krajnjem slučaju, kada nema apsolutno nikakvih drugih opcija. Razumno rješenje je jednostavno pronaći digitalnu kopiju izvornih podataka koja nije ugrađena u model dokumenta koji kombinira podatke s njihovim specifičnim tekstualnim prikazom.

Ipak, uopće me ne čudi što je XML popularan u poslovanju. Razlog tome je upravo taj što je format dokumenta (na papiru) razumljiv i poznat poslovanju, te žele i dalje koristiti poznati i razumljiv model. Iz istog razloga, tvrtke prečesto koriste PDF dokumente umjesto više strojno čitljivih formata - jer su još uvijek vezani uz koncept ispisane stranice s određenom fizičkom veličinom. To se čak odnosi i na dokumente za koje je malo vjerojatno da će ikada biti ispisani (na primjer, PDF od 8000 stranica registracijske dokumentacije). S ove točke gledišta, korištenje XML-a u poslovanju je u biti manifestacija skeuomorfizma. Ljudi razumiju metaforičku ideju ispisane stranice ograničene veličine i razumiju kako kreirati poslovne procese temeljene na ispisanim dokumentima. Ako je to vaš vodič, dokumenti bez ograničenja fizičke veličine koji su strojno čitljivi—XML dokumenti—predstavljaju inovaciju dok su poznat i udoban pandan dokumentu. To ih ne sprječava da ostanu netočan i pretjerano skeuomorfan način prezentiranja podataka.

Do danas, jedine XML sheme za koje znam, a koje doista mogu nazvati valjanom upotrebom formata su XHTML i DocBook.

Izvor: www.habr.com

Dodajte komentar