JavaRush /Java Blog /Random-TK /Java programmisti üçin XML esaslary - 3-nji bölüm
Ярослав
Dereje
Днепр

Java programmisti üçin XML esaslary - 3-nji bölüm

Toparda çap edildi
XML häzirki döwürde gaty meşhur we çeýe format. Her bir programmist muňa düşünmeli, diňe hökman bolmaly. Häzirki wagtda köp tehnologiýa ony işjeň ulanýar we häzirki zaman tehnologiýalary hem şolaryň arasynda.
Java programmisti üçin XML esaslary - 3 - 1 bölüm

Giriş

Salam, makalamyň gadyrly okyjylary. Derrew aýdasym gelýär, bu diňe üç makaladan ybarat seriýamdaky ilkinji makala. Serieshli seriýanyň esasy maksady, her bir okyjyny XML-e başlamak we doly düşündiriş we düşünişmezlik bolmasa, esasy nokatlary we zatlary düşündirip, iň bolmanda oňa tarap gowy itergi bermekdir. Tutuş sikl bir kandidat üçin bolar - “Jikme-jikliklere üns” we 3 makala bölmek, ýazgylardaky nyşanlaryň çägine laýyk gelmek we has köp düşünmek üçin köp mukdarda materialy kiçi böleklere bölmek üçin edilýär. Birinji makala XML-iň özüne we nämedigine bagyşlanar, şeýle hem XML faýllary üçin shema döretmegiň usullaryndan biri - DTD. Ilki bilen, XML bilen entek tanyş bolmadyklar üçin kiçijik sözbaşy etmek isleýärin: gorkmagyň zerurlygy ýok. XML gaty çylşyrymly däl we islendik programmist tarapyndan düşünilmeli, sebäbi häzirki wagtda isleýän dürli maglumatlaryňyzy saklamak üçin örän çeýe, täsirli we meşhur faýl formaty. XML garynja, Maven, Baharda ulanylýar. Islendik programmistiň XML bilimi gerek. Güýç we hyjuw ýygnanyňyzdan soň, öwrenip başlalyň. Diňe iň möhümlerini ýygnap, haşal otlara girmän, mümkin boldugyça ýönekeý materiallary ýerleşdirmäge synanyşaryn.

XML

Has düşnükli düşündiriş üçin XML-ni mysal bilen göz öňüne getirmek has gowy bolardy.
<?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 we XML sintaksisde meňzeş, sebäbi umumy ene-atasy - SGML bar. Şeýle-de bolsa, HTML-de diňe belli bir standartyň kesgitlenen bellikleri bar, XML-de bolsa öz bellikleriňizi, atributlaryňyzy döredip bilersiňiz we umuman, maglumatlary özüňize laýyk saklamak isleýän zadyňyzy edip bilersiňiz. Aslynda, XML faýllaryny iňlis dilini bilýänler okap bilerler. Bu mysaly agajyň kömegi bilen suratlandyryp bolar. Java programmisti üçin XML esaslary - 3 - 2 bölümiň 1-nji bölümiAgajyň kökü Kompaniýa. Şeýle hem beýleki elementleriň gelip çykýan kök (kök) elementidir. Her XML faýlynda diňe bir kök elementi bolup biler. Xml faýly yglan edilenden soň yglan edilmeli (mysaldaky birinji setir) we beýleki elementleriň hemmesini öz içine alýar. Deklarasiýa barada azajyk: hökmany we resminamany XML diýip kesgitlemek zerur. Üç sany pseudo-atributlary (ýörite kesgitlenen atributlary) bar: wersiýa (1.0 standartyna laýyklykda), kodlamak (kodlamak) we özbaşdak (özbaşdaklyk: eger hawa we daşarky shemalar resminama birikdirilen bolsa, onda ýalňyşlyk bolar, deslapky ýok). Elementler beýleki elementleri we atributlary ulanyp maglumatlary saklaýan guramalardyr. Sypatlar, element goşulanda kesgitlenýän element hakda goşmaça maglumatdyr. Düşündirişi OOP meýdançasyna terjime etsek, aşakdaky mysaly berip bileris: awtoulagymyz bar, her bir awtoulagyň aýratynlyklary bar (reňki, kuwwaty, markasy we ş.m.) - bu häsiýetler we awtoulagyň içinde bar bolan zatlar bar : gapylar, penjireler, hereketlendiriji, rul beýleki elementlerdir. Sypatlary islegiňize baglylykda aýratyn elementler ýa-da atributlar hökmünde saklap bilersiňiz. Galyberse-de, XML islendik zat hakda maglumat saklamak üçin örän çeýe formatdyr. Düşündirişlerden soň, hemme zadyň ýerbe-ýer bolmagy üçin ýokardaky mysaly gözlemeli. Mysal üçin, ýönekeý bir kompaniýa gurluşyny beýan etdik: ady we ofisleri bolan bir kompaniýa bar, ofislerde işgärler bar. Işgärler we ofisler elementleri örtük elementleri - birmeňzeş görnüşdäki elementleri ýygnamaga hyzmat edýär, esasan olary gaýtadan işlemek aňsatlygy üçin bir toplumda birleşdirýär. Gat we otag aýratyn ünsi çekmelidir. Bular ofisiň häsiýetleri (pol we san), başgaça aýdylanda, onuň häsiýetleri. Eger "şekil" elementimiz bar bolsa, onda onuň ölçeglerini geçirip bilerdik. Kompaniýanyň at atributynyň ýokdugyny, ýöne at elementiniň bardygyny görüp bilersiňiz. Gurluşlary isleýşiňiz ýaly suratlandyryp bilersiňiz. Hiç kim elementleriň ähli häsiýetlerini diňe atributlarda ýazmaga mejbur etmeýär, diňe elementleri ulanyp, içinde käbir maglumatlary ýazyp bilersiňiz. Mysal üçin, işgärlerimiziň adyny we ýagdaýyny atributlar hökmünde ýazyp bileris:
<?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>
Görşüňiz ýaly, indi her bir işgäriň ady we wezipesi onuň häsiýetleri. Işgäriň (belligiň) içinde hiç zadyň ýokdugyna, ähli işgär elementleriniň boşdugyna göz ýetirip bilersiňiz. Soňra işgäri boş element edip bilersiňiz - häsiýetleri yglan edenden soň derrew ýapyň. Bu gaty ýönekeý ýerine ýetirilýär, diňe çyzgy goşuň:
<?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>
Görşüňiz ýaly, boş elementleri ýapmak bilen, maglumatlaryň tutuş bitewiligini sakladyk we ýazgyny ep-esli gysgaltdyk we maglumatlary has gysga we okaldy. XML-de teswir (faýl derňelende atlanjak tekst) goşmak üçin aşakdaky sintaksis bar:
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
Iň soňky gurluşyk bolsa “häsiýet maglumatlary” diýmegi aňladýan CDATA . Bu dizaýnyň kömegi bilen, XML belligi hökmünde düşündirilmeýän tekst ýazmak mümkin. Maglumatda XML belligini saklaýan XML faýlyň içinde bir zat bar bolsa peýdalydyr. Mysal:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
    <information>
        <![CDATA[<name>Ivan</name><age>26</age>]]>
    </information>
</bean>
XML hakda zat, islän wagtyňyz uzaldyp bilersiňiz: öz elementleriňizi, öz häsiýetleriňizi ulanyň we isleýşiňiz ýaly düzüň. Maglumatlary saklamak üçin atributlary we elementleri ulanyp bilersiňiz (öň mysalda görkezilişi ýaly). Şeýle-de bolsa, çybykda öz elementleriňizi we häsiýetleriňizi döredip biljekdigiňize düşünmeli, ýöne isleseňiz, başga bir programmistiň at elementini atributlara we tutuş programma logikasyna geçirmek isleýän taslamasynda işleseňiz näme bolar? adynyň elementi bolmagy üçin ýazylýarmy? Haýsy elementleriň bolmalydygy, haýsy häsiýetleri we beýleki zatlar hakda öz düzgünleriňizi nädip döredip bilersiňiz, şeýlelik bilen XML faýllaryny tassyklap bilersiňiz we düzgünleriňiziň taslamaňyzda standart boljakdygyna we hiç kimiň olary bozmajakdygyna göz ýetirip bilersiňiz? Öz XML belligiňiziň ähli düzgünlerini ýazmak üçin ýörite gurallar bar. Iň meşhurlary: DTD we XML shema. Bu makalada diňe birinjisi barada gürleşiler.

