JavaRush /Java блогу /Random-KY /Java программист үчүн XML негиздери - 3түн 1-бөлүгү
Ярослав
Деңгээл
Днепр

Java программист үчүн XML негиздери - 3түн 1-бөлүгү

Группада жарыяланган
XML бүгүнкү күндө абдан популярдуу жана ийкемдүү формат болуп саналат. Ар бир программист аны түшүнүшү керек, бул жөн гана болушу керек. Бүгүнкү күндө көптөгөн технологиялар кошулган, алар аны жигердүү колдонушат жана алардын арасында заманбап технологиялар бар.
Java программист үчүн XML негиздери - 3-1ден 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 файлдарын англис тorн билген адам окуй алат. Бул мисал дарактын жардамы менен сүрөттөлүшү мүмкүн. Java программист үчүн XML негиздери - 3-2ден 1-бөлүкДарактын тамыры компания болуп саналат. Ал ошондой эле бардык башка элементтер келип чыккан тамыр (тамыр) элементи болуп саналат. Ар бир XML файлында бир гана тамыр элементи болушу мүмкүн. Ал xml файлын жарыялоодон кийин жарыяланышы керек (мисалы биринчи сап) жана башка бардык элементтерди камтышы керек. Декларация жөнүндө бир аз: бул милдеттүү жана XML катары documentти аныктоо үчүн зарыл. Анын үч псевдоатрибуттары бар (өзгөчө алдын ала аныкталган атрибуттар): version (1.0 стандартына ылайык), codeдоо (codeдоо) жана автономия (автономия: ооба жана тышкы схемалар documentке туташтырылган болсо, анда ката пайда болот, демейки жок). Элементтер башка элементтерди жана атрибуттарды колдонуу менен маалыматтарды сактаган an objectилер. Атрибуттар - бул элементти кошууда көрсөтүлгөн элемент жөнүндө кошумча маалымат. Эгерде түшүндүрүүнү OOP талаасына которсок, анда биз төмөнкү мисалды келтирсек болот: бизде унаа бар, ар бир машинанын мүнөздөмөлөрү бар (түсү, кубаттуулугу, маркасы ж.б.) - булар атрибуттар жана унаанын ичинде болгон субъекттер бар : эшиктер, терезелер, мотор , руль башка элементтери болуп саналат. Каалооңузга жараша касиеттерди жеке элементтер катары же атрибуттар катары сактай аласыз. Анткени, XML эч нерсе жөнүндө маалыматты сактоо үчүн өтө ийкемдүү формат болуп саналат. Түшүндүрмөлөрдөн кийин бардыгы ордуна келиши үчүн жогорудагы мисалды карап чыгышыбыз керек. Мисалда биз жөнөкөй компания түзүмүн сүрөттөп бердик: аты жана кеңселери бар компания бар, ал эми кеңселерде кызматкерлер бар. Кызматкерлер жана Кеңселердин элементтери орогуч элементтери болуп саналат - алар бир эле түрдөгү элементтерди чогултуу үчүн кызмат кылат, аларды кайра иштетүү жеңилдиги үчүн бир топтомго бириктирет. Пол жана бөлмө өзгөчө көңүл бурууга татыктуу. Бул кеңсенин атрибуттары (кабат жана номер), башкача айтканда, анын касиеттери. Эгерде бизде "сүрөт" элементи болсо, анда анын өлчөмдөрүн өткөрүп алмакпыз. Компаниянын атрибуту жок, бирок аталыш элементи бар экенин байкасаңыз болот. Сиз жөн гана структураларды каалагандай сүрөттөй аласыз. Эч ким сизди элементтердин бардык касиеттерин атрибуттарда гана жазууга милдеттендирбейт, сиз жөн гана элементтерди колдонуп, алардын ичине кээ бир маалыматтарды жаза аласыз. Мисалы, биз кызматкерлерибиздин аты-жөнүн жана кызмат ордун атрибут катары жаза алабыз:
<?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>
Көрүнүп тургандай, азыр ар бир кызматкердин аты-жөнү, кызматы анын атрибуттары болуп саналат. Жана сиз кызматкердин (тегинин) ичинде эч нерсе жок экенин байкасаңыз болот, бардык кызматкер элементтери бош. Андан кийин сиз кызматкерди бош элемент кыла аласыз - атрибуттарды жарыялагандан кийин дароо жаап салыңыз. Бул жөнөкөй эле жасалат, жөн гана сызык кошуу:
<?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>
Көрүнүп тургандай, бош элементтерди жабуу менен биз маалыматтын бүтүндүгүн сактап калдык жана жазууну абдан кыскартып, маалыматты кыскараак жана окула турган кылып койдук. XMLде комментарийди (файлды талдоодо өткөрүп жибере турган текст) кошуу үчүн төмөнкү синтаксис бар:
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
Ал эми акыркы курулуш CDATA болуп саналат , бул "мүнөзү маалыматтар" дегенди билдирет. Бул дизайндын аркасында XML белгилөө катары чечмеленбей турган текст жазууга болот. Бул маалыматта XML белгилерин сактаган XML файлынын ичинде an objectиңиз болсо пайдалуу. Мисал:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
    <information>
        <![CDATA[<name>Ivan</name><age>26</age>]]>
    </information>
</bean>
XML жөнүндө нерсе, сиз аны каалагандай кеңейте аласыз: өз элементтериңизди, өз атрибуттарыңызды колдонуңуз жана аны каалагандай түзүңүз. Маалыматтарды сактоо үчүн атрибуттарды да, элементтерди да колдоно аласыз (мурда мисалда көрсөтүлгөндөй). Бирок, сиз өзүңүздүн элементтериңизди жана атрибуттарыңызды тез арада жана сиз каалагандай таба аларыңызды түшүнүшүңүз керек, бирок сиз башка программист атрибуттарга аталыш элементин жылдыргысы келген долбоордо иштесеңиз эмне болот жана программаңыздын логикасы. аты элемент болгон деп жазылган? XML файлдарын текшерип, эрежелер долбооруңузда стандарт болуп, аларды эч ким бузбай турганына ишенүү үчүн, кандай элементтер болушу керектиги, алардын атрибуттары жана башка нерселер жөнүндө өз эрежелериңизди кантип түзө аласыз? Өзүңүздүн XML белгилөөнүн бардык эрежелерин жазуу үчүн атайын куралдар бар. Эң белгилүү: DTD жана XML схемасы. Бул макалада биринчи жөнүндө сөз болот.

DTD

DTD documentтердин түрлөрүн сүрөттөө үчүн түзүлгөн. DTD мурунтан эле эскирип, XMLде активдүү түрдө ташталып жатат, бирок DTD колдонгон көптөгөн XML файлдары бар жана жалпысынан аны түшүнүү пайдалуу. DTD - XML ​​documentтерин текшерүү үчүн технология . DTD documentтин түрү үчүн конкреттүү эрежелерди жарыялайт: анын элементтери, элементтин ичинде кандай элементтер болушу мүмкүн, атрибуттар, алар керекпи же жокпу, алардын кайталанууларынын саны, ошондой эле Объекттер. 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 файлдарын түзүү үчүн ар кандай XML файлдарын сүрөттөө үчүн колдонулган 3 негизги конструкция бар: ELEMENT (элементтерди сүрөттөө үчүн), ATTLIST (элементтердин атрибуттарын сүрөттөө үчүн) жана ENTITY (кыскартылган формалар менен текстти алмаштыруу үчүн). ELEMENT Элементти сүрөттөө үчүн колдонулат. Сүрөттөлгөн элементтин ичинде колдонула турган элементтер тизмек түрүндөгү кашаанын ичинде келтирилген. Санды көрсөтүү үчүн кванторлорду колдонсоңуз болот (алар туруктуу сөз айкаштарынын кванторлоруна окшош): +билдирет билдирет билдирет 1+ *ЖЕ Эч кандай кванторлор кошулбаган болсо, анда 1 эле элемент болушу керек деп болжолдонот. Эгер бизге элементтер тобунун бири керек болсо, биз аны төмөнкүдөй жаза алабыз: 0+ ?01
<!ELEMENT company ((name | offices))>
Андан кийин элементтердин бири тандалып алынат: аты же кеңселери, бирок компаниянын ичинде алардын экөөсү бар болсо, анда валидация өтпөй калат. Сиз ошондой эле кызматкерде EMPTY деген сөз бар экенин байкасаңыз болот - бул элемент бош болушу керек дегенди билдирет. Ошондой эле ар кандай элементтер бар. #PCDATA – тексттик маалыматтар. ATTLIST элементтерге атрибуттарды кошуу үчүн колдонулат. ATTLISTден кийин керектүү элементтин аталышы, андан кийин “атрибуттун аталышы - атрибут түрү” түрүндөгү сөздүк чыгат жана аягында #IMPLIED (милдеттүү эмес) же #REQUIRED (милдеттүү) кошо аласыз. CDATA – тексттик маалыматтар. Башка түрлөрү бар, бирок алардын баары кичине тамгалар. ENTITY ENTITY аббревиатураларды жана аларга жайгаштырыла турган текстти жарыялоо үчүн колдонулат. Чынында, биз жөн гана XMLде толук тексттин ордуна, алдында & белгиси бар an objectтин атын гана колдоно алабыз жана ; кийин. Мисалы: HTML белгилөө менен жөн гана символдорду айырмалоо үчүн, сол бурчтуу кашаа көбүнчө lt менен качат; , lt алдына & коюу керек. Анда биз белгилөө эмес, жөн гана < белгисин колдонобуз. Көрүнүп тургандай, бардыгы жөнөкөй: сиз элементтерди жарыялайсыз, жарыяланган элементтер кандай элементтерди камтый аларын түшүндүрөсүз, бул элементтерге атрибуттарды кошосуз жана эгер кааласаңыз, кээ бир жазууларды кыскартуу үчүн an objectтерди кошо аласыз. Жана бул жерде сиз сурашыңыз керек: биздин эрежелерди XML файлыбызда кантип колдонсо болот? Анткени, биз жөн гана эрежелерди жарыяладык, бирок биз аларды XMLде колдонгон жокпуз. Аларды XMLде колдонуунун эки жолу бар: 1. Киргизүү - XML ​​файлынын ичинде DTD эрежелерин жазуу, жөн гана DOCTYPE ачкыч сөзүнөн кийин тамыр элементин жазыңыз жана биздин DTD файлыбызды төрт бурчтуу кашаанын ичине коюңуз.
<?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>
SYSTEMдин ордуна PUBLIC ачкыч сөзүн да колдонсоңуз болот, бирок ал сизге пайдалуу болушу күмөн. Эгер сизди кызыктырса, бул жөнүндө (жана СИСТЕМА жөнүндө да) бул жерден кененирээк окуй аласыз: шилтеме . Эми биз башка элементтерди DTDде жарыялабай туруп колдоно албайбыз жана бардык XML биздин эрежелерге баш ийет. Сиз бул codeду IntelliJ IDEA ичинде .xml кеңейтүүсү менен өзүнчө файлга жазып көрүңүз жана кээ бир жаңы элементтерди кошуп же DTDден бир элементти алып салып көрүңүз жана IDE сизге катаны кантип көрсөтөрүн байкаңыз. Бирок, DTD анын кемчorктери бар:
  • Анын xml синтаксисинен айырмаланып, өзүнүн синтаксиси бар.
  • DTD маалымат түрүн текшербейт жана саптарды гана камтышы мүмкүн.
  • DTDде аттар мейкиндиги жок.
Өзүңүздүн синтаксисиңиздин көйгөйү жөнүндө: сиз бир эле учурда эки синтаксисти түшүнүшүңүз керек: XML жана DTD синтаксиси. Алар ар кандай жана бул сизди чаташтырышы мүмкүн. Ошондой эле, ушундан улам, ошол эле DTD схемалары менен бирге чоң XML файлдарындагы каталарды көзөмөлдөө кыйыныраак. Эгер бир нерсе сиз үчүн иштебесе, анда сиз ар кандай синтаксистер менен чоң көлөмдөгү текстти текшеришиңиз керек. Бул бир эле учурда эки китепти: орус жана англис тилдеринде окугандай. Ал эми бир тилде бorмиң начар болсо, текстти түшүнүү да ошондой эле кыйын болот. Берorштердин түрүн текшерүү маселеси жөнүндө: DTDдеги атрибуттардын ар кандай түрлөрү бар, бирок алардын бардыгы, өзөгүндө, бир нерсенин, тизмелердин же шилтемелердин саптуу чагылдырылышы. Бирок, сиз сандарды гана талап кыла албайсыз, өзгөчө оң же терс эмес. Жана сиз an objectтин түрлөрү жөнүндө толугу менен унута аласыз. Акыркы маселе кийинки макалада талкууланат, ал аттар мейкиндигине жана XML схемаларына арналган, анткени бул жерде аны талкуулоо маанисиз. Көңүл бурганыңыз үчүн рахмат, мен макалалардын бардык сериясын өз убагында бүтүрүү үчүн көп иштерди жасадым жана жасайм. Негизинен, мен жөн гана XML схемаларын түшүнүшүм керек жана 2-статьяны бүтүрүү үчүн аларга түшүнүктүү сөздөр менен түшүндүрмө беришим керек. Анын жарымы бүттү, ошондуктан жакында күтсө болот. Акыркы макала толугу менен Java аркылуу XML файлдары менен иштөөгө арналат. Баарына ийгorк жана программалоодо ийгorк :) Кийинки макала: [Конкурс] Java программист үчүн XML негиздери - 2/3 бөлүгү
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION