Asosiy XML konstruktsiyalari - XML ​​elementlari, teglar, atributlar, ishlov berish ko'rsatmalari, CDATA bo'limlari, sharhlar. XML elementlari. Bo'sh va bo'sh bo'lmagan XML elementlari

  • Tarjima
  • Oʻquv qoʻllanma

SQL in'ektsiyalari, saytlararo so'rovlarni soxtalashtirish, buzilgan XML ... Biz hammamiz himoyalanishni xohlaydigan qo'rqinchli, qo'rqinchli narsalar, lekin biz bularning barchasi nima uchun sodir bo'layotganini bilishni xohlaymiz. Ushbu maqola asosiy tushunchani tushuntiradi: satrlar va satrlar ichidagi satrlarni boshqarish.

Asosiy muammo - bu faqat matn. Ha, faqat matn - bu asosiy muammo. Ichkarida deyarli hamma narsa kompyuter tizimi matn bilan ifodalanadi (bu, o'z navbatida, baytlar bilan ifodalanadi). Ba'zi matnlar kompyuterlar uchun, boshqalari esa odamlar uchun mo'ljallangan bo'lishi mumkinmi? Ammo ikkalasi ham matn bo'lib qolmoqda. Men nima haqida gapirayotganimni tushunish uchun kichik bir misol:
Homo Sapiens deylik, inglizcha matn bor, men uni rus tiliga tarjima qilishni xohlamayman.
Siz ishonmaysiz: bu matn. Ba'zi odamlar uni XML deb atashadi, lekin bu shunchaki matn. O'qituvchiga ko'rsatish uchun mos kelmasligi mumkin. inglizchada, lekin bu hali ham faqat matn. Siz uni afishada chop etishingiz va u bilan mitinglarga chiqishingiz mumkin, onangga xat yozishingiz mumkin ... bu matn.

Biroq, biz ushbu matnning ba'zi qismlari kompyuterimiz uchun qandaydir ma'noga ega bo'lishini xohlaymiz. Biz kompyuterning matn muallifini va matnning o'zini alohida ajratib olishini istaymiz, shunda biz u bilan biror narsa qilishimiz mumkin. Masalan, yuqoridagini bunga aylantiring:
Aytaylik, ingliz tilidagi matn bor, men uni rus tiliga Homo Sapiens tomonidan tarjima qilishni xohlamayman.
Kompyuter buni qanday qilishni biladi? Xo'sh, chunki biz matnning ba'zi qismlarini va kabi kulgili qavslar ichida maxsus so'zlar bilan juda qulay tarzda o'rab oldik. Buni amalga oshirganimiz uchun, biz ushbu aniq qismlarni qidiradigan, matnni ajratib oladigan va o'zimizning ixtirolarimiz uchun ishlatadigan dastur yozishimiz mumkin.

Boshqacha qilib aytadigan bo'lsak, biz matnimizda ma'lum qoidalardan foydalanganmiz, xuddi shu qoidalarga rioya qilgan holda, boshqa birov foydalanishi mumkin bo'lgan maxsus ma'noni ko'rsatish uchun.
OK, buni tushunish unchalik qiyin emas. Agar biz matnimizda qandaydir alohida ma'noga ega bo'lgan bu kulgili qavslardan foydalanmoqchi bo'lsak-chi, lekin bu ma'noni ishlatmasdan?.. Bunga o'xshash narsa:
Homo sapiens< n and y >
"" belgilar alohida narsa emas. Ular yuqoridagi misolda bo'lgani kabi har qanday joyda, istalgan matnda qonuniy ravishda ishlatilishi mumkin. Ammo bizning maxsus so'zlar haqidagi fikrimiz haqida nima deyish mumkin? Bu qandaydir kalit so'z ekanligini anglatadimi? XMLda - ehtimol ha. Yoki, ehtimol, yo'q. Bu noaniq. Kompyuterlar noaniqliklar bilan shug'ullanishda unchalik yaxshi emasligi sababli, agar biz o'zimiz i-ga nuqta qo'ymasak va noaniqliklarni hal qilmasak, biror narsa kutilmagan natija berishi mumkin.
Bu dilemma noaniq belgilarni noaniq narsa bilan almashtirish orqali hal qilinishi mumkin.
Homo Sapiens Basic matematikasi shuni aytadiki, agar x< n and y >n, x y dan katta bo'lishi mumkin emas.
Endi matn mutlaqo aniq bo'lishi kerak. "".
Buning texnik ta'rifi ekranlash, biz maxsus belgilarning o'ziga xos ma'noga ega bo'lishini xohlamasak, ulardan qochamiz.
qochish |iˈskāp| [obj. yo'q. ] break free [ obj bilan. ] sezmaslik / eslamaslik [...] [ obj bilan. ] IT: boshqacha talqin qilish uchun sabab [...]
Agar matndagi ayrim belgilar yoki belgilar ketma-ketligi maxsus ma'noga ega bo'lsa, u holda bu belgilarni maxsus ma'noga murojaat qilmasdan ishlatish kerak bo'lgan vaziyatlarni qanday hal qilishni belgilaydigan qoidalar bo'lishi kerak. Yoki, boshqacha qilib aytganda, qochish savolga javob beradi: "Agar bu belgilar juda o'ziga xos bo'lsa, ularni matnimda qanday ishlatishim mumkin?".
Yuqoridagi misolda ko'rib turganingizdek, ampersand (&) ham maxsus belgidir. Ammo yozmoqchi bo'lsak nima bo'ladi?


Agar sizning foydalanuvchilaringiz yaxshi va mehribon bo'lsa, ular eski faylasuflarning iqtiboslarini joylashtiradilar va xabarlar quyidagicha ko'rinadi:

Platon tomonidan 2-yanvar, 15:31 da chop etilgan

Aytishlaricha, men "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore and dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex eaquat" dedim.


Agar foydalanuvchilar aqlli bo'lsa, ehtimol ular matematika haqida gapirishadi va xabarlar quyidagicha bo'ladi:

Paskal tomonidan 23-noyabr, 04:12 da chop etilgan

Asosiy matematika shuni aytadiki, agar x< n and y >n, x y dan katta bo'lishi mumkin emas.


Hmm... Yana qavsimizni buzg'unchilar. Xo'sh, texnik nuqtai nazardan ular noaniq bo'lishi mumkin, ammo brauzer buning uchun bizni kechiradi, to'g'rimi?


Xo'sh, to'xtang, nima bo'ldi? Ba'zi prankster forumingizga JavaScript teglarini kiritganmi? Saytingizda ushbu xabarni ko'rayotgan har bir kishi endi saytingiz kontekstida kim nima qilishi mumkin bo'lgan skriptlarni yuklab olib, bajarmoqda. Va bu yaxshi emas.

To'g'ridan-to'g'ri qabul qilinmasligi kerak Yuqoridagi holatlarda biz qandaydir tarzda JB yoki brauzerimizga bu shunchaki matn ekanligini aytmoqchimiz, u bilan hech narsa qilmang! Boshqacha qilib aytganda, biz barcha maxsus belgilarning maxsus ma'nolarini "olib tashlashni" xohlaymiz va kalit so'zlar foydalanuvchi tomonidan taqdim etilgan har qanday ma'lumotlardan, chunki biz unga ishonmaymiz. Nima qilsa bo'ladi?

Nima? Nima deyapsiz, bolam? Oh, siz "qalqon" deysizmi? Va siz mutlaqo haqsiz, pechene oling!
Agar foydalanuvchi ma'lumotlarini so'rov bilan birlashtirishdan oldin qochishni qo'llasak, muammo hal qilinadi. Bizning ma'lumotlar bazasi so'rovlarimiz uchun u shunday bo'ladi:
$name = $_POST["ism"]; $name = mysql_real_escape_string($name); $query = "foydalanuvchilardan telefon_raqamini tanlang WHERE name = "$name""; $natija = mysql_query($query);
Faqat bitta kod qatori, ammo endi hech kim bizning ma'lumotlar bazasini "buzishi" mumkin emas. Keling, foydalanuvchi kiritishiga qarab SQL so'rovlari qanday ko'rinishini yana ko'rib chiqamiz:
Aleks
FOYDALANILGANLARDAN TELEFON_raqamini TANlang QAYERDA nomi = "Aleks"
Mak Donalds
FOYDALANILGANLARDAN TELEFON_raqamini TANLANGAN QERDA nomi = "Mc\"Donalds"
Joe"; DROP TABLE foydalanuvchilari; --
foydalanuvchilarDAN telefon_raqamini TANGLASH QERDA nomi = "Joe\"; DROP TABLE foydalanuvchilari; --"
mysql_real_escape_string alohida ma'noga ega bo'lishi mumkin bo'lgan har qanday narsaning oldiga aniq chiziq qo'yadi.


Biz htmlspecialchars funksiyasini barcha foydalanuvchi maʼlumotlariga uni chiqarishdan oldin qoʻllaymiz. Endi zararkunanda xabari quyidagicha ko'rinadi:

18-iyul, 12:56 da JackTR tomonidan nashr etilgan


E'tibor bering, foydalanuvchilardan olingan qiymatlar aslida "buzilgan" emas. Har qanday brauzer buni HTML sifatida tahlil qiladi va ekranda hamma narsani to'g'ri shaklda ko'rsatadi.

Bu bizni yana bir narsaga qaytaradi... Yuqorida aytilganlarning barchasi ko'plab tizimlar uchun umumiy muammoni ko'rsatadi: matndagi matn maxsus belgilarga ega bo'lmasligi kerak bo'lsa, undan qochish kerak. Joylashtirish orqali matn qiymatlari SQLda ular SQL qoidalariga muvofiq qochishlari kerak. HTML-ga matn qiymatlarini qo'yishda, ular HTML qoidalariga muvofiq o'chirilishi kerak. Matn qiymatlarini (texnologiya nomi) joylashtirganda, ular (texnologiya nomi) qoidalariga muvofiq o'chirilishi kerak. Hammasi shu. Toʻliqlik uchun, albatta, foydalanuvchi kiritishi bilan shugʻullanishning boshqa usullari mavjud, ularda maxsus belgilar boʻlishi mumkin yoki boʻlmasligi mumkin:
  • Tasdiqlash
    Siz foydalanuvchi kiritgan ma'lumotlar berilgan spetsifikatsiyaga mos kelishini tekshirishingiz mumkin. Agar siz raqamni kiritishni talab qilsangiz va foydalanuvchi boshqa biror narsa kiritsa, dastur foydalanuvchini xabardor qilishi va kiritishni bekor qilishi kerak. Agar bularning barchasi to'g'ri tashkil etilgan bo'lsa, foydalanuvchi "42" ni kiritishi kerak bo'lgan "DROP TABLE foydalanuvchilari" ni ushlash xavfi yo'q. Bu HTML/SQL in'ektsiyasidan qochish uchun juda amaliy emas, chunki... Ko'pincha siz hiyla-nayranglarni o'z ichiga olishi mumkin bo'lgan erkin formatdagi matnni qabul qilishingiz kerak. Odatda, tekshirish boshqa chora-tadbirlarga qo'shimcha ravishda qo'llaniladi.
  • Sanitizatsiya
    Shuningdek, siz xavfli deb hisoblagan belgilarni “jimgina” olib tashlashingiz mumkin. Misol uchun, forumingizga qo'shilmasligi uchun HTML tegiga o'xshash narsalarni olib tashlang. Muammo shundaki, siz matnning mutlaqo qonuniy qismlarini olib tashlashingiz mumkin.
    Tayyorlangan SQL bayonotlari
    Biz xohlagan narsani bajaradigan maxsus funktsiyalar mavjud: ma'lumotlar bazasiga SQL so'rovining o'zi va foydalanuvchilar tomonidan taqdim etilgan ma'lumotlar o'rtasidagi farqlarni tushunishga imkon bering. PHP da ular shunday ko'rinadi:
    $stmt = $pdo->tayyorlash("telefon_raqamini FROM foydalanuvchilar QAYERDA nomi =?"); $stmt->execute($_POST["ism"]);
    Bunday holda, jo'natish so'rov va o'zgaruvchilarni aniq ajratib turadigan ikki bosqichda amalga oshiriladi. Ma'lumotlar bazasi birinchi navbatda so'rovning tuzilishini tushunish va keyin uni qiymatlar bilan to'ldirish qobiliyatiga ega.

  • Haqiqiy dunyoda bularning barchasi turli darajadagi himoya uchun birgalikda ishlatiladi. Foydalanuvchi to'g'ri ma'lumotlarni kiritayotganiga ishonch hosil qilish uchun siz doimo tekshirishdan foydalanishingiz kerak. Keyin kiritilgan ma'lumotlarni skanerlashingiz mumkin (lekin shart emas). Agar foydalanuvchi sizga biron bir skriptni sotmoqchi bo'lsa, uni shunchaki o'chirib tashlashingiz mumkin. Keyin har doim foydalanuvchi ma'lumotlarini SQL so'roviga qo'yishdan oldin qochishingiz kerak (HTML uchun ham xuddi shunday).

Uzoq vaqt davomida standart odatdagi tirnoq belgilarini qo'yishni buyurgan HTML matn konstruksiyadan foydalaning "Ichki teglar uchun tirnoq belgilari" atributlarni belgilash uchun ishlatiladi.

Biroq, men haligacha “hech qanday tegdan tashqarida” oddiy belgisini qo‘shtirnoq ichida ko‘rsatmaydigan brauzerni uchratganim yo‘q.Demak, aziz hamkasblar, ayting-chi, “tashqi teglar hech kimga kerak bo‘lmagan zerikarlilikdir?” Xotirjamlik bilan va ortiqcha gapsiz "" deb yoza olasizmi? Ayniqsa, tirnoq belgilari ko'p bo'lgan matnlarda va qat'iy dizayn qoidalariga rioya qilish (milliy tirnoq belgilaridan to'g'ri foydalanish bo'yicha) ahamiyatsiz.

IMHO, ko'p odamlar buni qilishadi ... lekin savol unchalik aniq emas: agar siz standartlarga muvofiq tirnoqlarni "" deb yozishingiz kerakligini tushunsangiz, lekin ko'plab saytlar shunday ishlashiga qaramay, bu dangasa, unda nima qilish kerak? Menimcha, gap shu haqida ketyapti, brauzerlarning yangi versiyalarida tirnoqlarni ko'rsatish qo'llab-quvvatlanadimi yoki yo'qligini hech kim bilmaydi, shuning uchun biz aniq tavsiyalar berishimiz mumkin: agar siz kelajakda muammolarni xohlamasangiz, 100% - standartlarga rioya qiling :) Lekin siz buni allaqachon bilasiz.Yoki siz tasdiqlashni kutyapsizmi: ha, hammasi zerikarli, buni unuting va 10 yildan keyin hammasi avvalgidek bo'ladi, men (Microsoft, Mozilla va boshqalar). ) kafolat?

Lin "Qahva odam"[dosye]
ha, aytmoqchi ... endi o'qish foydalidir, hech bir joyda tirnoq belgilari shaklda ko'rsatilishi kerakligi aytilmagan "
http://www2.stack.ru/~julia/HTML401/charset.html:

Ba'zi mualliflar qo'sh qo'shtirnoq (") misollarini kodlash uchun """ belgi ob'ekt havolasidan foydalanadilar, chunki bu belgi atribut qiymatlarini ajratish uchun ishlatilishi mumkin.

ob'ektdan foydalanishingiz kerakligi haqida u faqat va & haqida aytadi:

Agar muallif matnda "" belgisini (ASCII o'nlik kodi 62) joylashtirmoqchi bo'lsa.

Belgilar havolalari bilan chalkashmaslik uchun (belgilar ma'lumotnomasining bosh belgisi) "&" belgisi o'rniga "&" havolasi (ASCII o'nlik kodi 38) ishlatilishi kerak. Bundan tashqari, "&" havolasi atribut qiymatlarida ham qo'llanilishi kerak, chunki CDATA atribut qiymatlari ichida belgilarga murojaat qilishga ruxsat beriladi.

Ammo men Linning javobiga o'xshash narsani kutyapman: aslida bunday standart yo'q. Bu xayolimga ham kelmagan - mening ma'lumotlarim mashhur darsliklardan olingan va "hamma buni qiladi" degan sabablarga ko'ra.

Yoki boshqa variant: lekin agar siz mening amaliyotimda uchramagan yangi standartlarga amal qilsangiz - xhtml kabi (aniq, men xhtmlni tekshirdim), unda bu hiyla ishlamaydi. Shuning uchun, yozilgan HTML kodning ko'chishi bilan bog'liq muammolarni yaratishga hojat yo'q.

Yoki nihoyat: buni o'zingiz qanday qilasiz?

&, aytmoqchi, shunga o'xshash savol tug'diradi. Yuqoridagi hujjatda "chalkashmaslik uchun" deyilgan. Ammo chalkashlik faqatgina & dan keyin taqdim etilgan kodlardan biri bo'lsa mumkin. Aytaylik, "..../script?A=1&B=2" kabi URL bo'lsa-chi? Agar bu URL manzilni href sifatida xato qilib ko‘rsatsam (albatta, sinov paytida to‘g‘ri ishlaydi) biror narsani xavf ostiga qo‘yamanmi? 10 yil ichida (sayt eskirgan yoki allaqachon o'n marta qayta yozilgan bo'lsa) ob'ekt yakuniy nomsiz &B nomli ekstravagant nomi bilan paydo bo'lishi ehtimoli juda kam bo'lgan vaziyatdan boshqa narsa; ? Boshqacha qilib aytganda, bunday holatlarning barchasini qanchalik ehtiyotkorlik bilan tekshirish kerak?

Doniyor, agar sizda mavjud kodlar bilan hech qanday muammo yo'qligiga ishonchingiz komil bo'lsa, oddiygina & yozishingiz mumkin. Agar kelajakda yangi kod paydo bo'lsa, menimcha, u aniq emas, deb e'lon qilinadi HTML spetsifikatsiyalari 4.01, shuning uchun u odatda e'lon qilingan hujjatga ta'sir qilmasligi kerak. Yoki kelajakdagi standartlarni qo'llab-quvvatlashni kutmoqdasiz oddiy o'zgarish hujjat konturlari?

Daniel Alievskiy[dosye]
XMLda matn sifatida oddiy tirnoq belgisi ham hech qanday muammo tug'dirmaydi (mos ravishda, XHTMLda, albatta). IMHO tirnoqlari odatda "faqat bir sababga ko'ra "ga tarjima qilinadi - XML/HTML/XHTML-ga almashtirishda matnni xavfsiz shaklga aylantirish uchun ikkita funktsiya yozishni xohlamaysiz.

Ushbu darsning maqsadi:

  • BI XML yozish formatini bilishi kerak
  • BI hujjatni XML kodi shaklida tuza olishi kerak
  • BI ma'lumotlar turlarini bilishi va ulardan foydalana olishi kerak
  • Eslatma: XML biz ushbu qo'llanmada tasvirlanganidek qisqa emas. Biz faqat XML tilining ODA-TM tizimida qo'llaniladigan xususiyatlarini ko'rib chiqamiz.

    XML. Asos

    XML axborotni tuzish, saqlash va tashish uchun yaratilgan.

    Quyidagi misol, "Do'stdan do'stga eslatma" XML shakliga ega:

    Nikolay Ivan Eslatma Umid qilamanki, siz bizning uchrashuvimizni unutmagansiz

    Vizual ravishda ushbu kod quyidagi shaklda ifodalanishi mumkin (1-rasm).

    Kodda ma'lumotni jo'natuvchi va qabul qiluvchisi bor, u shuningdek xabarning sarlavhasi va tanasiga ega.

    U kimdir tomonidan qayta ishlanishi, yuborilishi va ko'rsatilishi uchun mo'ljallangan.

    Biroq, bu XML hujjati hech narsa qilmaydi. Bu faqat teglarga o'ralgan ma'lumotlar.

    XML - daraxt

    XML daraxt tuzilishiga ega. Hujjatda har doim ildiz elementi mavjud (ko'rsatma daraxtga hech qanday aloqasi yo'q). Daraxt elementining har doim avlodlari va ajdodlari bo'ladi, bundan ajdodlari bo'lmagan ildiz elementi va avlodlari bo'lmagan o'lik elementlar (daraxt barglari) bundan mustasno. Daraxtning har bir elementi ma'lum bir uyalar darajasida joylashgan (bundan buyon matnda "daraja" deb yuritiladi). Xuddi shu darajadagi elementlar oldingi va keyingi elementlarga ega.

    XML yordamida o'z teglaringizni yarating

    Teglar (deskriptorlar, elementlar) yaratish uchun standart format mavjud emas.

    XML-da oldindan belgilangan teglar yo'q.

    • XML muallifga o'z teglari va o'zining hujjat tuzilishini belgilash imkonini beradi.
    • XML ma'lumotlarni uzatish uchun ishlatiladi
    • XML - bu ma'lumotlarni uzatish uchun dasturiy va apparatdan mustaqil vosita.
    • XML endi veb uchun HTML kabi muhim
    • XML turli xil ilovalar o'rtasida ma'lumotlarni uzatish uchun eng keng tarqalgan vositadir
    • XML veb-ishlab chiqishning ko'p jihatlarida, ko'pincha ma'lumotlarni saqlash va almashishni soddalashtirish uchun ishlatiladi
    XML sintaksisi

    XML qoidalarining sintaksisi juda sodda va mantiqiy

    • Barcha XML elementlari yopish tegiga ega bo'lishi kerak
    • XML elementlari to'g'ri joylashtirilishi kerak (bir-birining ichiga va hech qanday holatda kesishmaydi)
    • XML hujjatlarida ildiz elementi boʻlishi kerak (XML hujjatlarida barcha boshqa elementlarning ota-onasi boʻlgan bitta element boʻlishi kerak. Bu element ildiz elementi deb ataladi.
    • XML atributining qiymati qo'shtirnoq ichiga olinishi kerak.
    Izohlar

    Agar siz XML hujjatining ba'zi bir qismini analizator dasturi uchun butunlay "ko'rinmas" qilishingiz kerak bo'lsa, uni oldidagi belgilarni yozib, sharh sifatida formatlashingiz mumkin.< !-- , а после него - символы -->ketma-ket ikkita tire bilan.

    Masalan:

    < !-- Это комментарий -->

    Analizator dasturi bu tuzilmani hatto unga "ko'rmasdan" ham o'tkazib yuboradi.

    Ushbu sharh sintaksisi unga ikkita cheklov qo'yadi:

    • Izohda ketma-ket ikkita tire yoza olmaysiz;
    • izohni tire bilan tugatish mumkin emas.
    XML elementlari

    XML elementi - bu elementning boshlang'ich tegidan tortib, yakuniy tegigacha.

    Element quyidagilarni o'z ichiga olishi mumkin:

    • boshqa elementlar
    • matn
    • atributlar
    • yoki yuqoridagilarning barchasining kombinatsiyasi ...
    XML nomlash qoidalari

    XML elementlari quyidagi nomlash qoidalariga amal qilishi kerak:

    • Ismlar harflar, raqamlar va boshqa belgilarni o'z ichiga olishi mumkin
    • Ismlar raqam yoki tinish belgisi bilan boshlanmaydi
    • Ismlar bo'sh joyni o'z ichiga olmaydi
    Atributlar

    Atributlar beradi Qo'shimcha ma'lumot ma'lumotlarning bir qismi bo'lmagan elementlar haqida.

    Quyidagi misolda fayl turi ma'lumotlarga taalluqli emas, lekin elementni boshqarishi mumkin bo'lgan dasturiy ta'minot uchun muhim:

    kompyuter.gif

    XML atributlari qo'shtirnoq ichiga olinishi kerak

    Atribut qiymatlari har doim tirnoq ichida bo'lishi kerak. Bitta yoki ikkita tirnoqdan foydalanish mumkin. Misol: odamning jinsini aniqlash uchun elementni quyidagicha yozish mumkin:

    Agar atribut qiymatining o'zi qo'sh tirnoq bo'lsa, siz foydalanishingiz mumkin yagona tirnoq, bu misoldagi kabi:

    yoki belgilar obyektlaridan foydalanishingiz mumkin: &&

    Sana ma'lumotlar turidan foydalanishning ba'zi misollari

    Sana atribut sifatida

    Tove Jani eslatmasi Bu hafta oxiri meni unutmang!

    Element sifatida sana

    10/01/2008 Tove Jani eslatmasi Bu dam olish kunlari meni unutmang!

    Sana kengaytirilgan element sifatida

    01/10/2008 Tove Jani eslatmasi Bu dam olish kunlari meni unutmang!

    Metadata atributlari

    Ushbu identifikatorlar XML elementlarini aniqlash uchun ishlatilishi mumkin.

    Misol:

    Tove Jani eslatmasi Bu dam olish kunlari meni unutmang! Jani Tove Re: Eslatma Men buni unutmayman

    Ma'lumotlar haqidagi ma'lumotlar atributlar sifatida, ma'lumotlarning o'zi esa elementlar sifatida saqlanishi kerak.

    XML. Ma'lumotlar turi O'rnatilgan oddiy turlar Sana va vaqt
    • dateTime formatdagi sana va vaqtni o'z ichiga oladi CCYY-AA-DTs:dd:ss
    • davomiyligi - Gregorian kunlar, soatlar, daqiqalar va soniyalarda ifodalangan vaqtinchalik davomiylikni ifodalaydi.

    Masalan: rekord P1Y2M3DT10H30M45S bir yil (1Y), ikki oy (2M), uch kun (3DT), o'n soat (10H), o'ttiz daqiqa (30M) va 45 soniya (45S) degan ma'noni anglatadi.

    Kirish qisqartirilishi mumkin P120M 120 oy, T120M esa 120 daqiqani bildiradi.

    • vaqt oddiy formatdagi vaqtni o'z ichiga oladi hs:dd:ss
    • sana formatdagi sanani o'z ichiga oladi CCYY-AA-DD
    • gYearMonth formatda yil va oyni ajratadi CCYY-MM
    • gYear formatdagi yilni bildiradi CCYY
    • gMonthDay formatida oy va kunni o'z ichiga oladi MM-DD
    • Oyning gDay kuni formatida DD
    • gMonth oyi formatida MM
    Belgilar qatorlari

    string asosiy belgilar turidir.

    Unicode belgilar ketma-ketligi sifatidagi belgilar qatori, jumladan, boʻsh joy, yorliq, karetka qaytishi va satr uzatish belgilari.

    • normalizedString - bu turning pastki turi - bu qatorlar bo'lib, ularda "\n" qatorlari, karetkalar "\r" va gorizontal yorliqlar "\t" mavjud emas.
      • token - normalizedString turining pastki turi - yo'q, oldingi va keyingi bo'shliqlar va bir nechta ketma-ket bo'shliqlar bundan mustasno.
        • til - RFC 1766 tavsiyasiga binoan til nomini yozish uchun belgilangan token subtipi, masalan, ru, en, de, fr.
        • NMTOKEN - tokenning pastki turi bo'lib, faqat atributlarda ularning sanab o'tilgan qiymatlarini yozish uchun ishlatiladi.
        • Ism - XML ​​nomlaridan tashkil topgan tokenning kichik turi - harflar, raqamlar, defislar, nuqtalar, ikki nuqta, pastki chiziq, harf bilan boshlanadigan ketma-ketlik (harflarning zaxiralangan ketma-ketligidan tashqari). X, x, M, m, L, l holatlarning har qanday kombinatsiyasida) yoki pastki chiziq. Satr bilan boshlanadigan ismlar xml, XML spetsifikatsiyasining o'zi tomonidan ishlatiladi.
          • NCName - ikki nuqta bo'lmagan nomning pastki turi. Uchta kichik tur aniqlangan: ID, IDREF, ENTITY
    Ikkilik turlari
    • boolen - ikkilik, mantiqiy. Qabul qiladi qiymatlar: True yoki False (1 yoki 0)
    • base64Binary - Base64 kodlangan ikkilik tamsayılar
    • hexBinary - qo'shimcha belgilarsiz o'n oltilik ko'rinishdagi ikkilik butun sonlar
    Haqiqiy raqamlar
    • o'nlik - qat'iy nuqta bilan yozilgan haqiqiy sonlar: 123,45, -0,48747798 va boshqalar.
    • double va float turlari IEEE754-85 standartiga mos keladi, sobit yoki suzuvchi nuqta bilan yozilgan.
    Butun sonlar
    • integer - tartibli nol bo'lgan raqamlarni o'z ichiga olgan asosiy butun son turi, pastki tur sifatida tushuniladi kasr
    • raqam - raqamni belgilaydi (raqamlar soniga cheklovlarsiz); belgisi, kasr va darajani o'z ichiga olishi mumkin. Qadriyatlar o'zgaradi

    1,7976931348623157E+308 dan 2,2250738585072014E-308 gacha

    Biz yana XMLni o'rganishni davom ettiramiz va ushbu maqolada biz ko'rsatmalar, sharhlar, atributlar va boshqa XML elementlarini qayta ishlash kabi XML konstruktsiyalari bilan tanishamiz. Ushbu elementlar asosiy bo'lib, standartga qat'iy muvofiq ravishda har qanday murakkablikdagi hujjatlarni moslashuvchan tarzda belgilashga imkon beradi.

    Oldingi maqolada XML teglari kabi ba'zi fikrlarni qisman muhokama qildik. Endi biz ushbu mavzuga yana bir bor to'xtalib, uni batafsilroq ko'rib chiqamiz. Bu XML konstruksiyalarining toʻliq rasmini olishingizni osonlashtirish uchun maxsus qilingan.

    XML elementlari. Bo'sh va bo'sh bo'lmagan XML elementlari

    Oldingi maqolada aytib o'tilganidek, XML-dagi teglar HTML-dagi kabi matnni shunchaki belgilab qo'ymaydi, balki alohida elementlarni (ob'ektlarni) ajratib ko'rsatadi. O'z navbatida, elementlar hujjatdagi ma'lumotlarni ierarxik tartibga soladi, bu esa o'z navbatida ularni XML tilining asosiy tarkibiy bo'linmalariga aylantirdi.

    XMLda elementlar ikki xil bo'lishi mumkin - bo'sh va bo'sh bo'lmagan. Bo'sh elementlarda matn yoki boshqa konstruktsiyalar kabi ma'lumotlar mavjud emas. Bo'sh elementlardan farqli o'laroq, bo'sh bo'lmagan elementlar matn yoki boshqa XML elementlari va konstruktsiyalari kabi har qanday ma'lumotlarni o'z ichiga olishi mumkin. Yuqoridagi fikrni tushunish uchun bo'sh va bo'sh bo'lmagan XML elementlari misollarini ko'rib chiqaylik.

    Bo'sh XML elementi

    Bo'sh bo'lmagan XML elementi

    Element tarkibi...

    Yuqoridagi misoldan ko'rinib turibdiki, bo'sh elementlardan bo'sh bo'lmagan elementlarning asosiy farqi shundaki, ular faqat bitta tegdan iborat. Bundan tashqari, shuni ta'kidlash kerakki, XML-da barcha nomlar katta-kichik harflarga sezgir. Bu myElement, MyElement, MYELEMENT va boshqalar nomlarini bildiradi. bir-biridan farq qiladi, shuning uchun bu daqiqa Kelajakda xatolarga yo'l qo'ymaslik uchun darhol eslash kerak.
    Shunday qilib, biz elementlarni aniqladik. Endi navbatdagi nuqtaga, ya'ni XML hujjatlarining mantiqiy tashkil etilishiga o'tamiz.

    XML hujjatlarini mantiqiy tashkil etish. XML ma'lumotlarining daraxt tuzilishi

    Esingizda bo'lsa, XML tilining asosiy konstruktsiyasi boshqa ichki konstruksiyalarni o'z ichiga olishi va shu bilan hosil bo'lishi mumkin bo'lgan elementlardir. ierarxik tuzilish daraxt ko'rinishi. Ushbu holatda asosiy element ildiz bo'ladi va boshqa barcha bolalar XML daraxtining shoxlari va barglari bo'ladi.

    Yuqoridagilarni tushunishni osonlashtirish uchun quyidagi rasmni misol bilan ko'rib chiqamiz.

    Ko'rib turganimizdek, XML hujjatini daraxt sifatida tashkil qilish ishlov berish uchun juda oddiy tuzilmadir. Shu bilan birga, daraxtning o'ziga xos murakkabligi juda katta. Daraxt tasviri ob'ektlarni XMLda tasvirlashning eng maqbul usuli hisoblanadi.

    XML atributlari. XMLda atributlarni yozish qoidalari

    XML-da elementlar, shuningdek, bitta yoki qo'sh tirnoq ichida joylashtirilgan qiymatlari bo'lgan atributlarni o'z ichiga olishi mumkin. Element uchun atribut quyidagicha o'rnatiladi:

    Bunday holda, "atribut" nomi va "qiymat" qiymatiga ega atribut ishlatilgan. Shuni ta'kidlash kerakki, XML atributi ma'lum qiymatga ega bo'lishi kerak va bo'sh bo'lmasligi kerak. Aks holda, kod XML nuqtai nazaridan noto'g'ri bo'ladi.

    Qo'shtirnoqlardan foydalanishga ham e'tibor qaratish lozim. Atribut qiymatlari bitta yoki ikkita tirnoq ichiga olinishi mumkin. Bundan tashqari, ba'zi tirnoqlarni boshqalar ichida ishlatish ham mumkin. Ko'rsatish uchun quyidagi misollarni ko'rib chiqing.

    Boshqa XML konstruksiyalarini ko'rib chiqishdan oldin, atributlarni yaratishda ampersand "&" yoki burchakli qavslar "" kabi maxsus belgilarni qiymat sifatida ishlatib bo'lmasligini ham ta'kidlash kerak. Bu belgilar boshqaruv belgilari sifatida saqlangan (“&” ob’ekt, “” element tegini ochadi va yopadi) va ularni “sof shaklda” ishlatib bo‘lmaydi. Ulardan foydalanish uchun siz maxsus belgilarni almashtirishga murojaat qilishingiz kerak.

    XML ishlov berish bo'yicha ko'rsatmalar (qayta ishlash ko'rsatmalari). XML deklaratsiyasi

    XML ma'lum bir hujjatni qayta ishlovchi ilovalar uchun maxsus ma'lumotlarni o'z ichiga olgan hujjatga ko'rsatmalarni kiritish qobiliyatiga ega. XML-da ishlov berish bo'yicha ko'rsatmalar quyidagicha yaratilgan.

    Yuqoridagi misoldan ko'rinib turibdiki, XML-da ishlov berish bo'yicha ko'rsatmalar savol belgisi bilan burchak tirnoqlari ichiga olingan. Bu biz birinchi PHP darslarida ko'rib chiqqan odatdagiga o'xshaydi. Qayta ishlash bo'yicha yo'riqnomaning birinchi qismida ushbu yo'riqnomaning ikkinchi qismi yoki uning mazmuni mo'ljallangan dastur yoki tizim ko'rsatilgan. Biroq, qayta ishlash bo'yicha ko'rsatmalar faqat ular yuborilgan ilovalar uchun amal qiladi. Qayta ishlash bo'yicha ko'rsatmalarga misol sifatida quyidagi ko'rsatma bo'lishi mumkin.

    Shuni ta'kidlash kerakki, XML qayta ishlash ko'rsatmalariga juda o'xshash maxsus konstruktsiyaga ega, ammo uning o'zi bitta emas. Bu protsessorga uzatiladigan XML deklaratsiyasi dasturiy ta'minot XML hujjatining xususiyatlari haqidagi ba'zi ma'lumotlar, masalan, kodlash, ushbu hujjat yozilgan tilning versiyasi va boshqalar.

    Yuqoridagi misoldan ko'rinib turibdiki, XML deklaratsiyasida biz yuqorida aytib o'tgan oddiy atributlarga juda o'xshash psevdoatributlar mavjud. Gap shundaki, ta'rifiga ko'ra, XML deklaratsiyasi va ishlov berish ko'rsatmalari atributlarni o'z ichiga olmaydi, shuning uchun bu deklaratsiyalar psevdo-atributlar deb ataladi. Kelajakda turli xil xatolarga yo'l qo'ymaslik uchun buni yodda tutish kerak.

    Pseudo-atributlar bilan shug'ullanganimiz sababli, keling, ular nimani anglatishini ko'rib chiqaylik.

    • Kodlash - XML ​​hujjatini kodlash uchun javobgardir. Odatda UTF8 kodlash qo'llaniladi.
    • Versiya - bu hujjat yozilgan XML tilining versiyasi. Odatda bu XML 1.0 versiyasidir.

    Xo'sh, endi maqolaning yakuniy qismiga o'tamiz va sharhlar va CDATA bo'limlari kabi XML konstruktsiyalarini ko'rib chiqamiz.

    Assalomu alaykum, aziz sayt mehmonlari! Keling, XML belgilash tili mavzusini davom ettiramiz va atributlardan foydalanishni ko'rib chiqamiz. Atributlar xuddi HTMLdagi kabi XML elementlarida ham bo'lishi mumkin. Atributlar element haqida qo'shimcha ma'lumot beradi.

    XML atributlari

    IN HTML atributlari elementlar haqida qo'shimcha ma'lumot bering:

    XML atributlari qo'shtirnoq ichiga olinishi kerak

    Qiymatlar xml-dagi atributlar har doim qo'shtirnoq ichiga olinishi kerak. Bitta va qo'sh tirnoqlardan ham foydalanish mumkin. Shaxs elementining jinsini ko'rsatish uchun uni quyidagicha yozishingiz mumkin:

    Agar atribut qiymatining o'zi qo'sh tirnoq bo'lsa, ushbu misoldagi kabi bitta tirnoqdan foydalanishingiz mumkin:

    XML elementlari va atributlar

    Quyidagi misollarni ko'rib chiqing:

    Viktoriya
    Petrova

    ayol
    Viktoriya
    Petrova

    Birinchi misolda jinsiy aloqa atributdir. Ikkinchisida jinsiy aloqa element hisoblanadi. Ikkala misol ham bir xil ma'lumotlarni beradi.

    Atributlarni qachon ishlatish va elementlardan qachon foydalanish haqida hech qanday qoidalar yo'q. Atributlar HTMLda qulay. XMLda men ulardan qochishni maslahat beraman. Buning o'rniga elementlardan foydalaning.

    Mening sevimli yo'lim

    Quyidagi uchta XML hujjati aynan bir xil ma'lumotlarni o'z ichiga oladi:

    XML sana atributi birinchi misolda ishlatiladi:

    Kengaytirilgan sana elementi uchinchisida ishlatiladi: (BU MENING SEVGAN YO'LIM):



    10
    01
    2008

    Piter
    Sveta
    Eslatma

    XML atributlaridan qochingmi?

    xml atributlaridan foydalanish bilan bog'liq ba'zi muammolar:

    • atributlar bir nechta qiymatlarni o'z ichiga olmaydi (elementlar bo'lishi mumkin)
    • atributlar daraxt tuzilmalarini o'z ichiga olmaydi (elementlar mumkin)
    • atributlarni kengaytirish qiyinroq (kelajakdagi o'zgarishlar uchun)

    Buni shunday qilmang:


    Metadata uchun XML atributlari


    Vasya
    Sveta
    Eslatma
    Ertaga menga qo'ng'iroq qilishni unutmang!


    Sveta
    Vasya
    Re: Eslatma
    KELISHDIKMI

    Yuqoridagi id atributlari turli qaydlarni aniqlash uchun ishlatiladi. Ular eslatmaning bir qismi emas.

    Bu erda aytmoqchi bo'lgan narsa metadata (ma'lumotlar haqidagi ma'lumotlar) xml atributlari sifatida saqlanishi va ma'lumotlarning o'zi elementlar sifatida saqlanishi kerak.

    E'tiboringiz uchun rahmat!.