JavaRush /Blog Java /Random-MS /Asas XML untuk Pengaturcara Java - Bahagian 1 daripada 3
Ярослав
Tahap
Днепр

Asas XML untuk Pengaturcara Java - Bahagian 1 daripada 3

Diterbitkan dalam kumpulan
XML ialah format yang sangat popular dan fleksibel pada masa kini. Setiap pengaturcara harus memahaminya, ia mesti ada. Banyak teknologi hari ini secara aktif menggunakannya, dan yang moden adalah antaranya.
Asas XML untuk Pengaturcara Java - Bahagian 1 daripada 3 - 1

pengenalan

Halo, pembaca artikel saya yang dihormati. Saya ingin mengatakan dengan segera bahawa ini hanyalah artikel pertama dalam siri tiga artikel saya. Matlamat utama keseluruhan siri ini adalah untuk memulakan setiap pembaca ke dalam XML dan memberi, jika bukan penjelasan dan pemahaman yang lengkap, maka sekurang-kurangnya dorongan yang baik ke arahnya, menerangkan perkara dan perkara utama. Keseluruhan kitaran adalah untuk satu pencalonan - "Perhatian terhadap perincian" , dan pembahagian kepada 3 artikel dibuat agar sesuai dengan had aksara dalam siaran dan membahagikan sejumlah besar bahan kepada bahagian yang lebih kecil untuk pemahaman yang lebih mendalam. Artikel pertama akan ditumpukan kepada XML itu sendiri dan apa itu, serta salah satu cara untuk mencipta skema untuk fail XML - DTD. Sebagai permulaan, saya ingin membuat mukadimah kecil untuk mereka yang belum biasa dengan XML: tidak perlu takut. XML tidak begitu rumit dan harus difahami oleh mana-mana pengaturcara, kerana ia adalah format fail yang sangat fleksibel, cekap dan popular hari ini untuk menyimpan pelbagai maklumat yang anda inginkan. XML digunakan dalam Ant, Maven, Spring. Mana-mana pengaturcara memerlukan pengetahuan tentang XML. Sekarang anda telah mengumpulkan kekuatan dan motivasi, mari mulakan belajar. Saya akan cuba meletakkan semua bahan semudah mungkin, mengumpul hanya yang paling penting dan tidak masuk ke dalam rumpai.

XML

Untuk penjelasan yang lebih jelas, adalah lebih baik untuk menggambarkan XML dengan contoh.
<?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 dan XML adalah serupa dalam sintaks kerana mereka mempunyai induk yang sama - SGML. Walau bagaimanapun, dalam HTML hanya terdapat teg tetap bagi standard tertentu, manakala dalam XML anda boleh mencipta teg, atribut anda sendiri dan, secara amnya, melakukan apa sahaja yang anda mahu menyimpan data mengikut cara yang sesuai dengan anda. Malah, fail XML boleh dibaca oleh sesiapa sahaja yang mengetahui bahasa Inggeris. Contoh ini boleh digambarkan menggunakan pokok. Asas XML untuk Pengaturcara Java - Bahagian 1 daripada 3 - 2Akar pokok itu ialah Syarikat. Ia juga merupakan unsur akar (akar) dari mana semua unsur lain datang. Setiap fail XML hanya boleh mempunyai satu elemen akar. Ia mesti diisytiharkan selepas pengisytiharan fail xml (baris pertama dalam contoh) dan mengandungi semua elemen lain. Sedikit tentang pengisytiharan: ia adalah wajib dan diperlukan untuk mengenal pasti dokumen sebagai XML. Ia mempunyai tiga pseudo-atribut (atribut pratakrif khas): versi (mengikut standard 1.0), pengekodan (pengekodan) dan kendiri (autonomi: jika ya dan skema luaran disambungkan ke dokumen, maka akan berlaku ralat, lalai adalah tidak). Elemen ialah entiti yang menyimpan data menggunakan elemen dan atribut lain. Atribut ialah maklumat tambahan tentang elemen yang ditentukan semasa menambah elemen. Jika kami menterjemah penjelasan ke dalam medan OOP, kami boleh memberikan contoh berikut: kami mempunyai kereta, setiap kereta mempunyai ciri (warna, kapasiti, jenama, dll.) - ini adalah atribut, dan terdapat entiti yang berada di dalam kereta. : pintu, tingkap, enjin , stereng adalah elemen lain. Anda boleh menyimpan sifat sama ada sebagai elemen individu atau sebagai atribut, bergantung pada keinginan anda. Lagipun, XML ialah format yang sangat fleksibel untuk menyimpan maklumat tentang apa sahaja. Selepas penjelasan, kita hanya perlu melihat contoh di atas untuk segala-galanya jatuh ke tempatnya. Dalam contoh, kami menerangkan struktur syarikat yang mudah: terdapat sebuah syarikat yang mempunyai nama dan pejabat, dan di pejabat terdapat pekerja. Elemen Pekerja dan Pejabat ialah elemen pembungkus - ia berfungsi untuk mengumpul elemen jenis yang sama, pada asasnya menggabungkannya ke dalam satu set untuk memudahkan pemprosesan. Lantai dan bilik patut diberi perhatian khusus. Ini adalah sifat-sifat pejabat (lantai dan nombor), dengan kata lain, sifat-sifatnya. Jika kita mempunyai elemen "imej", maka kita boleh memindahkan dimensinya. Anda mungkin perasan bahawa syarikat tidak mempunyai atribut nama, tetapi mempunyai elemen nama. Anda hanya boleh menerangkan struktur seperti yang anda mahukan. Tiada siapa yang mewajibkan anda untuk menulis semua sifat elemen hanya dalam atribut; anda boleh menggunakan hanya elemen dan menulis beberapa data di dalamnya. Sebagai contoh, kami boleh merekodkan nama dan jawatan pekerja kami sebagai atribut:
<?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>
Seperti yang anda lihat, kini nama dan jawatan setiap pekerja adalah sifatnya. Dan anda boleh perhatikan bahawa tiada apa-apa di dalam entiti pekerja (tag), semua elemen pekerja kosong. Kemudian anda boleh menjadikan pekerja sebagai elemen kosong - tutupnya serta-merta selepas mengisytiharkan atribut. Ini dilakukan dengan mudah, cuma tambah garis miring:
<?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>
Seperti yang anda lihat, dengan menutup elemen kosong, kami mengekalkan keseluruhan integriti maklumat dan memendekkan rekod, menjadikan maklumat lebih ringkas dan mudah dibaca. Untuk menambah ulasan (teks yang akan dilangkau semasa menghuraikan fail) dalam XML, terdapat sintaks berikut:
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
Dan pembinaan terakhir ialah CDATA , yang bermaksud "data watak". Terima kasih kepada reka bentuk ini, adalah mungkin untuk menulis teks yang tidak akan ditafsirkan sebagai penanda XML. Ini berguna jika anda mempunyai entiti dalam fail XML yang menyimpan penanda XML dalam maklumat. Contoh:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
    <information>
        <![CDATA[<name>Ivan</name><age>26</age>]]>
    </information>
</bean>
Perkara tentang XML ialah anda boleh memanjangkannya walau bagaimanapun anda mahu: gunakan elemen anda sendiri, atribut anda sendiri, dan susunkannya mengikut kehendak anda. Anda boleh menggunakan kedua-dua atribut dan elemen untuk menyimpan data (seperti yang ditunjukkan dalam contoh sebelum ini). Walau bagaimanapun, anda perlu memahami bahawa anda boleh menghasilkan elemen dan atribut anda sendiri dengan cepat dan bagaimanapun anda mahu, tetapi bagaimana jika anda bekerja pada projek di mana pengaturcara lain mahu memindahkan elemen nama ke dalam atribut, dan keseluruhan logik program anda ditulis supaya nama itu adalah unsur? Bagaimanakah anda boleh membuat peraturan anda sendiri tentang elemen yang sepatutnya, apakah atribut yang mereka ada dan perkara lain, supaya anda boleh mengesahkan fail XML dan memastikan bahawa peraturan itu akan menjadi standard dalam projek anda dan tiada siapa yang akan melanggarnya? Untuk menulis semua peraturan markup XML anda sendiri, terdapat alat khas. Yang paling terkenal: DTD dan Skema XML. Artikel ini hanya akan bercakap tentang yang pertama.

DTD

DTD dicipta untuk menerangkan jenis dokumen. DTD sudah menjadi usang dan kini ditinggalkan secara aktif dalam XML, tetapi masih terdapat banyak fail XML yang menggunakan DTD dan, secara umum, ia berguna untuk difahami. DTD ialah teknologi untuk mengesahkan dokumen XML . DTD mengisytiharkan peraturan khusus untuk jenis dokumen: elemennya, elemen apa yang boleh ada di dalam elemen, atribut, sama ada ia diperlukan atau tidak, bilangan ulangannya, serta Entiti. Sama seperti XML, DTD boleh digambarkan dengan contoh untuk penjelasan yang lebih jelas.
<!-- Объявление возможных элементов -->
<!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">
Di sini kita mempunyai contoh mudah. Dalam contoh ini, kami mengisytiharkan keseluruhan hierarki kami daripada contoh XML: pekerja, pekerja, pejabat, pejabat, nama, syarikat. Untuk mencipta fail DTD, terdapat 3 binaan utama yang digunakan untuk menerangkan mana-mana fail XML: ELEMENT (untuk menerangkan elemen), ATTLIST (untuk menerangkan atribut bagi elemen) dan ENTITY (untuk menggantikan teks dengan bentuk yang disingkatkan). ELEMEN Digunakan untuk menerangkan sesuatu unsur. Elemen yang boleh digunakan dalam elemen yang diterangkan disenaraikan dalam kurungan dalam bentuk senarai. Anda boleh menggunakan pengkuantiti untuk menunjukkan kuantiti (ia adalah serupa dengan pengkuantiti daripada ungkapan biasa): +bermakna 1+ *bermaksud 0+ ?bermaksud 0ATAU 1 Jika tiada pengkuantiti ditambah, maka diandaikan hanya ada 1 elemen. Jika kita memerlukan salah satu daripada sekumpulan elemen, kita boleh menulisnya seperti ini:
<!ELEMENT company ((name | offices))>
Kemudian salah satu elemen akan dipilih: nama atau pejabat, tetapi jika terdapat dua daripadanya di dalam syarikat, maka pengesahan tidak akan lulus. Anda juga boleh melihat bahawa dalam pekerja terdapat perkataan KOSONG - ini bermakna elemen mesti kosong. Terdapat juga SETIAP - mana-mana elemen. #PCDATA – data teks. ATTLIST Digunakan untuk menambah atribut pada elemen. Selepas ATTLIST mengikut nama elemen yang diingini, dan selepas itu kamus bentuk "nama atribut - jenis atribut", dan pada akhirnya anda boleh menambah #TERIMPLIED (pilihan) atau #DIPERLUKAN (diperlukan). CDATA – data teks. Terdapat jenis lain, tetapi semuanya adalah huruf kecil. ENTITI ENTITI digunakan untuk mengisytiharkan singkatan dan teks yang akan diletakkan padanya. Sebenarnya, kami hanya akan dapat menggunakan dalam XML, bukannya teks penuh, hanya nama entiti dengan tanda & sebelum dan ; selepas. Contohnya: untuk membezakan antara penanda HTML dan hanya aksara, kurungan sudut kiri selalunya dilepaskan dengan lt; , anda hanya perlu meletakkan & sebelum lt. Kemudian kami tidak akan menggunakan markup, tetapi hanya simbol <. Seperti yang anda boleh lihat, semuanya agak mudah: anda mengisytiharkan elemen, menerangkan elemen apa yang boleh dimuatkan oleh elemen yang diisytiharkan, menambah atribut kepada elemen ini dan, jika dikehendaki, anda boleh menambah entiti untuk memendekkan beberapa entri. Dan di sini anda perlu bertanya: bagaimana untuk menggunakan peraturan kami dalam fail XML kami? Lagipun, kami hanya mengisytiharkan peraturan, tetapi kami tidak menggunakannya dalam XML. Terdapat dua cara untuk menggunakannya dalam XML: 1. Membenamkan - menulis peraturan DTD di dalam fail XML itu sendiri, cuma tulis elemen akar selepas kata kunci DOCTYPE dan sertakan fail DTD kami di dalam kurungan segi empat sama.
<?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 - kami menulis semua peraturan kami dalam fail DTD yang berasingan, selepas itu dalam fail XML kami menggunakan pembinaan DOCTYPE dari kaedah pertama, hanya daripada kurungan persegi anda perlu menulis SYSTEM dan menentukan laluan mutlak atau relatif ke lokasi semasa fail.
<?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>
Anda juga boleh menggunakan kata kunci AWAM dan bukannya SYSTEM, tetapi ia tidak mungkin berguna kepada anda. Jika anda berminat, anda boleh membaca mengenainya (dan tentang SISTEM juga) secara terperinci di sini: pautan . Kini kami tidak boleh menggunakan elemen lain tanpa mengisytiharkannya dalam DTD, dan semua XML tertakluk kepada peraturan kami. Anda boleh cuba menulis kod ini dalam IntelliJ IDEA dalam fail berasingan dengan sambungan .xml dan cuba menambah beberapa elemen baharu atau mengalih keluar elemen daripada DTD kami dan perhatikan bagaimana IDE akan menunjukkan ralat kepada anda. Walau bagaimanapun, DTD mempunyai kelemahannya:
  • Ia mempunyai sintaksnya sendiri, berbeza daripada sintaks xml.
  • DTD tidak mempunyai semakan jenis data dan hanya boleh mengandungi rentetan.
  • Tiada ruang nama dalam DTD.
Mengenai masalah sintaks anda sendiri: anda mesti memahami dua sintaks serentak: sintaks XML dan DTD. Mereka berbeza dan ini mungkin membuat anda keliru. Selain itu, kerana ini, adalah lebih sukar untuk menjejaki ralat dalam fail XML yang besar bersama-sama dengan skema DTD yang sama. Jika sesuatu tidak berfungsi untuk anda, anda perlu menyemak sejumlah besar teks dengan sintaks yang berbeza. Ia seperti membaca dua buku pada masa yang sama: dalam bahasa Rusia dan Inggeris. Dan jika pengetahuan anda tentang satu bahasa lebih teruk, maka memahami teks akan sama sukarnya. Mengenai masalah pemeriksaan jenis data: atribut dalam DTD memang mempunyai jenis yang berbeza, tetapi semuanya, pada terasnya, representasi rentetan sesuatu, senarai atau pautan. Walau bagaimanapun, anda tidak boleh menuntut nombor sahaja, dan terutamanya bukan nombor positif atau negatif. Dan anda boleh melupakan sepenuhnya jenis objek. Masalah terakhir akan dibincangkan dalam artikel seterusnya, yang akan ditumpukan kepada ruang nama dan skema XML, kerana membincangkannya di sini adalah sia-sia. Terima kasih atas perhatian anda semua, saya telah melakukan banyak kerja dan terus melakukannya untuk menyelesaikan keseluruhan siri artikel tepat pada masanya. Pada asasnya, saya hanya perlu memikirkan skema XML dan menghasilkan penjelasan mengenainya dalam perkataan yang lebih jelas untuk menyelesaikan artikel ke-2. Separuh daripadanya sudah siap, jadi anda boleh menjangkakannya tidak lama lagi. Artikel terakhir akan ditumpukan sepenuhnya untuk bekerja dengan fail XML menggunakan Java. Semoga berjaya kepada semua orang dan berjaya dalam pengaturcaraan :) Artikel seterusnya: [Pertandingan] Asas XML untuk Pengaturcara Java - Bahagian 2 daripada 3
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION