JavaRush /Блоги Java /Random-TG /Асосҳои XML барои барномасози Java - Қисми 1 аз 3
Ярослав
Сатҳи
Днепр

Асосҳои XML барои барномасози Java - Қисми 1 аз 3

Дар гурӯҳ нашр шудааст
XML формати хеле маъмул ва чандир дар замони мост. Ҳар як барномасоз бояд онро дарк кунад, ин танҳо як ҳатмист. Бисёре аз технологияҳои имрӯза аз он фаъолона истифода мебаранд ва замонавӣ аз ҷумлаи онҳо ҳастанд.
Асосҳои XML барои барномасози Java - Қисми 1 аз 3 - 1

Муқаддима

Салом, хонандагони азизи мақолаи ман. Дарҳол гуфтан мехоҳам, ки ин танҳо мақолаи аввалини силсилаи се мақолаи ман аст. Ҳадафи асосии тамоми силсила ин аст, ки ҳар як хонанда ба XML оғоз кунад ва шарҳу фаҳмиши мукаммал набошад, ҳадди аққал як такони хубе ба сӯи он, шарҳ додани нуктаҳо ва чизҳои асосӣ мебошад. Тамоми давра барои як номинатсия - "Таваҷҷӯҳ ба тафсилот" хоҳад буд ва тақсимот ба 3 мақола бо мақсади мувофиқат кардан ба маҳдудияти аломатҳо дар паёмҳо ва тақсим кардани миқдори зиёди мавод ба қисмҳои хурдтар барои фаҳмиши бештар анҷом дода мешавад. Мақолаи аввал ба худи XML ва чӣ будани он, инчунин яке аз роҳҳои сохтани схема барои файлҳои XML - DTD бахшида мешавад. Барои оғоз, ман мехостам барои онҳое, ки бо XML ҳанӯз ошно нестанд, як муқаддимаи хурде гузорам: тарс кардан лозим нест. XML чандон мураккаб нест ва онро ҳар як барномасоз бояд дарк кунад, зеро он формати файлии хеле фасеҳ, муассир ва маъмул барои нигоҳ доштани иттилооти гуногуне, ки шумо мехоҳед, мебошад. XML дар Ant, Maven, Spring истифода мешавад. Ҳар як барномасоз ба дониши XML ниёз дорад. Акнун, ки шумо қувват ва ҳавасмандиро ҷамъ кардед, биёед ба омӯзиш оғоз кунем. Ман кӯшиш мекунам, ки ҳама маводро то ҳадди имкон соддатар гузорам, танҳо муҳимтарин чизҳоро ҷамъоварӣ кунам ва ба алафҳои бегона наравам.

XML