DTD

DTD resminamalaryň görnüşlerini beýan etmek üçin döredilýär. DTD eýýäm köneldi we indi XML-de işjeň terk edilýär, ýöne DTD ulanýan XML faýllary henizem köp we umuman düşünmek peýdaly. DTD, XML resminamalaryny barlamak üçin tehnologiýa . DTD resminamanyň görnüşi üçin aýratyn düzgünleri yglan edýär: onuň elementleri, elementiň içinde haýsy elementler bolup biler, atributlar, zerur ýa-da ýok, gaýtalanýanlaryň sany, şeýle hem Edaralar. XML-e meňzeş, has düşnükli düşündiriş üçin bir DTD mysal bilen şekillendirilip bilner.
<!-- Объявление возможных элементов -->
<!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">
Bu ýerde şeýle ýönekeý mysal bar. Bu mysalda, XML mysalyndan tutuş iýerarhiýamyzy yglan etdik: işgär, işgär, ofis, ofis, ady, kompaniýasy. DTD faýllaryny döretmek üçin islendik XML faýllaryny suratlandyrmak üçin ulanylýan 3 sany esasy gurluş bar: ELEMENT (elementleri suratlandyrmak), ATTLIST (elementleriň häsiýetlerini beýan etmek) we ENTITY (teksti gysgaldylan görnüşler bilen çalyşmak). ELEMENT Bir elementi suratlandyrmak üçin ulanylýar. Beýan edilen elementiň içinde ulanyp boljak elementler sanaw görnüşinde gabygyň içinde görkezilýär. Mukdaryny görkezmek üçin kesgitleýjileri ulanyp bilersiňiz (olar adaty aňlatmalaryň mukdaryna meňzeýär): +diýmek 1+ *, 0+ ?ýa 0-da 1 hiç hili mukdar goşulmadyk bolsa, onda diňe 1 element bolmaly diýlip çaklanylýar. Elementler toparyndan biri gerek bolsa, ony şeýle ýazyp bilerdik:
<!ELEMENT company ((name | offices))>
Soňra elementleriň biri saýlanardy: ady ýa-da ofisleri, ýöne kompaniýanyň içinde ikisi bar bolsa, tassyklama geçmezdi. Şeýle hem, işgärde EMPTY sözüniň bardygyny görüp bilersiňiz - bu elementiň boş bolmalydygyny aňladýar. Şeýle hem HER - islendik element bar. #PCDATA - tekst maglumatlary. ATTLIST Elementlere häsiýet goşmak üçin ulanylýar. ATTLIST islenýän elementiň adyny yzarlandan soň, “atributyň ady - atribut görnüşi” görnüşiniň sözlüginden soň, #IMPLIED (islege bagly) ýa-da #REQUIRED (zerur) goşup bilersiňiz. CDATA - tekst maglumatlary. Başga görnüşleri bar, ýöne olaryň hemmesi kiçi harplar. ENTITY ENTITY gysgaltmalary we olaryň üstünde goýuljak teksti yglan etmek üçin ulanylýar. Aslynda, doly tekstiň ýerine diňe XML-de ulanyp bileris, diňe & belgisi bolan guramanyň adyny we; soň. Mysal üçin: HTML belligi bilen diňe nyşanlary tapawutlandyrmak üçin çep burç kysmy köplenç lt bilen gaçýar; , diňe lt goýmaly. Soňra bellik ulanmarys, diňe <nyşany. Görşüňiz ýaly, hemme zat gaty ýönekeý: elementleri yglan edýärsiňiz, yglan edilen elementleriň haýsy elementleri saklamaga ukyplydygyny düşündirýärsiňiz, bu elementlere atributlary goşýarsyňyz we isleseňiz käbir ýazgylary gysgaltmak üçin subýektler goşup bilersiňiz. Ine, şu ýerde soramaly bolarsyňyz: düzgünlerimizi XML faýlymyzda nädip ulanmaly? Galyberse-de, düzgünleri ýönekeý yglan etdik, ýöne XML-de ulanmadyk. Olary XML-de ulanmagyň iki usuly bar: 1. Goýmak - XML ​​faýlyň içinde DTD düzgünlerini ýazmak, diňe DOCTYPE açar sözünden soň kök elementini ýazyň we DTD faýlymyzy inedördül ýaýyň içine salyň.
<?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 - ähli düzgünlerimizi aýratyn DTD faýlynda ýazýarys, şondan soň XML faýlynda DOCTYPE gurluşygyny ilkinji usuldan ulanýarys, diňe kwadrat ýaýyň ýerine SYSTEM ýazmaly we mutlak ýa-da degişlilikde ýol görkezmeli; faýlyň häzirki ýeri.
<?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-iň ýerine PUBLIC açar sözüni hem ulanyp bilersiňiz, ýöne bu siziň üçin peýdaly bolmaz. Eger gyzyklanýan bolsaňyz, bu hakda (we SYSTEM hakda) jikme-jik şu ýerden okap bilersiňiz: baglanyşyk . Indi beýleki elementleri DTD-de yglan etmezden ulanyp bilmeris we ähli XML düzgünlerimize tabyn. Bu kody IntelliJ IDEA-da .xml giňeltmesi bilen aýratyn faýlda ýazyp görüp bilersiňiz we käbir täze elementleri goşup ýa-da DTD-den bir elementi aýyryp görüp bilersiňiz we IDE-iň size nädip ýalňyşlyk görkezjekdigini görüp bilersiňiz. Şeýle-de bolsa, DTD-iň kemçilikleri bar:
  • Xml sintaksisinden tapawutly öz sintaksisi bar.
  • DTD-de maglumat görnüşini barlamak ýok we diňe setirleri öz içine alyp biler.
  • DTD-de at giňişligi ýok.
Öz sintaksis meseläňiz barada: birbada iki sintaksis düşünmeli: XML we DTD sintaksis. Olar başga, bu sizi bulaşdyryp biler. Mundan başga-da, şol bir DTD shemalary bilen bilelikde ullakan XML faýllaryndaky ýalňyşlyklary yzarlamak has kyn. Eger bir zat siziň üçin işlemese, dürli sintaksisler bilen köp mukdarda tekst barlamaly bolarsyňyz. Bir wagtyň özünde iki kitap okaýan ýaly: rus we iňlis dillerinde. Bir dili bilýän bolsaňyz has erbet bolsa, tekste düşünmek hem kyn bolar. Maglumatlaryň görnüşini barlamak meselesi barada: DTD-lerdäki atributlaryň dürli görnüşleri bar, ýöne olaryň hemmesi özeninde bir zadyň, sanawlaryň ýa-da baglanyşyklaryň setir şekillendirişidir. Şeýle-de bolsa, diňe sanlary talap edip bilmersiňiz, esasanam oňyn ýa-da otrisatel däl. Obýektiň görnüşlerini düýbünden ýatdan çykaryp bilersiňiz. Iň soňky mesele at giňişligine we XML shemalaryna bagyşlanjak indiki makalada ara alnyp maslahatlaşylar, sebäbi bu ýerde pikir alyşmagyň manysy ýok. Üns bereniňiz üçin hemmäňize sag bolsun aýdýaryn, köp iş etdim we makalalaryň tapgyryny wagtynda gutarmak üçin muny dowam etdirýärin. Esasan, diňe XML shemalaryny anyklamaly we 2-nji makalany gutarmak üçin has düşnükli sözler bilen düşündiriş bermeli. Onuň ýarysy eýýäm ýerine ýetirildi, ýakyn wagtda garaşyp bilersiňiz. Iň soňky makala, bütinleý Java ulanyp, XML faýllary bilen işlemeklige bagyşlanar. Hemmäňize üstünlik we programmirlemekde üstünlik :) Indiki makala: [Bäsleşik] Java programmisti üçin XML esaslary - 3-nji bölüm
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION