
Lugha ya XML ilivumbuliwa mwaka wa 1996. Mara tu ilipoonekana, uwezekano wa maombi yake ulikuwa tayari umeanza kutoeleweka, na kwa madhumuni ambayo walikuwa wakijaribu kuirekebisha, haikuwa chaguo bora zaidi.
Sio kutia chumvi kusema kwamba idadi kubwa ya schema za XML ambazo nimeona sio matumizi sahihi au sahihi ya XML. Zaidi ya hayo, matumizi haya ya XML yalionyesha kutokuelewana kwa kimsingi kwa XML ilihusu nini.
XML ni lugha ya alama. Huu si umbizo la data. Miradi mingi ya XML imepuuza kwa uwazi tofauti hii, ikichanganya XML na umbizo la data, ambalo hatimaye husababisha makosa katika kuchagua XML kwa sababu ni umbizo la data ambalo kwa hakika linahitajika.
Bila kuingia kwa undani zaidi, XML inafaa zaidi kwa vizuizi vya maandishi vyenye muundo na metadata. Ikiwa lengo lako kuu si kufanya kazi na kizuizi cha maandishi, kuchagua XML kuna uwezekano wa kuhesabiwa haki.
Kwa mtazamo huu, kuna njia rahisi ya kuangalia jinsi schema ya XML inafanywa vizuri. Wacha tuchukue kama mfano hati katika schema iliyokusudiwa na tuondoe vitambulisho na sifa zote kutoka kwayo. Ikiwa kile kilichosalia hakina maana (au ikiwa kuna mstari tupu uliosalia), basi labda schema yako haijajengwa kwa usahihi au haukupaswa kutumia XML.
Hapo chini nitatoa mifano ya kawaida ya mizunguko iliyojengwa vibaya.
<roоt>
<item name="name" value="John" />
<item name="city" value="London" />
</roоt>Hapa tunaona mfano wa jaribio lisilo na msingi na la kushangaza (ingawa ni la kawaida sana) la kuelezea kamusi rahisi ya ufunguo wa thamani katika XML. Ukiondoa lebo na sifa zote, utasalia na safu mlalo tupu. Kimsingi, hati hii, bila kujali jinsi inaweza kusikika, ni maelezo ya kisemantiki ya mstari tupu.
<root name="John" city="London" />Ili kufanya mambo kuwa mabaya zaidi, hatuna maelezo ya kisemantiki ya mfuatano tupu hapa kama njia ya kupita kiasi ya kueleza kamusi - wakati huu "kamusi" imesimbwa moja kwa moja kama sifa za kipengele cha msingi. Hii hufanya seti iliyotolewa ya majina ya sifa kwenye kipengele kutofafanuliwa na yenye nguvu. Kwa kuongezea, inaonyesha kuwa mwandishi wote alitaka kuelezea ilikuwa sintaksia rahisi ya ufunguo, lakini badala yake alifanya uamuzi wa kushangaza wa kutumia XML, na kulazimisha matumizi ya kitu kimoja tupu kama kiambishi awali cha kutumia sintaksia ya sifa. Na mimi hukutana na miradi kama hii mara nyingi sana.
<roоt>
<item key="name">John</item>
<item key="city">London</item>
</roоt>Hili ni jambo bora, lakini sasa kwa sababu fulani funguo ni metadata na maadili sio. Mtazamo wa ajabu sana katika kamusi. Ukiondoa lebo na sifa zote, nusu ya maelezo yatapotea.
Usemi sahihi wa kamusi katika XML ungeonekana kitu kama hiki:
<roоt>
<item>
<key>Name</key>
<value>John</value>
</item>
<item>
<key>City</key>
<value>London</value>
</item>
</roоt>Lakini ikiwa watu wamefanya uamuzi wa ajabu wa kutumia XML kama umbizo la data na kisha kuitumia kupanga msamiati, basi wanapaswa kuelewa kwamba wanachofanya hakifai na si rahisi. Pia ni kawaida kwa wabunifu kuchagua XML kimakosa ili kuunda programu zao. Lakini mara nyingi zaidi, hufanya mambo kuwa mabaya zaidi kwa kutumia XML bila maana katika mojawapo ya fomu zilizoelezwa hapo juu, na kupuuza ukweli kwamba XML haifai kwa hili.
Schema Mbaya zaidi ya XML? Kwa njia, tuzo kwa schema mbaya zaidi ya XML ambayo nimewahi kuona, Hupata umbizo la usanidi wa utoaji wa kiotomatiki kwa simu za simu za IP za Polycom. Faili kama hizo zinahitaji kupakua faili za ombi za XML kupitia TFTP, ambayo... Kwa ujumla, hapa kuna dondoo kutoka kwa faili moja kama hiyo:
<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="..." />Huu sio utani mbaya wa mtu. Na huu sio uvumbuzi wangu:
- elementi hutumika tu kama kiambishi awali kuambatanisha sifa, ambazo zenyewe zina majina ya daraja.
- Ikiwa ungependa kukabidhi thamani kwa matukio mengi ya aina fulani ya rekodi, lazima utumie majina ya sifa kufanya hili. ambazo zina indexes.
- Kwa kuongeza, sifa zinazoanza na
softkey., lazima kuwekwa kwenye vipengele<softkey/>, sifa zinazoanza nafeature., lazima kuwekwa kwenye vipengele<feature/>nk, licha ya ukweli kwamba inaonekana kuwa haifai kabisa na kwa mtazamo wa kwanza haina maana. - Na mwishowe, ikiwa unatarajia kuwa sehemu ya kwanza ya jina la sifa daima itakuwa sawa na jina la kitu - hakuna kitu kama hicho! Kwa mfano, sifa
up.lazima kushikamana na<userpreferences/>. Mpangilio wa kuambatisha majina ya sifa kwa vipengele ni ya kiholela, karibu kabisa.
Nyaraka au data. Kila baada ya muda fulani, mtu hufanya jambo la ajabu kwa kujaribu kulinganisha XML na JSON—na hivyo kuonyesha kwamba hawaelewi pia. XML ni lugha ya kuweka alama kwenye hati. JSON ni muundo wa data, kwa hivyo kuzilinganisha na nyingine ni kama kujaribu kulinganisha joto na laini.
Dhana ya tofauti kati ya hati na data. Kama analogi ya XML, tunaweza kuchukua hati inayoweza kusomeka na mashine kwa masharti. Ingawa imekusudiwa kusomeka kwa mashine, inarejelea hati kwa njia ya sitiari, na kwa mtazamo huu kwa kweli inalinganishwa na hati za PDF, ambazo mara nyingi hazisomeki kwa mashine.
Kwa mfano, katika XML mpangilio wa vipengele ni muhimu. Lakini katika JSON, mpangilio wa jozi za thamani-msingi ndani ya vitu hauna maana na haujafafanuliwa. Ikiwa unataka kupata kamusi ambayo haijapangwa ya jozi za thamani-msingi, mpangilio halisi ambao vipengele vinaonekana katika faili hiyo haijalishi. Lakini unaweza kuunda aina nyingi tofauti za data kutoka kwa data hii. ya hati, kwa sababu kuna utaratibu fulani katika hati. Kisitiari, ni sawa na hati kwenye karatasi, ingawa haina vipimo vya kimwili, tofauti na chapa au faili ya PDF.
Mfano wangu wa uwakilishi sahihi wa kamusi ya XML unaonyesha mpangilio wa vipengele katika kamusi, kinyume na uwakilishi wa JSON. Siwezi kupuuza agizo hili: mstari huu uko katika muundo wa hati na umbizo la XML. Wengine wanaweza kuchagua kupuuza agizo wakati wa kutafsiri hati hii ya XML, lakini hakuna maana ya kubishana kuhusu hili kwa kuwa suala liko nje ya upeo wa mjadala wa umbizo lenyewe. Zaidi ya hayo, ikiwa utafanya hati ionekane kwenye kivinjari kwa kuambatisha karatasi ya mtindo wa kuachia, utaona kwamba vipengele vya kamusi vinaonekana kwa utaratibu fulani na hakuna mwingine.
Kwa maneno mengine, kamusi (kipande cha data iliyopangwa) inaweza kubadilishwa kuwa n nyaraka mbalimbali zinazowezekana (katika XML, PDF, karatasi, nk), wapi n - idadi ya mchanganyiko unaowezekana wa vipengele katika kamusi, na bado hatujazingatia vigezo vingine vinavyowezekana.
Hata hivyo, pia inafuata kwamba ikiwa unataka kuhamisha data pekee, basi kutumia hati inayoweza kusomeka kwa mashine kwa hili haitakuwa na ufanisi. Inatumia mfano, ambao katika kesi hii ni superfluous tu kupata njia. Kwa kuongeza, ili kutoa data ya chanzo, utahitaji kuandika programu. Hakuna hatua yoyote katika kutumia XML kwa kitu ambacho hakitaundwa kama hati wakati fulani (sema, kwa kutumia CSS au XSLT, au zote mbili), kwani hiyo ndio sababu kuu (ikiwa sio pekee) ya kufanya hivyo kwa mfano wa hati.
Zaidi ya hayo, kwa kuwa XML haina dhana ya nambari (au misemo ya Boolean, au aina zingine za data), nambari zote zinazowakilishwa katika umbizo hili huchukuliwa kuwa maandishi ya ziada. Ili kutoa data, schema na uhusiano wake na data inayolingana inayoonyeshwa lazima ijulikane. Pia unahitaji kujua ni lini, kwa kuzingatia muktadha, kipengele fulani cha maandishi kinawakilisha nambari na kinapaswa kubadilishwa kuwa nambari, nk.
Kwa hivyo, mchakato wa kutoa data kutoka kwa hati za XML sio tofauti sana na mchakato wa kutambua hati zilizochanganuliwa zilizo na, kwa mfano, meza zinazounda kurasa nyingi za data ya nambari. Ndio, inawezekana kufanya hivyo kwa kanuni, lakini hii sio njia bora zaidi, isipokuwa kama suluhisho la mwisho, wakati hakuna chaguzi zingine. Suluhisho la busara ni kupata tu nakala ya kidijitali ya data asili ambayo haijapachikwa katika muundo wa hati unaochanganya data na uwakilishi wake mahususi wa maandishi.
Hiyo inasemwa, hainishangazi hata kidogo kuwa XML ni maarufu katika biashara. Sababu ya hii ni kwa hakika kwamba muundo wa hati (kwenye karatasi) unaeleweka na unajulikana kwa biashara, na wanataka kuendelea kutumia mfano unaojulikana na unaoeleweka. Kwa sababu hiyo hiyo, biashara mara nyingi hutumia hati za PDF badala ya fomati zinazoweza kusomeka kwa mashine - kwa sababu bado zinahusishwa na dhana ya ukurasa uliochapishwa na saizi maalum ya mwili. Hii inatumika hata kwa hati ambazo haziwezekani kuchapishwa (kwa mfano, PDF ya kurasa 8000 ya hati za usajili). Kwa mtazamo huu, matumizi ya XML katika biashara kimsingi ni dhihirisho la skeuomorphism. Watu wanaelewa wazo la kitamathali la ukurasa uliochapishwa wa saizi ndogo, na wanaelewa jinsi ya kuunda michakato ya biashara kulingana na hati zilizochapishwa. Ikiwa huo ndio mwongozo wako, hati zisizo na vizuizi vya saizi halisi ambazo zinaweza kusomeka kwa mashine—hati za XML—zinawakilisha uvumbuzi huku zikiwa hati inayofahamika na yenye starehe. Hii haiwazuii kubaki njia isiyo sahihi na isiyo sahihi kupita kiasi ya kuwasilisha data.
Kufikia sasa, miundo ya XML pekee ninayojua ambayo ninaweza kuita matumizi halali ya umbizo ni XHTML na DocBook.
Chanzo: mapenzi.com
