JavaRush /Java blogi /Random-UZ /Java dasturchisi uchun XML asoslari - 3 qismning 1-qismi
Ярослав
Daraja
Днепр

Java dasturchisi uchun XML asoslari - 3 qismning 1-qismi

Guruhda nashr etilgan
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.
Java dasturchisi uchun XML asoslari - 3 qismning 1 - 1 qismi

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. Java dasturchisi uchun XML asoslari - 3-2 qismning 1-qismiDaraxtning 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: 01
<!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.
O'z sintaksisingiz muammosi haqida: bir vaqtning o'zida ikkita sintaksisni tushunishingiz kerak: XML va DTD sintaksisi. Ular boshqacha va bu sizni chalkashtirib yuborishi mumkin. Bundan tashqari, shu sababli, bir xil DTD sxemalari bilan birgalikda katta XML fayllaridagi xatolarni kuzatish qiyinroq. Agar biror narsa siz uchun ishlamasa, siz turli xil sintaksislar bilan katta hajmdagi matnni tekshirishingiz kerak. Bu bir vaqtning o'zida ikkita kitobni o'qishga o'xshaydi: rus va ingliz tillarida. Va agar sizning bitta tilni bilishingiz yomonroq bo'lsa, matnni tushunish ham xuddi shunday qiyin bo'ladi. Ma'lumotlar turini tekshirish muammosi haqida: DTD-lardagi atributlar har xil turlarga ega, ammo ularning barchasi, o'z mohiyatiga ko'ra, biror narsaning, ro'yxatlarning yoki havolalarning qator ko'rinishidir. Biroq, siz faqat raqamlarni talab qila olmaysiz, ayniqsa ijobiy yoki salbiy emas. Va ob'ekt turlari haqida butunlay unutishingiz mumkin. Oxirgi muammo nomlar bo'shliqlari va XML sxemalariga bag'ishlangan keyingi maqolada muhokama qilinadi, chunki bu erda muhokama qilish befoyda. E'tiboringiz uchun barchangizga rahmat, men maqolalar turkumini o'z vaqtida tugatish uchun juda ko'p ish qildim va buni davom ettiraman. Asosan, men faqat XML sxemalarini aniqlab olishim va 2-maqolani tugatish uchun ularni aniqroq so'zlar bilan tushuntirishim kerak. Uning yarmi allaqachon bajarilgan, shuning uchun siz buni tez orada kutishingiz mumkin. Oxirgi maqola butunlay Java yordamida XML fayllar bilan ishlashga bag'ishlanadi. Hammaga omad va dasturlashda muvaffaqiyat :) Keyingi maqola: [Raqobat] Java dasturchisi uchun XML asoslari - 2/3 qism
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION