XML se gotovo uvijek koristi ne prema namjeni

XML se gotovo uvijek koristi ne prema namjeni
XML je jezik koji je izumljen 1996. godine. Čim je nastao, ljudi su odmah počeli pogrešno shvaćati njegove mogućnosti primjene, a za one svrhe kojima su ga pokušavali prilagoditi, nije bio najbolji izbor.

Neće biti pretjerano reći da je dominantna većina XML shema koje sam vidio predstavljala nerazumne ili pogrešne primjene XML-a. Štoviše, takva primjena XML-a svjedoči o temeljnim nerazumijevanjima onoga što XML zapravo jest.

XML je jezik za označavanje. To nije format podataka.. U većini XML shema ovo razdvajanje očito nije uzeto u obzir, brkajući XML s formatom podataka, što je na kraju značilo pogrešan izbor XML-a, jer je zapravo bio potreban format podataka.

Ako se ne ulazi u detalje, XML je najbolje prilagođen za označavanje blokova teksta s strukturom i metapodacima. Ako vaš primarni cilj nije rad s blokom teksta, izbor XML-a vjerojatno neće biti opravdan.

S ove točke gledišta postoji jednostavan način da se provjeri koliko dobro je izrađena XML shema. Uzmimo, na primjer, dokument u predviđenoj shemi i uklonimo sve oznake i atribute. Ako ono što preostane nema smisla (ili ako ostane prazan redak), tada je ili vaša shema loše konstruirana, ili jednostavno niste trebali koristiti XML.

Sljedeće ću navesti nekoliko najčešćih primjera pogrešno konstruiranih shema.

Ovdje vidimo primjer nerazumne i čudne (iako prilično rasprostranjene) pokušaje izražavanja jednostavnog rječnika 'ključ-vrijednost' pomoću XML-a. Ako uklonimo sve oznake i atribute, ostaje prazan redak. U suštini, ovaj dokument predstavlja, koliko god to apsurdno zvučalo, semantičku oznaku praznog retka.

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

Što je još gore, ovdje nemamo samo semantičku anotaciju praznog niza kao ekstravagantan način izražavanja rječnika - ovaj put je "riječnik" izravno kodiran kao atributi korijenskog elementa. Zbog toga postavljeni skup imena atributa na elementu postaje neodređen i dinamičan. Štoviše, odavde je jasno da je sve što je autor zapravo želio izraziti jednostavna sintaksa "ključ-vrijednost", no umjesto toga donio je apsolutno čudnu odluku da koristi XML, prisilno određujući upotrebu jednog praznog elementa samo kao prefiks za korištenje sintakse atributa. Ovakvi obrasci se često sreću.

John
  London

Ovo je već nešto bolje, ali sada su ključevi iz nekog razloga metapodaci, dok vrijednosti nisu. Vrlo čudan pogled na rječnike. Ako se uklone svi tagovi i atributi, polovica informacija će se izgubiti.

Ispravno izražavanje rječnika u XML-u izgledat će otprilike ovako:

Name
    John
  
  
    City
    London

Ali ako su ljudi donijeli čudnu odluku da koriste XML kao format podataka i zatim s njim organiziraju rječnik, moraju shvatiti da ono što rade nije primjereno i nije praktično. Često dizajneri pogrešno biraju XML za izradu svojih aplikacija. Ali još češće pogoršavaju situaciju besmislenom primjenom XML-a u nekom od gore opisanih oblika, ignorirajući činjenicu da XML za to jednostavno nije prikladan.

Najgora XML shema? Usput, nagrada za najgoru XML shemu koju sam ikada vidio, dobiva format datoteke konfiguracije automatskog izdvajanja resursa za IP telefone Polycom. Takve datoteke zahtijevaju preuzimanje XML datoteka zahtjeva putem TFTP-a, koje… Ukratko, evo odlomka 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="..." />

To nije nečija neuspjela šala. I nije moja izmišljotina:

  • Elementi se jednostavno koriste kao prefiks za pridruživanje atributa koji sami po sebi imaju hijerarhijska imena.
  • Ako treba pridružiti vrednosti više instancama zapisa određene vrste, zato je potrebno koristiti imena atributa, u kojima postoje indeksi.
  • Pored toga, atributi koji počinju s softkey., treba postaviti na elemente <softkey/>, atributi koji počinju s feature., treba postaviti na elemente <feature/> i slično, iako to izgleda potpuno suvišno i na prvi pogled besmisleno.
  • I, na kraju, ako ste se nadali da prvi deo imena atributa uvek odgovara imenu elementa — ništa od toga! Na primer, atributi up. mora biti pridruženi <userpreferences/>. Redosled pridruživanja imena atributa elementima je proizvoljan, gotovo potpuno slobodan.

Dokumenti ili podaci. Povremeno neko radi apsolutno čudne stvari pokušavajući uporediti XML i JSON, — i time pokazuje da ne razume ni jedno ni drugo. XML je jezik za opisivanje dokumenata. JSON je format strukturiranih podataka, tako da ih upoređivati je isto kao pokušavati uporediti toplo s mekim.

Razumeti ovo pomoći će pojam razlike između dokumenata i podataka. Kao analogiju, XML možemo uslovno uzeti kao mašinski čitljiv dokument. Iako je namenjen za čitanje od strane mašine, metaforički se odnosi na dokumente, te iz te perspektive zapravo je uporediv s PDF dokumentima, koji najčešće nisu mašinski čitljivi.

Na primer, u XML-u redosled elemenata je značajan. A u JSON-u redosled parova "ključ-vrednost" unutar objekata nema smisla i nije definisan. Ako želite dobiti neuredni rečnik parova "ključ-vrednost", stvarni redosled u kojem se elementi nalaze u ovom fajlu nije važan. Ali možete formirati mnogo različitih dokumenata, budući da u dokumentu postoji određeni redosled. Metaforički, to je analogija dokumentu na papiru, iako on nema fizičke dimenzije za razliku od štampanog dokumenta ili PDF fajla.

U mom primjeru pravilnog prikaza rječnika na jeziku XML prikazan je redoslijed elemenata u rječniku, za razliku od prikaza na jeziku JSON. Ne mogu ignorirati ovaj redoslijed: takva linearost inherentna je modelu dokumenata i formatu XML-a. Netko bi mogao odlučiti ignorirati redoslijed prilikom interpretacije ovog XML dokumenta, ali rasprava o tome je besmislena jer ovo pitanje izlazi iz okvira rasprave o formatu. Štoviše, ako dokument učinite preglednim u pregledniku povezujući ga s kaskadnom stilskom tablicom, vidjet ćete da elementi rječnika slijede u određenom redoslijedu i ni na koji drugi način.

Drugim riječima, rječnik (fragment strukturiranih podataka) može biti transformiran u n različite moguće dokumente (u formatu XML, PDF, na papiru itd.), gdje n — broj mogućih kombinacija elemenata u rječniku, a to još nismo uzeli u obzir druge moguće varijable.

Uz to, iz ovoga također slijedi da ako želite prenijeti samo podatke, korištenje mašinski čitljivog dokumenta neće biti učinkovito. Koristi se model koji je u ovom slučaju suvišan, on će samo smetati. Osim toga, da biste izvukli izvorne podatke, trebate napisati program. Teško da ima smisla koristiti XML za nešto što se u određenom trenutku neće formatirati kao dokument (recimo, pomoću CSS-a ili XSLT-a, ili oboje), budući da je to glavni (ako ne i jedini) razlog za pridržavanje modela dokumenta.

Štoviše, budući da u XML-u ne postoji pojam brojeva (ili booleovih izraza, ili drugih tipova podataka), svi brojevi predstavljeni u ovom formatu smatraju se samo dodatnim tekstom. Za ekstrakciju podataka potrebno je poznavati shemu i njezinu povezanost s odgovarajućim izraženim podacima. Također je potrebno znati kada na temelju konteksta određeni element teksta predstavlja broj i kada ga treba transformirati u broj itd.

Dakle, proces ekstrakcije podataka iz XML dokumenata nije mnogo drugačiji od procesa prepoznavanja skeniranih dokumenata koji sadrže, na primjer, tablice s velikim brojem stranica numeričkih podataka. Da, to je generalno moguće, ali to nije najoptimalniji način - osim u slučaju kada ne postoje drugi izbori. Razumno rješenje bilo bi jednostavno pronaći digitalnu kopiju originalnih podataka, koja nije vezana uz model dokumenta, gdje su podaci spojeni s njihovim specifičnim tekstualnim prikazom.

Stoga me ne čudi što je XML popularan u poslovanju. Razlog tomu je upravo taj što je format dokumenata (na papiru) jasan i poznat poslovanju, i oni žele nastaviti koristiti ovaj poznat i razumljiv model. Iz istog razloga, u poslovanju se prečesto koriste PDF dokumenti umjesto formatima koji su pogodniji za obradu strojem - jer su i dalje vezani uz koncept tiskane stranice s određenom fizičkom veličinom. Ovo se odnosi čak i na one dokumente koji vjerojatno nikada neće biti otisnuti (na primjer, PDF datoteka dokumentacije registra od 8000 stranica). S te strane, korištenje XML-a u poslovanju u suštini je manifestacija skevomorfizma. Ljudi razumiju metaforičnu ideju tiskane stranice ograničene veličine i shvaćaju kako stvarati poslovne procese na temelju tiskanih dokumenata. Ako je to vaš orijentir, dokumenti bez ograničene fizičke veličine, koji su mašinski čitljivi - XML dokumenti - predstavljaju inovaciju, istovremeno sući poznati i udobni analog dokumentu. Što im ne smeta da ostanu netočni i previše skevomorfni način prikazivanja podataka.

Do danas su jedine XML sheme za koje znam da ih mogu smatrati ispravnom primjenom ovog formata XHTML i DocBook.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster