JavaRush /Java Blog /Random-TL /Mga Pangunahing Kaalaman sa XML para sa Java Programmer -...
Ярослав
Antas
Днепр

Mga Pangunahing Kaalaman sa XML para sa Java Programmer - Bahagi 1 ng 3

Nai-publish sa grupo
Ang XML ay isang napakasikat at nababaluktot na format sa kasalukuyan. Ang bawat programmer ay dapat na maunawaan ito, ito ay dapat lamang magkaroon. Maraming mga teknolohiya ang konektado ngayon, aktibong ginagamit nila ito, at kabilang sa kanila ang mga modernong.
Mga Pangunahing Kaalaman sa XML para sa Java Programmer - Bahagi 1 ng 3 - 1

Panimula

Kumusta, mahal na mga mambabasa ng aking artikulo. Gusto kong sabihin kaagad na ito lamang ang unang artikulo sa aking serye ng tatlong artikulo. Ang pangunahing layunin ng buong serye ay upang simulan ang bawat mambabasa sa XML at magbigay, kung hindi isang kumpletong paliwanag at pag-unawa, pagkatapos ay hindi bababa sa isang mahusay na pagtulak patungo dito, na nagpapaliwanag ng mga pangunahing punto at mga bagay. Ang buong cycle ay para sa isang nominasyon - "Atensyon sa detalye" , at ang paghahati sa 3 mga artikulo ay ginawa upang magkasya sa limitasyon ng character sa mga post at hatiin ang isang malaking halaga ng materyal sa mas maliliit na bahagi para sa higit na pag-unawa. Ang unang artikulo ay ilalaan sa XML mismo at kung ano ito, pati na rin ang isa sa mga paraan upang lumikha ng isang schema para sa mga XML file - DTD. Upang magsimula, nais kong gumawa ng isang maliit na paunang salita para sa mga hindi pa pamilyar sa XML: hindi na kailangang matakot. Ang XML ay hindi masyadong kumplikado at dapat na maunawaan ng sinumang programmer, dahil ito ay isang napaka-flexible, mahusay at sikat na format ng file ngayon para sa pag-iimbak ng iba't ibang impormasyon na gusto mo. XML ay ginagamit sa Ant, Maven, Spring. Ang sinumang programmer ay nangangailangan ng kaalaman sa XML. Ngayong nakuha mo na ang lakas at motibasyon, simulan na natin ang pag-aaral. Susubukan kong ilatag ang lahat ng materyal nang simple hangga't maaari, nangongolekta lamang ng pinakamahalaga at hindi napupunta sa mga damo.

XML

Para sa isang mas malinaw na paliwanag, mas mainam na mailarawan ang XML na may isang halimbawa.
<?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>
Ang HTML at XML ay magkatulad sa syntax dahil mayroon silang isang karaniwang magulang - SGML. Gayunpaman, sa HTML mayroon lamang mga nakapirming tag ng isang partikular na pamantayan, habang sa XML maaari kang lumikha ng iyong sariling mga tag, katangian at, sa pangkalahatan, gawin ang anumang nais mong mag-imbak ng data sa paraang nababagay sa iyo. Sa katunayan, ang mga XML file ay maaaring basahin ng sinumang marunong ng Ingles. Ang halimbawang ito ay maaaring ilarawan gamit ang isang puno. Mga Pangunahing Kaalaman sa XML para sa Java Programmer - Bahagi 1 ng 3 - 2Ang ugat ng puno ay Kumpanya. Ito rin ang ugat (ugat) na elemento kung saan nagmumula ang lahat ng iba pang elemento. Ang bawat XML file ay maaari lamang magkaroon ng isang root element. Dapat itong ideklara pagkatapos ng deklarasyon ng xml file (ang unang linya sa halimbawa) at naglalaman ng lahat ng iba pang elemento. Kaunti tungkol sa deklarasyon: ito ay sapilitan at kinakailangan upang matukoy ang dokumento bilang XML. Mayroon itong tatlong pseudo-attribute (espesyal na paunang-natukoy na mga katangian): bersyon (ayon sa 1.0 standard), pag-encode (encoding) at standalone (autonomy: kung oo at panlabas na mga scheme ay konektado sa dokumento, magkakaroon ng error, ang default ay hindi). Ang mga elemento ay mga entity na nag-iimbak ng data gamit ang iba pang mga elemento at katangian. Ang mga katangian ay karagdagang impormasyon tungkol sa isang elemento na tinukoy kapag nagdaragdag ng isang elemento. Kung isasalin namin ang paliwanag sa isang field ng OOP, maaari naming ibigay ang sumusunod na halimbawa: mayroon kaming kotse, bawat kotse ay may mga katangian (kulay, kapasidad, tatak, atbp.) - ito ay mga katangian, at may mga entity na nasa loob ng kotse : mga pinto, bintana, makina , ang manibela ay iba pang mga elemento. Maaari kang mag-imbak ng mga katangian alinman bilang mga indibidwal na elemento o bilang mga katangian, depende sa iyong pagnanais. Pagkatapos ng lahat, ang XML ay isang napaka-flexible na format para sa pag-iimbak ng impormasyon tungkol sa anumang bagay. Pagkatapos ng mga paliwanag, kailangan lang nating tingnan ang halimbawa sa itaas para mapunta sa lugar ang lahat. Sa halimbawa, inilarawan namin ang isang simpleng istraktura ng kumpanya: mayroong isang kumpanya na may pangalan at mga opisina, at sa mga opisina ay may mga empleyado. Ang mga elemento ng Employees at Offices ay mga elemento ng wrapper - nagsisilbi sila upang mangolekta ng mga elemento ng parehong uri, na mahalagang pinagsasama ang mga ito sa isang set para sa kadalian ng pagproseso. Ang sahig at silid ay nararapat na espesyal na pansin. Ito ang mga katangian ng opisina (floor and number), sa madaling salita, ang mga katangian nito. Kung mayroon kaming elementong "larawan", maaari naming ilipat ang mga sukat nito. Maaari mong mapansin na ang kumpanya ay walang katangian ng pangalan, ngunit mayroon itong elemento ng pangalan. Maaari mo lamang ilarawan ang mga istruktura sa paraang gusto mo. Walang sinuman ang nag-oobliga sa iyo na isulat ang lahat ng mga katangian ng mga elemento sa mga katangian lamang; maaari mong gamitin lamang ang mga elemento at magsulat ng ilang data sa loob ng mga ito. Halimbawa, maaari naming itala ang pangalan at posisyon ng aming mga empleyado bilang mga katangian:
<?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>
Tulad ng makikita mo, ngayon ang pangalan at posisyon ng bawat empleyado ay ang kanyang mga katangian. At mapapansin mo na wala sa loob ng entity ng empleyado (tag), lahat ng elemento ng empleyado ay walang laman. Pagkatapos ay maaari mong gawing isang walang laman na elemento ang empleyado - isara ito kaagad pagkatapos ideklara ang mga katangian. Ginagawa ito nang simple, magdagdag lamang ng slash:
<?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>
Tulad ng nakikita mo, sa pamamagitan ng pagsasara ng mga walang laman na elemento, napanatili namin ang buong integridad ng impormasyon at lubos na pinaikli ang rekord, na ginagawang mas maigsi at nababasa ang impormasyon. Upang magdagdag ng komento (tekstong lalaktawan kapag nag-parse ng file) sa XML, mayroong sumusunod na syntax:
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
At ang huling konstruksiyon ay CDATA , na nangangahulugang "data ng character". Salamat sa disenyong ito, posibleng magsulat ng text na hindi bibigyang-kahulugan bilang XML markup. Ito ay kapaki-pakinabang kung mayroon kang entity sa loob ng XML file na nag-iimbak ng XML markup sa impormasyon. Halimbawa:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
    <information>
        <![CDATA[<name>Ivan</name><age>26</age>]]>
    </information>
</bean>
Ang bagay tungkol sa XML ay maaari mong palawigin ito gayunpaman gusto mo: gamitin ang iyong sariling mga elemento, ang iyong sariling mga katangian, at buuin ito ayon sa gusto mo. Maaari mong gamitin ang parehong mga katangian at elemento upang mag-imbak ng data (tulad ng ipinakita sa halimbawa kanina). Gayunpaman, kailangan mong maunawaan na maaari kang makabuo ng iyong sariling mga elemento at mga katangian sa mabilisang at gayunpaman gusto mo, ngunit paano kung magtrabaho ka sa isang proyekto kung saan nais ng isa pang programmer na ilipat ang elemento ng pangalan sa mga katangian, at ang iyong buong logic ng programa ay nakasulat kaya ang pangalan ay isang elemento? Paano ka makakagawa ng sarili mong mga panuntunan tungkol sa kung anong mga elemento ang dapat, anong mga katangian ang mayroon sila, at iba pang mga bagay, upang ma-validate mo ang mga XML file at matiyak na ang mga panuntunan ay magiging pamantayan sa iyong proyekto at walang lalabag sa kanila? Upang maisulat ang lahat ng mga patakaran ng iyong sariling XML markup, mayroong mga espesyal na tool. Ang pinakasikat: DTD at XML Schema. Ang artikulong ito ay tatalakayin lamang ang tungkol sa una.

DTD

Ang DTD ay nilikha upang ilarawan ang mga uri ng mga dokumento. Ang DTD ay nagiging lipas na at ngayon ay aktibong inabandona sa XML, ngunit mayroon pa ring maraming XML file na gumagamit ng DTD at, sa pangkalahatan, ito ay kapaki-pakinabang na maunawaan. Ang DTD ay isang teknolohiya para sa pagpapatunay ng mga XML na dokumento . Ang isang DTD ay nagdedeklara ng mga partikular na panuntunan para sa isang uri ng dokumento: ang mga elemento nito, kung anong mga elemento ang maaaring nasa loob ng elemento, mga katangian, kung kinakailangan man ang mga ito o hindi, ang bilang ng kanilang mga pag-uulit, pati na rin ang mga Entidad. Katulad ng XML, ang isang DTD ay maaaring makita ng isang halimbawa para sa isang mas malinaw na paliwanag.
<!-- Объявление возможных элементов -->
<!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">
Narito mayroon kaming isang simpleng halimbawa. Sa halimbawang ito, idineklara namin ang aming buong hierarchy mula sa halimbawa ng XML: empleyado, empleyado, opisina, opisina, pangalan, kumpanya. Para gumawa ng mga DTD file, mayroong 3 pangunahing constructions na ginagamit para ilarawan ang anumang XML file: ELEMENT (upang ilarawan ang mga elemento), ATTLIST (upang ilarawan ang mga attribute para sa mga elemento) at ENTITY (upang palitan ang text ng mga pinaikling form). ELEMENT Ginagamit upang ilarawan ang isang elemento. Ang mga elemento na maaaring magamit sa loob ng isang inilarawang elemento ay nakalista sa mga panaklong sa anyo ng listahan. Maaari kang gumamit ng mga quantifier upang ipahiwatig ang dami (katulad sila ng mga quantifier mula sa mga regular na expression): +ibig sabihin 1+ *ay 0+ ?nangangahulugang 0OR 1 Kung walang mga quantifier na idinagdag, pagkatapos ay ipinapalagay na dapat ay mayroon lamang 1 elemento. Kung kailangan namin ng isa sa isang pangkat ng mga elemento, maaari naming isulat ito tulad nito:
<!ELEMENT company ((name | offices))>
Pagkatapos ay pipiliin ang isa sa mga elemento: pangalan o opisina, ngunit kung mayroong dalawa sa kanila sa loob ng kumpanya, hindi papasa ang pagpapatunay. Mapapansin mo rin na sa empleyado ay mayroong salitang EMPTY - nangangahulugan ito na dapat walang laman ang elemento. Mayroon ding ANUMANG - anumang elemento. #PCDATA – data ng text. ATTLIST Ginagamit upang magdagdag ng mga katangian sa mga elemento. Pagkatapos sundin ng ATTLIST ang pangalan ng gustong elemento, at pagkatapos nito ay isang diksyunaryo ng form na "pangalan ng katangian - uri ng katangian", at sa dulo maaari kang magdagdag ng #IMPLIED (opsyonal) o #REQUIRED (kinakailangan). CDATA – data ng teksto. Mayroong iba pang mga uri, ngunit lahat sila ay maliit. Ang ENTITY ENTITY ay ginagamit upang magdeklara ng mga pagdadaglat at ang teksto na ilalagay sa mga ito. Sa katunayan, magagamit lang namin sa XML, sa halip na ang buong teksto, ang pangalan lang ng entity na may & sign bago at ; pagkatapos. Halimbawa: upang matukoy ang pagkakaiba sa pagitan ng HTML markup at mga character lang, ang kaliwang anggulo bracket ay madalas na tinatakasan ng lt; , kailangan mo lang ilagay & bago ang lt. Pagkatapos ay hindi kami gagamit ng markup, ngunit simpleng < simbolo. Tulad ng nakikita mo, ang lahat ay medyo simple: nagdedeklara ka ng mga elemento, ipaliwanag kung anong mga elemento ang kayang taglayin ng mga ipinahayag na elemento, magdagdag ng mga katangian sa mga elementong ito at, kung nais, maaari kang magdagdag ng mga entity upang paikliin ang ilang mga entry. At dito kailangan mong itanong: paano gamitin ang aming mga panuntunan sa aming XML file? Pagkatapos ng lahat, ipinahayag lang namin ang mga patakaran, ngunit hindi namin ginamit ang mga ito sa XML. Mayroong dalawang paraan para gamitin ang mga ito sa XML: 1. Pag-embed - pagsusulat ng mga panuntunan ng DTD sa loob ng XML file mismo, isulat lang ang root element pagkatapos ng DOCTYPE na keyword at ilakip ang aming DTD file sa loob ng mga square bracket.
<?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. Pag-import - isinusulat namin ang lahat ng aming mga patakaran sa isang hiwalay na DTD file, pagkatapos nito sa XML file ginagamit namin ang pagbuo ng DOCTYPE mula sa unang paraan, tanging sa halip na mga square bracket kailangan mong isulat ang SYSTEM at tukuyin ang isang ganap o kamag-anak na landas sa kasalukuyang lokasyon ng file.
<?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>
Maaari mo ring gamitin ang PUBLIC na keyword sa halip na SYSTEM, ngunit malamang na hindi ito kapaki-pakinabang sa iyo. Kung interesado ka, maaari mong basahin ang tungkol dito (at tungkol din sa SYSTEM) nang detalyado dito: link . Ngayon hindi namin magagamit ang iba pang mga elemento nang hindi ipinapahayag ang mga ito sa DTD, at lahat ng XML ay napapailalim sa aming mga panuntunan. Maaari mong subukang isulat ang code na ito sa IntelliJ IDEA sa isang hiwalay na file na may extension na .xml at subukang magdagdag ng ilang bagong elemento o mag-alis ng elemento mula sa aming DTD at mapansin kung paano magsasaad ng error ang IDE sa iyo. Gayunpaman, ang DTD ay may mga kawalan nito:
  • Mayroon itong sariling syntax, naiiba sa xml syntax.
  • Ang isang DTD ay walang uri ng data checking at maaari lamang maglaman ng mga string.
  • Walang namespace sa isang DTD.
Tungkol sa problema ng sarili mong syntax: dapat mong maunawaan ang dalawang syntax nang sabay-sabay: XML at DTD syntax. Magkaiba ang mga ito at maaaring malito ka nito. Gayundin, dahil dito, mas mahirap subaybayan ang mga error sa malalaking XML file kasabay ng parehong mga schema ng DTD. Kung ang isang bagay ay hindi gumagana para sa iyo, kailangan mong suriin ang isang malaking halaga ng teksto na may iba't ibang mga syntax. Ito ay tulad ng pagbabasa ng dalawang libro sa parehong oras: sa Russian at Ingles. At kung ang iyong kaalaman sa isang wika ay mas malala, kung gayon ang pag-unawa sa teksto ay magiging mahirap din. Tungkol sa problema ng pagsusuri sa uri ng data: ang mga katangian sa mga DTD ay may iba't ibang uri, ngunit lahat sila, sa kanilang pangunahing, mga representasyon ng string ng isang bagay, mga listahan o mga link. Gayunpaman, hindi ka maaaring humiling ng mga numero lamang, at lalo na hindi positibo o negatibo. At maaari mong ganap na kalimutan ang tungkol sa mga uri ng bagay. Ang huling problema ay tatalakayin sa susunod na artikulo, na ilalaan sa mga namespace at XML schema, dahil ang pagtalakay dito ay walang kabuluhan. Salamat sa lahat para sa iyong pansin, marami akong nagawa at patuloy na ginagawa ito upang matapos ang buong serye ng mga artikulo sa oras. Karaniwan, kailangan ko lang malaman ang mga XML schema at magkaroon ng paliwanag sa mga ito sa mas malinaw na mga salita upang matapos ang ika-2 artikulo. Ang kalahati nito ay tapos na, kaya maaari mong asahan ito sa lalong madaling panahon. Ang huling artikulo ay ganap na nakatuon sa pagtatrabaho sa mga XML file gamit ang Java. Good luck sa lahat at tagumpay sa programming :) Susunod na artikulo: [Kumpetisyon] Mga Pangunahing Kaalaman sa XML para sa isang Java Programmer - Bahagi 2 ng 3
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION