XML bugungi kunda juda mashhur va moslashuvchan formatdir. Har bir dasturchi buni tushunishi kerak, bu shunchaki bo'lishi kerak. Bugungi kunda ko'plab texnologiyalar bog'langan, ular undan faol foydalanmoqdalar va zamonaviylari ham shular jumlasidandir.
Kirish
Salom, mening maqolamning aziz o'quvchilari. Darhol aytmoqchimanki, bu mening uchta maqolalar seriyamdagi birinchi maqola. Butun seriyaning asosiy maqsadi - har bir o'quvchini XML-ga o'tkazish va to'liq tushuntirish va tushunish bo'lmasa, hech bo'lmaganda asosiy fikrlar va narsalarni tushuntirib, unga yaxshi turtki berishdir. Butun tsikl bitta nominatsiya uchun bo'ladi - "Tafsilotlarga e'tibor" va 3 ta maqolaga bo'linish postlardagi belgilar chegarasiga mos kelish va ko'proq tushunish uchun katta hajmdagi materiallarni kichikroq qismlarga bo'lish uchun amalga oshiriladi. Birinchi maqola XMLning o'zi va uning nima ekanligiga, shuningdek XML fayllari uchun sxema yaratish usullaridan biri - DTDga bag'ishlanadi. Boshlash uchun, men hali XML bilan tanish bo'lmaganlar uchun kichik so'z aytmoqchiman: qo'rqishning hojati yo'q. XML unchalik murakkab emas va uni har qanday dasturchi tushunishi kerak, chunki u bugungi kunda siz xohlagan turli xil ma'lumotlarni saqlash uchun juda moslashuvchan, samarali va ommabop fayl formatidir. XML Ant, Maven, Springda qo'llaniladi. Har qanday dasturchi XML tilini bilishi kerak. Endi sizda kuch va motivatsiya to'plangan bo'lsa, o'rganishni boshlaylik. Men barcha materiallarni iloji boricha sodda tarzda joylashtirishga harakat qilaman, faqat eng muhimlarini to'playman va begona o'tlarga kirmayman.XML
Aniqroq tushuntirish uchun XMLni misol bilan tasavvur qilish yaxshi bo'lardi.<?xml version="1.0" encoding="UTF-8"?>
<company>
<name>IT-Heaven</name>
<offices>
<office floor="1" room="1">
<employees>
<employee>
<name>Maksim</name>
<job>Middle Software Developer</job>
</employee>
<employee>
<name>Ivan</name>
<job>Junior Software Developer</job>
</employee>
<employee>
<name>Franklin</name>
<job>Junior Software Developer</job>
</employee>
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee>
<name>Herald</name>
<job>Middle Software Developer</job>
</employee>
<employee>
<name>Adam</name>
<job>Middle Software Developer</job>
</employee>
<employee>
<name>Leroy</name>
<job>Junior Software Developer</job>
</employee>
</employees>
</office>
</offices>
</company>
HTML va XML sintaksisida o'xshashdir, chunki ular umumiy ota-onaga ega - SGML. Biroq, HTMLda faqat ma'lum bir standartning sobit teglari mavjud, XMLda esa siz o'zingizning teglaringizni, atributlaringizni yaratishingiz va umuman olganda, ma'lumotlarni o'zingizga mos keladigan tarzda saqlashni xohlagan narsani qilishingiz mumkin. Aslida, XML fayllarni ingliz tilini biladigan har bir kishi o'qishi mumkin. Ushbu misolni daraxt yordamida tasvirlash mumkin. Daraxtning ildizi kompaniya hisoblanadi. Shuningdek, u boshqa barcha elementlar kelib chiqadigan ildiz (ildiz) elementdir. Har bir XML fayli faqat bitta ildiz elementiga ega bo'lishi mumkin. U xml fayl deklaratsiyasidan keyin e'lon qilinishi kerak (misoldagi birinchi qator) va boshqa barcha elementlarni o'z ichiga olishi kerak. Deklaratsiya haqida bir oz: bu majburiy va hujjatni XML sifatida aniqlash uchun kerak. U uchta psevdo-atributga ega (oldindan belgilangan maxsus atributlar): versiya (1.0 standartiga muvofiq), kodlash (kodlash) va mustaqil (avtonomiya: agar ha va tashqi sxemalar hujjatga ulangan bo'lsa, unda xato bo'ladi, sukut bo'yicha). yo'q). Elementlar - boshqa elementlar va atributlar yordamida ma'lumotlarni saqlaydigan ob'ektlar. Atributlar - element qo'shilganda ko'rsatiladigan element haqida qo'shimcha ma'lumot. Agar tushuntirishni OOP maydoniga tarjima qilsak, biz quyidagi misolni keltirishimiz mumkin: bizda mashina bor, har bir avtomobilning xususiyatlari (rangi, sig'imi, markasi va boshqalar) mavjud - bular atributlar va avtomobil ichida joylashgan ob'ektlar mavjud. : eshiklar, derazalar, dvigatel , rul boshqa elementlardir. Xohishingizga qarab xususiyatlarni alohida elementlar yoki atributlar sifatida saqlashingiz mumkin. Axir, XML har qanday narsa haqida ma'lumotni saqlash uchun juda moslashuvchan formatdir. Tushuntirishlardan so'ng, hamma narsa joyiga tushishi uchun yuqoridagi misolga qarashimiz kerak. Misolda biz oddiy kompaniya tuzilishini tasvirlab berdik: nomi va ofislari bo'lgan kompaniya bor, va ofislarda xodimlar bor. Xodimlar va idoralar elementlari oʻrash elementlari boʻlib, ular bir xil turdagi elementlarni toʻplash uchun xizmat qiladi va ularni qayta ishlash qulayligi uchun mohiyatan ularni bir toʻplamga birlashtiradi. Zamin va xona alohida e'tiborga loyiqdir. Bular ofisning atributlari (qavat va raqam), boshqacha aytganda, uning xususiyatlari. Agar bizda "tasvir" elementi bo'lsa, biz uning o'lchamlarini o'tkazishimiz mumkin edi. Siz kompaniyada nom atributiga ega emasligini, lekin nom elementi borligini sezishingiz mumkin. Siz shunchaki tuzilmalarni o'zingiz xohlagan tarzda tasvirlashingiz mumkin. Hech kim sizni elementlarning barcha xususiyatlarini faqat atributlarda yozishni majburlamaydi, siz faqat elementlardan foydalanishingiz va ularning ichiga ba'zi ma'lumotlarni yozishingiz mumkin. Masalan, biz xodimlarimiz nomi va lavozimini atributlar sifatida yozishimiz mumkin:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<name>IT-Heaven</name>
<offices>
<office floor="1" room="1">
<employees>
<employee name="Maksim" job="Middle Software Developer">
</employee>
<employee name="Ivan" job="Junior Software Developer">
</employee>
<employee name="Franklin" job="Junior Software Developer">
</employee>
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer">
</employee>
<employee name="Adam" job="Middle Software Developer">
</employee>
<employee name="Leroy" job="Junior Software Developer">
</employee>
</employees>
</office>
</offices>
</company>
Ko'rib turganingizdek, endi har bir xodimning ismi va lavozimi uning atributlari hisoblanadi. Va siz xodimning ob'ekti (teg) ichida hech narsa yo'qligini sezishingiz mumkin, barcha xodimlar elementlari bo'sh. Keyin siz xodimni bo'sh elementga aylantirishingiz mumkin - atributlarni e'lon qilgandan so'ng darhol uni yoping. Bu juda sodda tarzda amalga oshiriladi, shunchaki chiziq qo'shing:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<name>IT-Heaven</name>
<offices>
<office floor="1" room="1">
<employees>
<employee name="Maksim" job="Middle Software Developer" />
<employee name="Ivan" job="Junior Software Developer" />
<employee name="Franklin" job="Junior Software Developer" />
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer" />
<employee name="Adam" job="Middle Software Developer" />
<employee name="Leroy" job="Junior Software Developer" />
</employees>
</office>
</offices>
</company>
Ko'rib turganingizdek, bo'sh elementlarni yopish orqali biz ma'lumotlarning butun yaxlitligini saqlab qoldik va yozuvni ancha qisqartirdik, ma'lumotni yanada ixcham va o'qilishi mumkin. XML-da sharh (faylni tahlil qilishda o'tkazib yuboriladigan matn) qo'shish uchun quyidagi sintaksis mavjud:
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
Va oxirgi qurilish CDATA , ya'ni "belgi ma'lumotlari" degan ma'noni anglatadi. Ushbu dizayn tufayli XML belgisi sifatida talqin etilmaydigan matn yozish mumkin. Agar sizda XML faylida ma'lumotda XML belgilarini saqlaydigan ob'ekt bo'lsa, bu foydali bo'ladi. Misol:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
<information>
<![CDATA[<name>Ivan</name><age>26</age>]]>
</information>
</bean>
XML haqida gap shundaki, siz uni xohlagancha kengaytirishingiz mumkin: o'z elementlaringizdan, o'z atributlaringizdan foydalaning va uni xohlaganingizcha tuzing. Ma'lumotlarni saqlash uchun atributlardan ham, elementlardan ham foydalanishingiz mumkin (avvalgi misolda ko'rsatilganidek). Biroq, siz o'zingizning elementlaringiz va atributlaringizni tezda va xohlaganingizcha topishingiz mumkinligini tushunishingiz kerak, lekin agar siz boshqa dasturchi nom elementini atributlarga ko'chirmoqchi bo'lgan loyiha ustida ishlasangiz nima bo'ladi va sizning butun dastur mantiqingiz. shunday yozilganki, bu nom element bo'lganmi? XML fayllarni tasdiqlash va qoidalar loyihangizda standart bo'lib qolishiga va hech kim ularni buzmasligiga ishonch hosil qilish uchun qanday elementlar bo'lishi kerakligi, ular qanday atributlarga ega bo'lishi va boshqa narsalar haqida o'z qoidalaringizni qanday yaratishingiz mumkin? O'zingizning XML belgilashingizning barcha qoidalarini yozish uchun maxsus vositalar mavjud. Eng mashhurlari: DTD va XML sxemasi. Ushbu maqola faqat birinchisi haqida gapiradi.
DTD
DTD hujjatlar turlarini tavsiflash uchun yaratilgan. DTD allaqachon eskirgan va endi XMLda faol ravishda tark etilmoqda, ammo DTD-dan foydalanadigan ko'plab XML fayllari mavjud va umuman olganda, uni tushunish foydalidir. DTD - bu XML hujjatlarini tekshirish texnologiyasi . DTD hujjat turi uchun o'ziga xos qoidalarni e'lon qiladi: uning elementlari, element ichida qanday elementlar bo'lishi mumkin, atributlar, ular talab qilinadimi yoki yo'qmi, ularning takrorlanish soni, shuningdek ob'ektlar. XML singari, DTD aniqroq tushuntirish uchun misol bilan ko'rsatilishi mumkin.<!-- Объявление возможных элементов -->
<!ELEMENT employee EMPTY>
<!ELEMENT employees (employee+)>
<!ELEMENT office (employees)>
<!ELEMENT offices (office+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (name, offices)>
<!-- Добавление атрибутов для элементов employee и office -->
<!ATTLIST employee
name CDATA #REQUIRED
job CDATA #REQUIRED
>
<!ATTLIST office
floor CDATA #REQUIRED
room CDATA #REQUIRED
>
<!-- Добавление сущностей -->
<!ENTITY M "Maksim">
<!ENTITY I "Ivan">
<!ENTITY F "Franklin">
Mana bizda shunday oddiy misol bor. Ushbu misolda biz XML misolidan butun ierarxiyamizni e'lon qildik: xodim, xodimlar, ofis, ofislar, ism, kompaniya. DTD fayllarini yaratish uchun har qanday XML fayllarini tavsiflash uchun 3 ta asosiy konstruktsiyalar qo'llaniladi: ELEMENT (elementlarni tavsiflash uchun), ATTLIST (elementlar uchun atributlarni tavsiflash uchun) va ENTITY (matnni qisqartirilgan shakllar bilan almashtirish uchun). ELEMENT Elementni tasvirlash uchun ishlatiladi. Ta'riflangan element ichida ishlatilishi mumkin bo'lgan elementlar ro'yxat shaklida qavslar ichida keltirilgan. Miqdorni ko'rsatish uchun miqdor ko'rsatkichlaridan foydalanishingiz mumkin (ular muntazam iboralardagi miqdor ko'rsatkichlariga o'xshash): vositalarni bildiradi YOKI +
Agar 1+
*
kvant 0+
?
qo'shilmagan bo'lsa, u holda faqat 1 ta element bo'lishi kerak deb taxmin qilinadi. Agar bizga elementlar guruhidan biri kerak bo'lsa, uni quyidagicha yozishimiz mumkin: 0
1
<!ELEMENT company ((name | offices))>
Keyin elementlardan biri tanlanadi: ism yoki ofislar, lekin kompaniya ichida ulardan ikkitasi bo'lsa, tekshirish o'tmaydi. Bundan tashqari, xodimda EMPTY so'zi mavjudligini ko'rishingiz mumkin - bu element bo'sh bo'lishi kerakligini anglatadi. Har qanday elementlar ham mavjud. #PCDATA - matnli ma'lumotlar. ATTLIST Elementlarga atributlar qo'shish uchun ishlatiladi. ATTLISTdan so'ng kerakli element nomi, undan keyin esa "atribut nomi - atribut turi" shaklidagi lug'at paydo bo'ladi va oxirida siz #IMPLIED (ixtiyoriy) yoki #REQUIRED (majburiy) qo'shishingiz mumkin. CDATA - matnli ma'lumotlar. Boshqa turlari ham bor, lekin ularning barchasi kichik harflar. ENTITY ENTITY qisqartmalar va ularga joylashtiriladigan matnni e'lon qilish uchun ishlatiladi. Aslida, biz XMLda to'liq matn o'rniga shunchaki ob'ekt nomidan oldin & belgisi bilan foydalanishimiz mumkin bo'ladi va ; keyin. Masalan: HTML belgilash va oddiy belgilarni farqlash uchun chap burchakli qavs ko'pincha lt bilan chiqariladi; , lt oldiga & qo'yish kifoya. Keyin biz belgilashdan foydalanmaymiz, faqat < belgisini ishlatamiz. Ko'rib turganingizdek, hamma narsa juda oddiy: siz elementlarni e'lon qilasiz, e'lon qilingan elementlar qanday elementlarni o'z ichiga olishi mumkinligini tushuntirasiz, ushbu elementlarga atributlar qo'shasiz va agar xohlasangiz, ba'zi yozuvlarni qisqartirish uchun ob'ektlarni qo'shishingiz mumkin. Va bu erda siz so'rashingiz kerak bo'ladi: bizning qoidalarimizni XML faylimizda qanday ishlatish kerak? Axir, biz oddiygina qoidalarni e'lon qildik, lekin biz ularni XML-da ishlatmadik. XMLda ulardan foydalanishning ikki yo'li mavjud: 1. O'rnatish - XML faylining o'ziga DTD qoidalarini yozish, DOCTYPE kalit so'zidan keyin ildiz elementini yozish va DTD faylimizni kvadrat qavs ichiga olish kifoya.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company [
<!-- Объявление возможных элементов -->
<!ELEMENT employee EMPTY>
<!ELEMENT employees (employee+)>
<!ELEMENT office (employees)>
<!ELEMENT offices (office+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (name, offices)>
<!-- Добавление атрибутов для элементов employee и office -->
<!ATTLIST employee
name CDATA #REQUIRED
job CDATA #REQUIRED
>
<!ATTLIST office
floor CDATA #REQUIRED
room CDATA #REQUIRED
>
<!-- Добавление сущностей -->
<!ENTITY M "Maksim">
<!ENTITY I "Ivan">
<!ENTITY F "Franklin">
]>
<company>
<name>IT-Heaven</name>
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
<offices>
<office floor="1" room="1">
<employees>
<employee name="&M;" job="Middle Software Developer" />
<employee name="&I;" job="Junior Software Developer" />
<employee name="&F;" job="Junior Software Developer" />
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer" />
<employee name="Adam" job="Middle Software Developer" />
<employee name="Leroy" job="Junior Software Developer" />
</employees>
</office>
</offices>
</company>
2. Import - biz barcha qoidalarimizni alohida DTD fayliga yozamiz, shundan so'ng XML faylida biz birinchi usuldan DOCTYPE konstruktsiyasidan foydalanamiz, faqat kvadrat qavslar o'rniga SYSTEM yozish va mutlaq yoki nisbiy yo'lni belgilash kerak. faylning joriy joylashuvi.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company SYSTEM "dtd_example1.dtd">
<company>
<name>IT-Heaven</name>
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
<offices>
<office floor="1" room="1">
<employees>
<employee name="&M;" job="Middle Software Developer" />
<employee name="&I;" job="Junior Software Developer" />
<employee name="&F;" job="Junior Software Developer" />
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer" />
<employee name="Adam" job="Middle Software Developer" />
<employee name="Leroy" job="Junior Software Developer" />
</employees>
</office>
</offices>
</company>
SYSTEM o'rniga PUBLIC kalit so'zidan ham foydalanishingiz mumkin, ammo u siz uchun foydali bo'lishi dargumon. Agar siz qiziqsangiz, bu haqda (va TIZIM haqida ham) bu yerda batafsil o'qishingiz mumkin: havola . Endi biz boshqa elementlarni DTD da e'lon qilmasdan foydalana olmaymiz va barcha XML bizning qoidalarimizga bo'ysunadi. Siz ushbu kodni IntelliJ IDEA-da .xml kengaytmali alohida faylga yozishga urinib ko'rishingiz va ba'zi yangi elementlar qo'shishga yoki DTD dan elementni olib tashlashga urinib ko'rishingiz mumkin va IDE sizga qanday xatolik bildirishiga e'tibor bering. Biroq, DTD o'zining kamchiliklariga ega:
- Uning xml sintaksisidan farqli o'ziga xos sintaksisi mavjud.
- DTD ma'lumotlar turini tekshirmaydi va faqat satrlarni o'z ichiga olishi mumkin.
- DTD da nom maydoni yo'q.
GO TO FULL VERSION