Барои шарҳи равшантар, беҳтар мебуд, ки XML-ро бо мисол тасаввур кунед.
<?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 ва XML дар синтаксис шабеҳанд, зеро онҳо волидайни умумӣ доранд - SGML. Аммо, дар HTML танҳо тегҳои собити стандарти мушаххас мавҷуданд, дар ҳоле ки дар XML шумо метавонед тегҳо, атрибутҳои шахсии худро эҷод кунед ва дар маҷмӯъ, ҳар кореро, ки мехоҳед, нигоҳ доред, ки маълумотро ба таври мувофиқ иҷро кунед. Дар асл, файлҳои XML-ро ҳар касе, ки забони англисиро медонад, хонда метавонад. Ин мисолро бо истифода аз дарахт тасвир кардан мумкин аст. Основы XML для Java программиста - Часть 1 из 3 - 2Решаи дарахт Ширкат аст. Он инчунин унсури реша (реша) аст, ки ҳама унсурҳои дигар аз он сарчашма мегиранд. Ҳар як файли XML метавонад танҳо як унсури реша дошта бошад. Он бояд пас аз эълони файли xml эълон карда шавад (сатри аввал дар мисол) ва дорои ҳамаи унсурҳои дигар. Каме дар бораи эъломия: он ҳатмист ва барои муайян кардани ҳуҷҷат ҳамчун XML лозим аст. Он дорои се атрибутҳои псевдо-атрибутҳо (атрибутҳои махсуси пешакӣ муайяншуда): version (мувофиқи стандарти 1.0), рамзгузорӣ (рамзгузорӣ) ва мустақил (автономия: агар ҳа ва схемаҳои беруна ба ҳуҷҷат пайваст карда шаванд, пас хатогӣ ба амал меояд, пешфарз. нест). Элементҳо an objectҳое мебошанд, ки маълумотро бо истифода аз унсурҳо ва атрибутҳои дигар нигоҳ медоранд. Аттрибутҳо маълумоти иловагӣ дар бораи элементе мебошанд, ки ҳангоми илова кардани элемент муайян карда мешаванд. Агар мо тавзеҳро ба майдони OOP тарҷума кунем, мо метавонем мисоли зеринро диҳем: мо мошин дорем, ҳар як мошин дорои хусусиятҳо (ранг, зарфият, бренд ва ғайра) - инҳо атрибутҳо ҳастанд ва an objectҳое ҳастанд, ки дар дохor мошин ҳастанд. : дарҳо, тирезаҳо, муҳаррик , руль унсурҳои дигар мебошанд. Шумо метавонед хосиятҳоро вобаста ба хоҳиши худ ҳамчун унсурҳои алоҳида ё ҳамчун атрибутҳо нигоҳ доред. Дар ниҳоят, XML формати бениҳоят чандир барои нигоҳ доштани маълумот дар бораи ҳама чиз аст. Пас аз шарҳҳо, мо бояд танҳо ба мисоли дар боло овардашуда нигоҳ кунем, то ҳама чиз ба ҷои худ афтад. Дар мисол, мо сохтори оддии ширкатро тавсиф кардем: ширкате ҳаст, ки ном ва офис дорад ва дар идораҳо кормандон ҳастанд. Унсурҳои Кормандон ва Идораҳо унсурҳои печанда мебошанд - онҳо барои ҷамъоварии унсурҳои як навъ хидмат мекунанд ва аслан онҳоро дар як маҷмӯа барои осонии коркард муттаҳид мекунанд. Фарш ва ҳуҷра сазовори диққати махсус мебошанд. Инҳо атрибутҳои офис (ошёна ва рақам), ба ибораи дигар, хосиятҳои он мебошанд. Агар мо унсури "тасвир" дошта бошем, мо метавонем андозаҳои онро интиқол диҳем. Шумо метавонед бифаҳмед, ки ширкат аттрибутии ном надорад, аммо унсури ном дорад. Шумо метавонед танҳо сохторҳоро тавре ки мехоҳед, тасвир кунед. Ҳеҷ кас шуморо маҷбур намекунад, ки тамоми хосиятҳои элементҳоро танҳо дар атрибутҳо нависед; шумо метавонед танҳо элементҳоро истифода баред ва дар дохor онҳо баъзе маълумотро нависед. Масалан, мо метавонем ном ва мавқеи кормандони худро ҳамчун атрибутҳо сабт кунем:
<?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>
Тавре ки мебинед, ҳоло ном ва вазифаи ҳар як корманд сифатҳои ӯст. Ва шумо метавонед аҳамият диҳед, ки дар дохor шахси корманд (тег) ҳеҷ чиз нест, ҳама унсурҳои корманд холӣ мебошанд. Он гоҳ шумо метавонед кормандро як унсури холӣ кунед - онро фавран пас аз эълони атрибутҳо пӯшед. Ин ба таври оддӣ анҷом дода мешавад, танҳо як хати рахна илова кунед:
<?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>
Тавре ки мебинед, бо бастани унсурҳои холӣ мо тамоми якпорчагии информатсияро нигоҳ доштем ва сабтро хеле кутоҳ карда, маълумотро мухтасартар ва хондашаванда гардонидем. Барои илова кардани шарҳ (матне, ки ҳангоми таҳлor файл гузаронида мешавад) дар XML, синтаксиси зерин мавҷуд аст:
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
Ва сохтмони охирин CDATA мебошад , ки маънои "маълумоти аломат" -ро дорад. Ба шарофати ин тарҳ, мумкин аст, ки матне нависед, ки ҳамчун аломати XML тафсир карда намешавад. Ин муфид аст, агар шумо дар дохor файли XML ягон an object дошта бошед, ки аломатгузории XML-ро дар маълумот нигоҳ медорад. Мисол:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
    <information>
        <![CDATA[<name>Ivan</name><age>26</age>]]>
    </information>
</bean>
Гап дар бораи XML дар он аст, ки шумо метавонед онро тавре, ки мехоҳед, васеъ кунед: унсурҳои худ, атрибутҳои шахсии худро истифода баред ва онро мувофиқи хоҳиши худ созед. Шумо метавонед ҳам атрибутҳо ва ҳам элементҳоро барои нигоҳ доштани маълумот истифода баред (чунон ки дар мисоли қаблӣ нишон дода шуда буд). Бо вуҷуди ин, шумо бояд фаҳмед, ки шумо метавонед унсурҳо ва атрибутҳои шахсии худро дар парвоз ва ҳар он ки мехоҳед, пайдо кунед, аммо чӣ мешавад, агар шумо дар лоиҳае кор кунед, ки барномасози дигар мехоҳад унсури номро ба атрибутҳо интиқол диҳад ва тамоми мантиқи барномаи шумо навишта шудааст, ки ном як унсур буд? Чӣ тавр шумо метавонед қоидаҳои шахсии худро дар бораи он, ки кадом унсурҳо бояд бошанд, кадом атрибутҳо доранд ва чизҳои дигар эҷод кунед, то шумо файлҳои XML-ро тасдиқ кунед ва боварӣ ҳосил кунед, ки қоидаҳо дар лоиҳаи шумо стандартӣ мешаванд ва ҳеҷ кас онҳоро вайрон намекунад? Барои навиштани ҳама қоидаҳои аломатгузории XML-и худ, асбобҳои махсус мавҷуданд. Машҳуртарин: DTD ва XML Schema. Ин мақола танҳо дар бораи аввалин сухан меравад.

ДТД

DTD барои тавсифи намудҳои ҳуҷҷатҳо сохта шудааст. DTD аллакай кӯҳна шуда истодааст ва ҳоло дар XML фаъолона тарк карда мешавад, аммо ҳоло ҳам бисёр файлҳои XML мавҷуданд, ки DTD-ро истифода мебаранд ва дар маҷмӯъ, фаҳмидани он муфид аст. DTD технологияи тасдиқи ҳуҷҷатҳои XML мебошад . DTD қоидаҳои мушаххасро барои навъи ҳуҷҷат эълон мекунад: унсурҳои он, кадом элементҳо дар дохor элемент буда метавонанд, атрибутҳо, оё онҳо талаб карда мешаванд ё не, шумораи такрорҳои онҳо, инчунин an objectҳо. Ба монанди XML, DTD-ро бо мисол барои тавзеҳи равшантар дидан мумкин аст.
<!-- Объявление возможных элементов -->
<!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">
Дар ин ҷо мо як мисоли оддӣ дорем. Дар ин мисол, мо тамоми иерархияи худро аз мисоли XML эълон кардем: корманд, кормандон, офис, офисҳо, ном, ширкат. Барои сохтани файлҳои DTD, 3 сохтори асосӣ барои тавсифи ҳама гуна файлҳои XML истифода мешаванд: ELEMENT (барои тавсифи элементҳо), ATTLIST (барои тавсифи атрибутҳо барои элементҳо) ва ENTITY (барои иваз кардани матн бо шаклҳои ихтисоршуда). ELEMENT Барои тавсифи элемент истифода мешавад. Унсурҳое, ки метавонанд дар дохor як унсури тавсифшуда истифода шаванд, дар қавс дар шакли рӯйхат оварда шудаанд. Шумо метавонед миқдорро барои нишон додани миқдор истифода баред (онҳо ба миқдорҳо аз ибораҳои муқаррарӣ монанданд): +маънои 1+ *маънои 0+ ?онро дорад 0Ё 1 Агар ягон миқдор илова карда нашуда бошад, пас тахмин карда мешавад, ки танҳо 1 элемент мавҷуд бошад. Агар ба мо яке аз як гурӯҳи унсурҳо лозим бошад, мо метавонем онро чунин нависем:
<!ELEMENT company ((name | offices))>
Он гоҳ яке аз унсурҳо интихоб карда мешавад: ном ё офисҳо, аммо агар ду нафари онҳо дар дохor ширкат вуҷуд дошта бошанд, пас санҷиш намегузарад. Шумо инчунин метавонед аҳамият диҳед, ки дар корманд калимаи EMPTY мавҷуд аст - ин маънои онро дорад, ки элемент бояд холӣ бошад. Инчунин ЯГОН - ҳама гуна унсурҳо вуҷуд дорад. #PCDATA - маълумоти матнӣ. ATTLIST Барои илова кардани атрибутҳо ба элементҳо истифода мешавад. Пас аз ATTLIST номи элементи дилхоҳро пайгирӣ мекунад ва пас аз он луғати шакли “номи атрибут - навъи атрибут” меояд ва дар охир шумо метавонед #IMPLIED (ихтиёрӣ) ё #REQUIRED (талаб) илова кунед. CDATA - маълумоти матнӣ. Намудҳои дигар вуҷуд доранд, аммо онҳо ҳама бо ҳарфҳои хурд навишта шудаанд. ENTITY ENTITY барои эълони ихтисорот ва матне, ки дар онҳо ҷойгир карда мешавад, истифода мешавад. Дар асл, мо метавонем дар XML ба ҷои матни пурра, танҳо номи an objectро бо аломати & пеш аз ва ; баъд аз. Масалан: барои фарқ кардани аломатгузории HTML ва танҳо аломатҳо, қавсаи кунҷи чап аксар вақт бо lt хориҷ карда мешавад; , шумо танҳо лозим аст, ки гузошта & пеш аз lt. Он гоҳ мо аломатгузориро истифода намебарем, балки танҳо аломати <ро истифода мебарем. Тавре ки шумо мебинед, ҳама чиз хеле оддӣ аст: шумо унсурҳоро эълон мекунед, фаҳмонед, ки унсурҳои эълоншуда кадом элементҳоро дар бар гирифта метавонанд, ба ин элементҳо атрибутҳо илова кунед ва агар хоҳед, шумо метавонед an objectҳоро барои кӯтоҳ кардани баъзе сабтҳо илова кунед. Ва дар ин ҷо шумо бояд пурсед: қоидаҳои моро дар файли XML чӣ гуна истифода бурдан мумкин аст? Дар ниҳоят, мо танҳо қоидаҳоро эълон кардем, аммо мо онҳоро дар XML истифода набурдем. Ду роҳи истифодаи онҳо дар XML вуҷуд дорад: 1. Ҷойгиркунӣ - навиштани қоидаҳои DTD дар дохor худи файли XML, танҳо элементи решаро пас аз калимаи калидии DOCTYPE нависед ва файли DTD-и моро дар дохor қавсҳои мураббаъ дохил кунед.
<?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. Воридот - мо тамоми қоидаҳои худро дар файли алоҳидаи DTD менависем, ки баъд аз он дар файли XML мо сохти DOCTYPE аз усули аввалро истифода мебарем, танҳо ба ҷои қавсҳои мураббаъ шумо бояд SYSTEM нависед ва роҳи мутлақ ё нисбиро ба ҷойгиршавии ҷории файл.
<?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>
Шумо инчунин метавонед калимаи калидии PUBLIC-ро ба ҷои СИСТЕМА истифода баред, аммо аз эҳтимол дур нест, ки он барои шумо муфид бошад. Агар шумо таваҷҷӯҳ дошта бошед, шумо метавонед дар бораи он (ва дар бораи СИСТЕМА низ) ба таври муфассал дар ин ҷо бихонед: пайванд . Ҳоло мо наметавонем унсурҳои дигарро бидуни эълони онҳо дар DTD истифода барем ва ҳама XML ба қоидаҳои мо итоат мекунанд. Шумо метавонед кӯшиш кунед, ки ин codeро дар IntelliJ IDEA дар файли алоҳида бо тамдиди .xml нависед ва кӯшиш кунед, ки баъзе унсурҳои нав илова кунед ё элементеро аз DTD-и мо хориҷ кунед ва бубинед, ки чӣ тавр IDE ба шумо хато нишон медиҳад. Аммо, DTD нуқсонҳои худро дорад:
  • Он синтаксиси худро дорад, ки аз синтаксиси xml фарқ мекунад.
  • DTD санҷиши навъи маълумот надорад ва танҳо сатрҳоро дар бар гирифта метавонад.
  • Дар DTD ягон фазои ном вуҷуд надорад.
Дар бораи мушкилоти синтаксиси худ: шумо бояд якбора ду синтаксисро фаҳмед: синтаксиси XML ва DTD. Онҳо гуногунанд ва ин метавонад шуморо ошуфта кунад. Инчунин, аз ин сабаб пайгирии хатогиҳо дар файлҳои бузурги XML дар якҷоягӣ бо ҳамон схемаҳои DTD мушкилтар аст. Агар чизе барои шумо кор накунад, шумо бояд миқдори зиёди матнро бо синтаксисҳои гуногун тафтиш кунед. Мисли хондани ду китоб дар як вақт: русӣ ва англисӣ. Ва агар дониши шумо дар бораи як забон бадтар бошад, пас фаҳмидани матн ҳамон қадар душвор хоҳад буд. Дар бораи мушкилоти санҷиши намуди додаҳо: атрибутҳо дар DTDҳо намудҳои гуногун доранд, аммо ҳамаашон дар асл, тасвири сатри чизе, рӯйхатҳо ё истинодҳо мебошанд. Аммо, шумо наметавонед танҳо рақамҳоро талаб кунед, хусусан рақамҳои мусбат ё манфӣ. Ва шумо метавонед дар бораи намудҳои an object комилан фаромӯш кунед. Масъалаи охирин дар мақолаи навбатӣ баррасӣ хоҳад шуд, ки он ба фазои номҳо ва схемаҳои XML бахшида мешавад, зеро муҳокимаи он дар ин ҷо бефоида аст. Ташаккур ба ҳама барои таваҷҷӯҳатон, ман кори зиёдеро анҷом додам ва идома медиҳам, то тамоми силсилаи мақолаҳоро сари вақт анҷом диҳам. Асосан, ман бояд танҳо схемаҳои XML-ро муайян кунам ва шарҳи онҳоро бо суханони равшантар баён кунам, то мақолаи 2-ро ба итмом расонам. Нисфи он аллакай иҷро шудааст, бинобар ин шумо метавонед онро ба зудӣ интизор шавед. Мақолаи охирин пурра ба кор бо файлҳои XML бо истифода аз Java бахшида мешавад. Барори кор ба ҳама ва муваффақият дар барномасозӣ :) Мақолаи навбатӣ: [Мусобиқа] Асосҳои XML барои барномасози Java - Қисми 2 аз 3
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION