XML deyarli har doim noto'g'ri ishlatiladi

XML deyarli har doim noto'g'ri ishlatiladi
XML tili 1996 yilda ixtiro qilingan. U paydo bo'lishi bilanoq, uni qo'llash imkoniyatlari allaqachon noto'g'ri tushunila boshlagan va ular uni moslashtirishga urinayotgan maqsadlar uchun bu eng yaxshi tanlov emas edi.

Men ko'rgan XML sxemalarining aksariyati XML dan noto'g'ri yoki noto'g'ri foydalanishdir, desam mubolag'a bo'lmaydi. Bundan tashqari, XML-dan bunday foydalanish XML nima haqida ekanligini tubdan noto'g'ri tushunishni ko'rsatdi.

XML belgilash tilidir. Bu maʼlumotlar formati emas. Aksariyat XML sxemalari bu farqni ochiqchasiga e'tibordan chetda qoldirib, XMLni ma'lumotlar formati bilan chalkashtirib yubordi, natijada bu XMLni tanlashda xatolikka olib keladi, chunki bu aslida zarur bo'lgan ma'lumotlar formati.

Ortiqcha tafsilotga kirmasdan, XML struktura va metama'lumotlarga ega matn bloklariga izoh berish uchun eng mos keladi. Agar sizning asosiy maqsadingiz matn bloki bilan ishlash bo'lmasa, XML ni tanlashni oqlash dargumon.

Shu nuqtai nazardan, XML sxemasi qanchalik yaxshi tuzilganligini tekshirishning oddiy usuli mavjud. Keling, misol sifatida mo'ljallangan sxemadagi hujjatni olaylik va undan barcha teglar va atributlarni olib tashlaymiz. Agar qolgan narsa mantiqiy bo'lmasa (yoki bo'sh qator qolsa), sizning sxemangiz to'g'ri tuzilmagan yoki siz XML dan foydalanmasligingiz kerak edi.

Quyida men noto'g'ri tuzilgan sxemalarning eng keng tarqalgan misollarini keltiraman.

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

Bu erda biz XMLda oddiy kalit-qiymat lug'atini ifodalashga asossiz va g'alati (juda keng tarqalgan) urinish misolini ko'ramiz. Agar siz barcha teglar va atributlarni olib tashlasangiz, siz bo'sh qator bilan qolasiz. Aslida, bu hujjat qanchalik bema'ni tuyulmasin, bo'sh qatorning semantik izohidir.

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

Vaziyatni yomonroq qilish uchun, biz bu yerda lug‘atni ifodalashning ekstravagant usuli sifatida bo‘sh satrning semantik izohiga ega emasmiz – bu safar “lug‘at” to‘g‘ridan-to‘g‘ri ildiz elementining atributlari sifatida kodlangan. Bu elementda berilgan atribut nomlari to'plamini aniqlanmagan va dinamik qiladi. Bundan tashqari, bu shuni ko'rsatadiki, muallif haqiqatan ham oddiy kalit-qiymat sintaksisini ifodalamoqchi bo'lgan, lekin buning o'rniga u XMLni qo'llash bo'yicha mutlaqo g'alati qaror qabul qilgan va atribut sintaksisidan foydalanish uchun bitta bo'sh elementni oddiygina prefiks sifatida ishlatishga majbur qilgan. Va men bunday sxemalarga tez-tez duch kelaman.

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

Bu yaxshiroq narsa, lekin hozir negadir kalitlar metadata, qiymatlar esa yo'q. Lug'atlarga juda g'alati qarash. Agar siz barcha teglar va atributlarni olib tashlasangiz, ma'lumotlarning yarmi yo'qoladi.

XML-dagi to'g'ri lug'at ifodasi quyidagicha ko'rinadi:

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

Ammo agar odamlar XML dan ma'lumotlar formati sifatida foydalanishga g'alati qaror qabul qilgan bo'lsa va undan so'ng lug'atni tartibga solish uchun foydalansalar, ular qilayotgan ishlari nomaqbul va qulay emasligini tushunishlari kerak. Dizaynerlar o'zlarining ilovalarini yaratish uchun XML ni noto'g'ri tanlashlari ham odatiy holdir. Ammo ko'pincha ular XML-dan yuqorida tavsiflangan shakllardan birida ma'nosiz foydalanish orqali vaziyatni yomonlashtiradi, XML buning uchun mos emasligini e'tiborsiz qoldiradi.

Eng yomon XML sxemasi? Aytgancha, mukofot Men ko'rgan eng yomon XML sxemasi, Polycom IP-telefoniya telefonlari uchun avtomatik sozlash konfiguratsiya fayl formatini oladi. Bunday fayllar TFTP orqali XML so'rov fayllarini yuklab olishni talab qiladi, bu ... Umuman olganda, mana shunday fayllardan bir parcha:

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

Bu kimningdir yomon hazili emas. Va bu mening ixtirom emas:

  • elementlar oddiygina atributlarni biriktirish uchun prefiks sifatida ishlatiladi, ularning o'zlari ierarxik nomlarga ega.
  • Agar ma'lum bir yozuv turining bir nechta nusxalariga qiymatlarni belgilashni istasangiz, buni amalga oshirish uchun atribut nomlaridan foydalanishingiz kerak. indekslari bor.
  • Bundan tashqari, atributlar bilan boshlanadi softkey., elementlarga joylashtirilishi kerak <softkey/>, bilan boshlanadigan atributlar feature., elementlarga joylashtirilishi kerak <feature/> va hokazo, bu mutlaqo keraksiz va birinchi qarashda ma'nosiz ko'rinishiga qaramay.
  • Va nihoyat, agar siz atribut nomining birinchi komponenti har doim element nomi bilan bir xil bo'ladi deb umid qilgan bo'lsangiz - shunga o'xshash narsa yo'q! Masalan, atributlar up. biriktirilishi kerak <userpreferences/>. Elementlarga atribut nomlarini qo'shish tartibi o'zboshimchalik bilan, deyarli to'liq.

Hujjatlar yoki ma'lumotlar. Vaqti-vaqti bilan kimdir XML va JSONni solishtirishga urinish orqali mutlaqo g'alati ishlarni qiladi va shu bilan ular ham tushunmasligini ko'rsatadi. XML - bu hujjatlarni belgilash tili. JSON tuzilgan ma'lumotlar formatidir, shuning uchun ularni bir-biri bilan solishtirish iliq bilan yumshoq solishtirishga o'xshaydi.

O'rtasidagi farq tushunchasi hujjatlar va ma'lumotlar. XML ning analogi sifatida biz shartli ravishda mashinada o'qiladigan hujjatni olishimiz mumkin. U mashinada o'qish uchun mo'ljallangan bo'lsa-da, u ma'noda hujjatlarga ishora qiladi va shu nuqtai nazardan qaraganda, ko'pincha mashinada o'qilmaydigan PDF hujjatlari bilan solishtirish mumkin.

Masalan, XMLda elementlarning tartibi muhim. Ammo JSONda ob'ektlar ichidagi kalit-qiymat juftliklarining tartibi ma'nosiz va aniqlanmagan. Agar siz kalit-qiymat juftlarining tartibsiz lug'atini olishni istasangiz, ushbu fayldagi elementlarning haqiqiy tartibi muhim emas. Ammo siz ushbu ma'lumotlardan juda ko'p turli xil ma'lumotlarni yaratishingiz mumkin. hujjatlar, chunki hujjatda ma'lum bir tartib mavjud. Majoziy ma'noda, u qog'ozdagi hujjatga o'xshaydi, lekin u bosma yoki PDF faylidan farqli o'laroq, jismoniy o'lchamlarga ega emas.

To'g'ri XML lug'at ko'rinishidagi misolim JSON ko'rinishidan farqli ravishda lug'atdagi elementlarning tartibini ko'rsatadi. Men bu tartibni e'tiborsiz qoldirolmayman: bu chiziqlilik hujjat modeli va XML formatiga xosdir. Ba'zilar ushbu XML hujjatini sharhlashda tartibni e'tiborsiz qoldirishlari mumkin, ammo bu haqda bahslashishning ma'nosi yo'q, chunki muammo formatning o'zi muhokama qilish doirasidan tashqarida. Bundan tashqari, agar siz hujjatni kaskadli uslublar jadvalini biriktirish orqali brauzerda ko'rish imkoniyatini yaratsangiz, lug'at elementlari ma'lum bir tartibda va boshqa hech qanday tartibda paydo bo'lmasligini ko'rasiz.

Boshqacha qilib aytganda, lug'at (tuzilgan ma'lumotlarning bir qismi) ga aylantirilishi mumkin n turli mumkin bo'lgan hujjatlar (XML, PDF, qog'oz va boshqalar), qaerda n - lug'atdagi elementlarning mumkin bo'lgan birikmalari soni va biz boshqa mumkin bo'lgan o'zgaruvchilarni hali hisobga olmadik.

Biroq, bundan kelib chiqadiki, agar siz faqat ma'lumotlarni uzatmoqchi bo'lsangiz, buning uchun mashinada o'qiladigan hujjatdan foydalanish samarali bo'lmaydi. U modelni ishlatadi, bu holda u faqat to'sqinlik qiladi. Bundan tashqari, manba ma'lumotlarini olish uchun siz dastur yozishingiz kerak bo'ladi. Hujjat sifatida formatlanmaydigan (aytaylik, CSS yoki XSLT yoki ikkalasi) biror narsa uchun XML dan foydalanishning deyarli ma'nosi yo'q, chunki bu amal qilishning asosiy (agar yagona bo'lmasa) sababidir hujjat modeliga.

Bundan tashqari, XMLda raqamlar (yoki mantiqiy ifodalar yoki boshqa ma'lumotlar turlari) tushunchasi yo'qligi sababli, ushbu formatda taqdim etilgan barcha raqamlar faqat qo'shimcha matn hisoblanadi. Ma'lumotlarni ajratib olish uchun sxema va uning tegishli ma'lumotlar bilan aloqasi ma'lum bo'lishi kerak. Bundan tashqari, kontekstga asoslanib, ma'lum bir matn elementi qachon raqamni ifodalashini va raqamga aylantirilishi kerakligini va hokazolarni bilishingiz kerak.

Shunday qilib, XML hujjatlaridan ma'lumotlarni olish jarayoni, masalan, raqamli ma'lumotlarning ko'p sahifalarini tashkil etuvchi jadvallarni o'z ichiga olgan skanerlangan hujjatlarni tanib olish jarayonidan unchalik farq qilmaydi. Ha, printsipial jihatdan buni qilish mumkin, ammo bu eng maqbul yo'l emas, faqat boshqa variantlar bo'lmaganda, oxirgi chora sifatida. Ma'lumotni o'ziga xos matn tasviri bilan birlashtirgan hujjat modeliga kiritilmagan dastlabki ma'lumotlarning raqamli nusxasini oddiygina topish oqilona echimdir.

XML biznesda mashhur ekanligi meni ajablantirmaydi. Buning sababi shundaki, hujjat formati (qog'ozda) biznes uchun tushunarli va tanish bo'lib, ular tanish va tushunarli modeldan foydalanishni davom ettirmoqchi. Xuddi shu sababga ko'ra, korxonalar ko'pincha mashinada o'qiladigan formatlar o'rniga PDF hujjatlaridan foydalanadilar - chunki ular hali ham ma'lum bir jismoniy o'lchamdagi bosma sahifa tushunchasi bilan bog'liq. Bu hatto chop etilishi mumkin bo'lmagan hujjatlarga ham tegishli (masalan, ro'yxatga olish hujjatlarining 8000 sahifali PDF-fayl). Shu nuqtai nazardan qaraganda, biznesda XML dan foydalanish mohiyatan skeuomorfizmning namoyonidir. Odamlar cheklangan o'lchamdagi bosma sahifaning metaforik g'oyasini tushunishadi va bosma hujjatlar asosida biznes jarayonlarini qanday yaratishni tushunishadi. Agar bu sizning yo'riqnomangiz bo'lsa, kompyuterda o'qilishi mumkin bo'lgan jismoniy o'lchamdagi cheklovlarsiz hujjatlar - XML ​​hujjatlari - tanish va qulay hujjat hamkasbi bo'lgan holda innovatsiyani ifodalaydi. Bu ularning ma'lumotlarni taqdim etishning noto'g'ri va haddan tashqari skeuomorfik usuli bo'lib qolishiga to'sqinlik qilmaydi.

Bugungi kunga kelib, men formatdan haqiqiy foydalanish deb atashim mumkin bo'lgan yagona XML sxemalari bu XHTML va DocBook.

Manba: www.habr.com

a Izoh qo'shish