JavaRush /Java блогы /Random-KK /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 файлдарын ағылшын тілін білетін кез келген адам оқи алады. Бұл мысалды ағаштың көмегімен бейнелеуге болады. Java бағдарламашысына арналған XML негіздері - 3-2-ден 1-бөлімАғаштың тамыры компания болып табылады. Ол сондай-ақ барлық басқа элементтер шығатын түбір (түбір) элемент болып табылады. Әрбір XML файлында тек бір түбір элементі болуы мүмкін. Ол xml файлы жарияланғаннан кейін жариялануы керек (мысалдағы бірінші жол) және барлық басқа элементтерді қамтуы керек. Декларация туралы аздап: бұл міндетті және құжатты XML ретінде анықтау үшін қажет. Оның үш псевдоатрибуттары бар (арнайы алдын ала анықталған атрибуттар): нұсқа (1.0 стандартына сәйкес), codeтау (codeтау) және автономды (автономия: иә және құжатқа сыртқы схемалар қосылған болса, онда қате пайда болады, әдепкі жоқ). Элементтер басқа элементтер мен атрибуттарды пайдаланып деректерді сақтайтын нысандар. Атрибуттар - элементті қосу кезінде көрсетілген элемент туралы қосымша ақпарат. Түсіндіруді 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 файлының ішінде нысан болса пайдалы. Мысалы:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
    <information>
        <![CDATA[<name>Ivan</name><age>26</age>]]>
    </information>
</bean>
XML туралы мәселе мынада: оны қалағаныңызша кеңейте аласыз: өз элементтеріңізді, өз атрибуттарыңызды пайдаланыңыз және оны қалағаныңызша құрылымдаңыз. Деректерді сақтау үшін атрибуттарды да, элементтерді де пайдалануға болады (бұрынғы мысалда көрсетілгендей). Дегенмен, сіз өзіңіздің элементтеріңіз бен атрибуттарыңызды жылдам және қалағаныңызша ойлап таба алатыныңызды түсінуіңіз керек, бірақ егер сіз басқа бағдарламашы атау элементін атрибуттарға жылжытқысы келетін жобада жұмыс істесеңіз ше, және сіздің бүкіл бағдарлама логикасы. бұл атау элемент болатындай жазылған? XML файлдарын тексеру және ережелер жобаңызда стандартқа айналатынына және оларды ешкім бұзbyteынына сенімді болу үшін қандай элементтер болуы керек, олардың қандай атрибуттары бар және басқа нәрселер туралы өз ережелеріңізді қалай жасауға болады? Өзіңіздің XML белгілеуіңіздің барлық ережелерін жазу үшін арнайы құралдар бар. Ең танымал: DTD және XML схемасы. Бұл мақалада тек біріншісі туралы айтылады.

DTD

DTD құжат түрлерін сипаттау үшін жасалады. DTD қазірдің өзінде ескіріп келеді және қазір XML-де белсенді түрде жойылуда, бірақ DTD пайдаланатын көптеген XML файлдары әлі де бар және жалпы алғанда оны түсіну пайдалы. DTD - XML ​​құжаттарын тексеру технологиясы . DTD құжат түріне арналған арнайы ережелерді жариялайды: оның элементтері, элементтің ішінде қандай элементтер болуы мүмкін, атрибуттар, олар қажет пе, жоқ па, олардың қайталану саны, сондай-ақ нысандар. 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+ *білдіреді 0+ ?білдіреді 0НЕМЕСЕ 1 Егер кванторлар қосылмаса, онда тек 1 элемент болуы керек деп есептеледі. Егер бізге элементтер тобының біреуі қажет болса, біз оны келесідей жаза аламыз:
<!ELEMENT company ((name | offices))>
Содан кейін элементтердің бірі таңдалады: атау немесе кеңселер, бірақ олардың екеуі компания ішінде болса, валидация өтпейді. Сіз сондай-ақ қызметкерде EMPTY сөзі бар екенін байқай аласыз - бұл элемент бос болуы керек дегенді білдіреді. Сондай-ақ кез келген элементтер бар. #PCDATA – мәтіндік деректер. ATTLIST Элементтерге атрибуттарды қосу үшін пайдаланылады. ATTLIST-тен кейін қажетті элементтің аты, одан кейін «атрибут атауы - атрибут түрі» пішінінің сөздігі шығады және соңында #IMPLIED (қосымша) немесе #REQUIRED (міндетті) қосуға болады. CDATA – мәтіндік деректер. Басқа түрлері бар, бірақ олардың барлығы кіші әріппен жазылған. ENTITY ENTITY аббревиатуралар мен оларға орналастырылатын мәтінді жариялау үшін пайдаланылады. Шындығында, біз XML-де толық мәтіннің орнына жай ғана және алдында & белгісі бар нысанның атын ғана пайдалана аламыз; кейін. Мысалы: HTML белгілеуін және жай таңбаларды ажырату үшін сол жақ бұрышты жақша жиі lt арқылы шығарылады; , lt алдына & қою керек. Сонда біз белгілеуді емес, жай < белгісін қолданамыз. Көріп отырғаныңыздай, бәрі өте қарапайым: сіз элементтерді жариялайсыз, жарияланған элементтер қандай элементтерді қамтуға қабілетті екенін түсіндіресіз, осы элементтерге атрибуттарды қосасыз және қажет болса, кейбір жазбаларды қысқарту үшін нысандарды қоса аласыз. Мұнда сіз мынаны сұрауыңыз керек: біздің ережелерді 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 кемшіліктері бар:
  • Оның xml синтаксисінен ерекшеленетін өзіндік синтаксисі бар.
  • DTD-де деректер түрін тексеру жоқ және тек жолдар болуы мүмкін.
  • DTD ішінде аттар кеңістігі жоқ.
Жеке синтаксис мәселесі туралы: сіз бірден екі синтаксисті түсінуіңіз керек: XML және DTD синтаксисі. Олар әртүрлі және бұл сізді шатастыруы мүмкін. Сондай-ақ, осыған байланысты үлкен XML файлдарындағы қателерді бірдей DTD схемаларымен бірге қадағалау қиынырақ. Егер бірдеңе сіз үшін жұмыс істемесе, әртүрлі синтаксиспен мәтіннің үлкен көлемін тексеру керек. Бұл екі кітапты қатар оқығандай: орысша және ағылшынша. Ал егер бір тілді білу нашар болса, мәтінді түсіну де сондай қиын болады. Деректер түрін тексеру мәселесі туралы: DTD-дегі атрибуттардың әртүрлі типтері бар, бірақ олардың барлығы, негізінен, бір нәрсенің, тізімдердің немесе сілтемелердің жолдық көрінісі болып табылады. Дегенмен, сіз тек сандарды талап ете алмайсыз, әсіресе оң немесе теріс емес. Ал сіз нысан түрлерін толығымен ұмыта аласыз. Соңғы мәселе келесі мақалада талқыланады, ол аттар кеңістігі мен XML схемаларына арналған, өйткені оны мұнда талқылау мағынасыз. Назарларыңызға рахмет, мен мақалалардың барлық сериясын уақытында аяқтау үшін көп жұмыс жасадым және оны жалғастырудамын. Негізінде, мен XML схемаларын анықтап, 2-ші мақаланы аяқтау үшін оларға түсінікті сөздермен түсініктеме беруім керек. Оның жартысы жасалды, сондықтан оны жақын арада күтуге болады. Соңғы мақала толығымен Java арқылы XML файлдарымен жұмыс істеуге арналған. Барлығына сәттілік және бағдарламалауда сәттілік :) Келесі мақала: [Байқау] Java бағдарламашысына арналған XML негіздері - 3 бөлімнің 2-бөлімі
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION