uy - Internetni sozlash
Sinflar va nomlar maydoni. Sinflar va nomlar bo'shliqlari Ismlar bo'shliqlaridan foydalanish va e'lon qilish

Sinflar va nomlar maydoni

.NET Framework sinflari

Ehtimol, boshqariladigan kodni yozishning eng katta foydasi - hech bo'lmaganda ishlab chiquvchi nuqtai nazaridan - siz undan foydalana olasiz. .NET tayanch sinf kutubxonasi .

.NET asosiy sinflari boshqariladigan kod sinflarining katta to'plamini taqdim etadi, bu sizga avval Windows API yordamida hal qilinishi mumkin bo'lgan deyarli har qanday muammoni hal qilish imkonini beradi. Bu sinflarning barchasi bitta merosga ega bir xil IL ob'ekt modeliga amal qiladi. Bu shuni anglatadiki, siz istalgan .NET tayanch sinflaridan ob'ektlar yaratishingiz yoki ulardan o'z sinflaringizni meros qilib olishingiz mumkin.

.NET tayanch sinflarini farq qiladigan jihati shundaki, ular intuitiv va ishlatish uchun qulay qilib yaratilgan. Masalan, mavzuni boshlash uchun siz sinfning Start() usulini chaqirishingiz kerak Ip. TextBox ob'ektini mavjud bo'lmasligi uchun ob'ektning Enabled xususiyatini "false" ga o'rnating. Kutubxonalardan foydalanish juda oson bo'lgan Visual Basic va Java dasturchilariga tanish bo'lgan ushbu yondashuv GetDIBits(), RegisterWndClassEx() va IsEqualIID() kabi API funksiyalari bilan yillar davomida kurashgan C++ dasturchilari uchun katta yengillik bo'ladi. oyna tutqichlarini o'tkazishni talab qiladigan ko'plab funktsiyalar.

Biroq, C++ ishlab chiquvchilari har doim Windows API larining to‘liq to‘plamiga oson kirish imkoniga ega bo‘lishgan, Visual Basic 6 va Java dasturchilari esa o‘z tillaridan kiradigan asosiy operatsion tizim funksiyalari bilan chegaralangan. .NET tayanch sinflari Visual Basic va Java kutubxonalaridan foydalanish qulayligini Windows API funksiyalar to‘plamini nisbatan to‘liq qamrab olish bilan birlashtiradi. Ko'pgina Windows xususiyatlariga asosiy sinflar orqali kirish mumkin emas va bunday hollarda siz API funktsiyalariga murojaat qilishingiz kerak bo'ladi, lekin umuman olganda bu faqat eng ekzotik funktsiyalarga tegishli. Kundalik foydalanish uchun, odatda, asosiy sinflar to'plami etarli bo'ladi. Ammo agar siz API funksiyasini chaqirishingiz kerak bo'lsa, u holda .NET deb atalmishni ta'minlaydi platformani ishga tushirish mexanizmi, bu ma'lumotlar turini to'g'ri konvertatsiya qilishni kafolatlaydi, shuning uchun endi bu vazifa kod qaysi tilda yozilganidan qat'i nazar, C#, C++ yoki Visual Basic 2010 da to'g'ridan-to'g'ri C++ kodidan ushbu funksiyalarni chaqirishdan ko'ra qiyinroq emas.

Nom maydonlari

Nom maydonlari.NET sinflar o'rtasidagi nomlash ziddiyatlarini oldini olish usulidir. Ular mijozni ifodalovchi sinfni belgilab, uni Mijoz deb ataydigan va keyin boshqa birov xuddi shu ishni qiladigan vaziyatlarning oldini olish uchun mo'ljallangan (bu juda keng tarqalgan stsenariy).

Nomlar maydoni ma'lumotlar turlari guruhidan boshqa narsa emas, lekin u nomlar maydonidagi barcha ma'lumotlar turlarining nomlari avtomatik ravishda nom maydoni nomi bilan oldindan belgilanishi ta'siriga ega. Nom maydonlari bir-birining ichiga joylashtirilishi mumkin. Masalan, umumiy maqsadli .NET tayanch sinflarining aksariyati nomlar maydonida joylashgan Tizim. Asosiy sinf Massiv bu bo'shliqqa ishora qiladi, shuning uchun uning to'liq nomi System.Array.

.NET platformasi barcha nomlarning nomlar maydonida e'lon qilinishini talab qiladi; masalan, siz o'z sinfingizni qo'yishingiz mumkin MyClass nom maydoniga Mening kompaniyam. Keyin bu sinfning to'liq nomi o'xshash bo'ladi MyCompany.MyClass.

E'tibor bering, agar nom maydoni aniq ko'rsatilmagan bo'lsa, tur nomsiz global nom maydoniga qo'shiladi.

Aksariyat hollarda Microsoft kamida ikkita ichki nom maydonidan foydalanishni tavsiya qiladi: birinchisi kompaniyangiz nomi, ikkinchisi esa sinfga tegishli bo'lgan texnologiya yoki dasturiy ta'minot paketining nomi, shuning uchun u quyidagicha ko'rinadi: MyCompany.SomeNamespace .MyClass. Ko'pgina hollarda, bu yondashuv ilovangiz sinflarini boshqa kompaniyalarning ishlab chiquvchilari tomonidan yozilgan sinf nomlari bilan yuzaga kelishi mumkin bo'lgan ziddiyatlardan himoya qiladi.

Quyidagi jadvalda .NET da taklif qilingan nom maydonlarining ayrimlarining (lekin hammasi emas) qisqa roʻyxati berilgan, ular funksionallik asosida guruhlarga boʻlingan:

.NET Framework kalit nom maydonlari
.NET da nomlar maydoni Tavsif
Tizim Nomlar maydoni ichida Tizim ichki ma'lumotlar, matematika, tasodifiy sonlarni yaratish, atrof-muhit o'zgaruvchilari va axlat yig'ish bilan ishlash uchun juda ko'p foydali turlarni, shuningdek, bir qator tez-tez ishlatiladigan istisnolar va atributlarni o'z ichiga oladi.
Tizim.To'plamlar
Tizim.Toʻplamlar.Umumiy
Bu nomlar maydonida bir qancha konteyner turlari, shuningdek, maxsus kollektsiyalar yaratish imkonini beruvchi bir nechta asosiy turlar va interfeyslar mavjud.
Tizim.Ma'lumotlar
System.Data.Common
System.Data.EntityClient
System.Data.SqlClient
Bu nomlar bo'shliqlari ADO.NET yordamida ma'lumotlar bazalari bilan o'zaro ishlash uchun ishlatiladi
System.IO
System.IO.Compression
System.IO.Ports
Ushbu bo'shliqlar fayllarni kiritish-chiqarish, ma'lumotlarni siqish va portni manipulyatsiya qilish uchun mo'ljallangan ko'plab turlarni o'z ichiga oladi.
Tizim.Ko'zgu
System.Reflection.Emit
Bu nomlar bo'shliqlari dinamik tip yaratish bilan bir qatorda ish vaqti turini aniqlashni qo'llab-quvvatlaydigan turlarni o'z ichiga oladi
System.Runtime.InteropServices Bu nomlar maydoni .NET turlarining "boshqarilmaydigan kod" (masalan, C-ga asoslangan DLL va COM serverlari) bilan o'zaro ta'siriga ruxsat berishingiz mumkin bo'lgan vositalarni o'z ichiga oladi.
Tizim.Chizma
System.Windows.Forms
Ushbu nomlar bo'shliqlari mahalliy .NET (Windows Forms) grafik asboblar to'plamidan foydalangan holda ish stoli ilovalarini yaratish uchun ishlatiladigan turlarni o'z ichiga oladi.
System.Windows
System.Windows.Controls
System.Windows.Shapes
Kosmos System.Windows Windows Presentation Foundation (WPF) grafik vositalari to'plamini ifodalovchi ushbu bir nechta nom maydonlarining ildizidir.
System.Linq
System.Xml.Linq
System.Data.DataSetExtensions
Ushbu nom maydonlari LINQ API yordamida dasturlashda foydalaniladigan turlarni o'z ichiga oladi
System.Web Bu nomlar maydoni ASP.NET veb-ilovalarini yaratish imkonini beruvchi ko'plab sohalardan biridir
System.ServiceModel Bu nom maydoni Windows Communication Foundation (WCF) API yordamida taqsimlangan ilovalarni yaratishda foydalanishingiz mumkin bo'lgan ko'plab dasturlardan biridir.
System.Workflow.Runtime
Tizim.Ish oqimi.Faoliyatlar
Ushbu ikkita nom maydoni Windows Workflow Foundation (WWF) API yordamida ish oqimini qo'llab-quvvatlaydigan ilovalarni yaratish uchun ishlatiladigan turlarni o'z ichiga olgan ko'plab nom maydonlarining asosiy vakillari hisoblanadi.
Tizim.Threading
Tizim.Threading.Vazifalar
Ushbu nom maydoni ish yukini bir nechta protsessorlarga taqsimlay oladigan ko'p tarmoqli ilovalarni yaratish uchun ko'plab turlarni o'z ichiga oladi.
Tizim. Xavfsizlik Xavfsizlik .NET dunyosiga xosdir. Xavfsizlik bilan bog'liq nom maydonlari ruxsatlar, kriptografik xavfsizlik va boshqalar bilan shug'ullanadigan ko'plab turlarni o'z ichiga oladi.
System.Xml Ushbu XML-yo'naltirilgan nom maydoni XML ma'lumotlari bilan o'zaro ishlash uchun ishlatilishi mumkin bo'lgan ko'plab turlarni o'z ichiga oladi

Microsoft ildiz maydonining roli

Jadvaldagi ro'yxatni ko'rib chiqayotganda, tizim nomlari maydoni munosib miqdordagi ichki nomlar bo'shliqlarining (masalan, System.IO, System.Data va boshqalar) ildizi ekanligini payqash oson edi. Ma'lum bo'lishicha, tizimga qo'shimcha ravishda, asosiy sinf kutubxonasi boshqa bir qator yuqori darajadagi ildiz nom maydonlarini ham taklif qiladi, ulardan eng foydalisi Microsoft nom maydoni.

std nom maydonidan foydalanish nima degan savolga javob berib, birinchi navbatda shuni ta'kidlash kerakki, ta'riflangan atama ingliz tilidan tarjima qilinganda turli xil identifikatsiya shakllarini aniqlash uchun zarur bo'lgan deklaratsiya doirasi bo'lgan nom maydonini anglatadi: funktsiyalar va bog'liq/mustaqil o'zgaruvchilar.

Buning yordamida nomlar o'rtasida ziddiyat yo'q, chunki bir nechta o'zgaruvchilar bir xil qiymatlarni qabul qiladigan holatlar mavjud. Odatda, bu turli kutubxonalar yaratilganda sodir bo'ladi.

Identifikatorlar bir-biriga nisbatan erkin mavjud. To'liq ism formatidan foydalanganda ular mustaqil a'zolarga bepul kirish huquqiga ega bo'lishadi.

Buning uchun bu juda muhim Shunday qilib, ob'ekt namespace std yordamida nomning to'liq shaklini o'z ichiga oladi. Bu deklaratsiya kosmik nomiga joylashtirilganda qanday ko'rinishini vizual tarzda tushunish uchun muhimdir.

Rasmda kodlashlarga kirishning bir nechta variantlari ko'rsatilgan, uning to'siqlari ichida va tashqarisida joylashgan:

1 Bu shunday ko'rinadi to'liq ism:

2 Mavjud reklamani to'ldirish uchun, yordamida qo'shing:

3 Barcha mavjud identifikatorlarni qo'shish uchun, tegishli direktivadan foydalaning:

Direktivdan foydalanish

Foydalanish direktivasi nomlar maydoniga kiritilgan barcha mavjud nomlardan foydalanishga imkon beradi.

Kvalifikatsiyani ko'rsatishning hojati yo'q.

Siz cpp formatidagi fayldan foydalanishingiz kerak. Biroq, muhim shart - bu bir nechta identifikatorlarning mavjudligi.

Agar bir nechta ism bo'lsa, oddiy nom yaratish dolzarb bo'ladi.

Keyin siz faqat kerakli identifikatorlarni qo'shishingiz va qolganlarini yolg'iz qoldirishingiz mumkin.

Shuni ta'kidlash kerakki, agar mahalliy o'zgaruvchining nomi va asosiysi mos kelsa, bu holda birinchisi yashirin kirishda bo'ladi.

Iltimos, bir xil nomdagi o'zgaruvchilarni yaratish noqonuniy ekanligini unutmang.

Maslahat! Foydalanish qulayligi uchun foydalanish direktivasi cpp formatidagi faylning yuqori qismida yoki aksincha yaratilgan kutubxona ichiga joylashtirilishi mumkin.

O'zingiz uchun eng qulay ish sharoitlarini ta'minlash uchun siz kerakli fayllarni joylashtirish ustida ishlashingiz mumkin.

Agar juda zarurat bo'lmasa, foydalanish direktivasi joylashtirilmasligi kerak H formatidagi fayldagi sarlavhalarda.

Buning sababi shundaki, ushbu harakat bilan barcha identifikatorlar ko'rinish sohasida faollashadi, ba'zi nomlarning qarama-qarshilik ehtimolini oshiradi.

Fayllar uchun eng yaxshi yechim to'liq nomdan foydalanishdir.

Agar ular juda uzun bo'lib chiqsa, siz taxalluslar ko'rinishidagi qisqartmalardan foydalanishingiz mumkin.

Nom maydoni deklaratsiyasi

E'lonlarni fayl nomlari ko'rinishida joylashtirish odatiy holdir. Belgilangan funktsiyalarning bajarilishi alohida kutubxona yoki faylda joylashgan bo'lsa, to'liq ismni aniqlash muhimdir.

Qanday harakatlar haqida gapirayotganimizni tushunish uchun bunga arziydi quyidagi rasmni tekshiring:

cpp formatidagi kontosodata funksiyasini amalga oshirish uchun ishda to'liq ismdan foydalanish ham muhimdir direktivaning boshida bo'lganda:

Namespace std dan foydalanish. bir vaqtning o'zida bir faylda joylashgan bir nechta bo'limlarda reklamalarni o'z ichiga olishi mumkin.

Kompilyator tufayli ma'lumotlarga ishlov berish jarayonida barcha elementlar birlashtiriladi.

Shunday qilib, masalan, std., qoida tariqasida, standart turdagi kirish mumkin bo'lgan kutubxonalarda joylashgan kirish mumkin bo'lgan fayllarning barcha sarlavhalarida e'lon qilinadi.

To'liq malakali nom bilan tayinlangan a'zolar nafaqat nom maydoni ichida, balki aniq malakaga ega bo'lsa, undan tashqarida ham belgilanishi mumkin.

Ta'rifga kelsak, u yaratilgan nom maydonidagi deklaratsiyadan keyin kelishi kerak.

Vizual misol sifatida quyidagi rasmga e'tibor bering:

Ko'pincha, bu xato aniqlash tartibi buzilganda yoki to'liq ismning tarkibiy qismlari darhol mavjud ob'ektlarga kiritilganda paydo bo'ladi.

Agar cookie fayllari ma'lum bir nom maydonida e'lon qilinmasa, u rasmiy ravishda global tipdagi makonga tegishli.

Maslahat! Agar zarurat bo'lmasa, a'zolarni global turdagi makonga kiritishdan qochish tavsiya etiladi.

Qoidaga faqat muhim istisno bo'lishi mumkin asosiy variant, keng maydonga majburiy kiritishni nazarda tutadi.

Global turdagi identifikatorni yaratish uchun siz to'liq ism ko'rinishida mos keladigan ko'rinish funksiyasidan foydalanishingiz kerak.

Bu amal bitta identifikatorning boshqa nomlar maydonida mavjud bo'lganlardan farqlovchi xususiyatini yaratishga yordam beradi.

Bu kodni tushunishingizga yordam beradi.

Space std.

Shuni ta'kidlash kerakki, bo'shliqlar ichki turdagi bo'lishi mumkin.

Agar oddiy joylashtirish nazarda tutilgan bo'lsa, u butun maydon uchun cheksiz xususiyatga ega.

Ota-onalar a'zolari haqida gapiradigan bo'lsak, ular bunday funktsiyaga ega emaslar.

Kengaytirish uchun o'rnatilgan qo'shimchalar talab qilinadi.

Aniqroq ta'rif va tushunish uchun, quyidagi rasmga e'tibor bering:

Keyinchalik amalga oshirish uchun ma'lumotni qamrab olgan holda, u oddiy ichki makonning bir qismi bo'lishi mumkin va ota-ona makonida ochiq turdagi interfeys sifatida ishlaydi.

Taqqoslash - bu standart turdagi oddiy qo'shimchalar, ota-ona nomi maydonining o'rnatilgan a'zolari.

Natijada, siz argumentlarga bog'liq bo'lgan ortiqcha yuklanishga ega bo'lgan funktsiyalarni qidirishdan foydalanishingiz mumkin.

Bog'lash qanday amalga oshirilganiga misolni ko'rish uchun, Quyidagi misolga murojaat qilish arziydi:

Quyidagi rasmda ota-ona shablonidagi ixtisoslashuv jarayoni ko'rsatilgan, o'rnatilgan turdagi vaqtinchalik makonda e'lon qilingan:

O'rnatilgan bo'shliqlardan foydalanish orqali standart kutubxonalarda interfeysning turli versiyalarini boshqarish mumkin.

Bitta, bitta ota-ona maydonini yaratish va har bir taqdim etilgan interfeysni inkapsulyatsiya qilish mumkin.

Biroq, u umumiy ota-ona maydonida biriktirma formatida bo'lishi kerak.

Keyin mijoz kodi avtomatik ravishda yangi kombinatsiyaga tayinlanadi.

Eski versiyadan foydalanishga odatlangan foydalanuvchilar undan hech qanday muammosiz foydalanishda davom etishlari mumkin.

Buning uchun qo'shimchaga to'liq yo'lni yaratishingiz kerak.

Birinchi e'lonni tashkil qilish uchun siz inline kalitdan foydalanishingiz kerak.

Keling, har birida bo'sh joy bo'lgan ikkita interfeys variantining quyidagi misolini ko'rib chiqaylik. Mijoz kodi, shuningdek, yangi kutubxonalardan foydalanish imkoniyatiga ega.

Jarayonni tasavvur qilish uchun Keling, quyidagi rasmga o'tamiz:

Barcha nomlar juda noyob bo'lishi kerak, shuning uchun ularning uzunligi sezilarli darajada oshadi.

Biroq, bu erda foydalanish direktivasidan foydalanish mumkin emas.

Faqat nom maydoni uchun taxallus yaratish mumkin.

Bunday holda, quyidagi misolni ko'rib chiqing:

Oddiy bo'shliqni yaratish ham mumkin, lekin unga taxallus berilmagan.

Bunday hududiy spektr anonim deb ataladi.

Qoida tariqasida, u deklaratsiyadagi a'zolar boshqa ob'ektlarda kodlash uchun ko'rinmas bo'lishi kerak bo'lgan holatlarda qo'llaniladi.

Butun struktura, barcha identifikatorlarni ko'rish mumkin bo'lsa-da, yaratilgan bo'shliqdan tashqarida ular ko'rinmas qoladi.

Shuni ta'kidlash kerak, nomlar maydonining o'zi ham blokdan tashqarida ko'rinmas bo'ladi, shuning uchun har bir foydalanuvchi ushbu tafsilotga oldindan e'tibor berishi kerak.

Odatda, bilimlardan foydalanish Visual C++ da ishlayotganlar uchun talab qilinadi.

Yuqori sifatli misollardan foydalanib, ushbu mavzuni tushunish ancha oson bo'ladi.

C++ da nomlar maydoni nima?

Nomlar maydoni - bu mantiqiy bog'liq deklaratsiyalarni umumiy nom ostida guruhlash usuli.

Nom maydoniga misol:

// @author Subbotin B.P..h" nom maydoni birinchi ( int a; float b; ) nom maydoni ikkinchi ( int a; float b; ) int _tmain(int argc, _TCHAR* argv) ( birinchi::a = 1; ikkinchi:: a = 2; birinchi::b = 1,23; ikkinchi::b = 4,56; printf("\nbirinchi::a = %d\n", birinchi::a); printf("\nikkinchi::a = %d \n", ikkinchi::a); printf("\nbirinchi::b = %.2f\n", birinchi::b); printf("\nikkinchi::b = %.2f\n\n", ikkinchi ::b); 0 qaytaring;)

Biz olamiz:

Misolda ikkita nom maydoni yaratilgan: birinchi va ikkinchi. Ikkala bo'shliq ham bir xil o'zgaruvchilarni o'z ichiga oladi. Ammo, masalan, a o'zgaruvchisi birinchi bo'shliqqa tegishli ekanligi, uni boshqa nom maydonidagi o'zgaruvchi bilan chalkashtirib yuborishga imkon bermaydi. Bu nom ziddiyatlarining oldini oladi.

birinchi fazoda e'lon qilingan int a o'zgaruvchisi ishlatilishini bildiradi. Bu foydalanish deklaratsiyasiga misol. :: operatori qamrov operatori deb ataladi.

Nomlar bo'shliqlari namespace kalit so'zi yordamida yaratiladi:

Avval nom maydoni ( int a; float b; )

Nomlar maydonidagi barcha nomlardan foydalanish uchun siz namespace direktivasidan foydalanishingiz mumkin. Namespace std dan foydalanishga misol:

std nom maydonidan foydalanish; int _tmain(int argc, _TCHAR* argv) ( cout<<"\n using namespace std \n"<

std nom maydonidan foydalanish std nom maydonidagi nomlardan foydalanish imkonini beradi. std - C++ standart kutubxonasining nomi.

Agar oxirgi misolda namespace std yordamida nom maydoniga ulanish qatorini olib tashlasak, u holda nom maydoni nomini aniq ko'rsatishimiz kerak bo'ladi:

// @author Subbotin B.P..h" #include int _tmain(int argc, _TCHAR* argv) ( std::cout<<"\n using namespace std \n"<

Nomlar maydoni qamrovni belgilaydi. Misollar nomlar bo'shliqlarini aniq belgilab berdi. Bu erda nom maydonlarining boshqa misollari mavjud. Funksiya ichidagi qamrov ham nomlar maydoni hisoblanadi. Global o'zgaruvchilar doirasi ham nomlar maydonidir. Sinf ham nomlar maydonidir.

Nomsiz fazo yaratish mumkin. Misol:

// @author Subbotin B.P..h" nom maydoni ( int a; int b; ) int _tmain(int argc, _TCHAR* argv) ( a = 5; b = 8; printf("\n a = %d\n", a ); printf("\n b = %d\n\n", b); qaytish 0; )

Bu foydalanish nom maydoni direktivasidan foydalanishni nazarda tutadi. Mumkin bo'lgan nom ziddiyatlarini oldini olish uchun bunday nomlar maydoni kerak.

Agar nom maydoni nomi juda uzun bo'lsa, siz nom maydoniga taxallus yaratishingiz mumkin. Misol:

// @author Subbotin B.P..h" nomlar maydoni underground ( int a; int b; ) nom maydoni ug = underground; int _tmain(int argc, _TCHAR* argv) ( ug::a = 5; ug::b = 8; printf ("\n ug::a = %d\n", ug::a); printf("\n ug::b = %d\n\n", ug::b); qaytarish 0; )

nom maydoni ug = yer osti;

er osti nom maydoni uchun ug taxallusni taqdim etadi. Keyin taxallus bilan ishlaymiz.

Agar siz nomlar maydonidagi nomlarning faqat bir qismini ishlatmoqchi bo'lsangiz, ushbu qismni yangi nom maydoniga tanlashingiz va undan foydalanishingiz mumkin. Misol:

// @author Subbotin B.P..h" nomlar maydoni underground ( int a; int b; int c; float d; double e; ) nom maydoni ug ( underground::a; underground yordamida::b; ) int _tmain(int argc, _TCHAR* argv) ( ug::a = 5; ug::b = 8; printf("\n ug::a = %d\n", ug::a); printf("\n ug::b = %d\n\n", ug::b); 0ni qaytaring; )

Bu erda er osti nomlar maydonining beshta o'zgaruvchisidan faqat ikkitasini ishlatishni taxmin qilamiz. Biz yangi ug nom maydonini yaratamiz, unda ikkita foydalanish deklaratsiyasi mavjud. Keyinchalik biz ug nom maydoni bilan ishlaymiz.

Nomlar maydoni o'zgartirilishi mumkin, ya'ni. unga yangi reklama qo'shing. Misol:

// @author Subbotin B.P..h" nomlar maydoni underground ( int a; int b; ) nomlar maydoni underground ( float c; ) int _tmain(int argc, _TCHAR* argv) ( underground::a = 5; underground::b = 8 ; underground::c = 1.2; printf("\n underground::a = %d\n", underground::a); printf("\n underground::b = %d\n", underground::b ); printf("\n underground::c = %.1f\n\n", underground::c); qaytish 0; )

Biz olamiz:

Nomlar bo'shliqlari joylashtirilishi mumkin Misol:

// @author Subbotin B.P..h" nomlar maydoni yuqori ( int a; int b; nomlar maydoni ichki ( float c; ) ) int _tmain(int argc, _TCHAR* argv) ( yuqori::a = 5; yuqori::b = 8 ; upper::inner::c = 1,2; printf("\n yuqori::a = %d\n", yuqori::a); printf("\n yuqori::b = %d\n", yuqori ::b); printf("\n yuqori::ichki::c = %.1f\n\n", yuqori::ichki::c); 0; )

Biz olamiz:

Misolda, nom maydonining yuqori qismida ichki nom maydoni mavjud. Ichki nom maydoniga qanday kirishiga e'tibor bering:

yuqori::ichki::c = 1,2;

Keling, global nomlar maydonini ko'rib chiqaylik. Bu yerda :: operatori bo'shliq nomini ko'rsatmasdan ishlatiladi. Global nomlar maydoni global deklaratsiyalarni, shu jumladan tegishli foydalanish direktivalarini o'z ichiga oladi. Global nom maydoniga misol:

// @author Subbotin B.P..h" #include std nom maydonidan foydalanish; int nVar; int _tmain(int argc, _TCHAR* argv) ( int nAnotherVar = 1; ::nVar = 5; cout<<"\n nAnotherVar = "<

Deklaratsiyalardan foydalanish va direktivalardan foydalanish o'rtasidagi farqni ko'rish muhimdir.
Foydalanish deklaratsiyasi o'zgaruvchini mahalliy miqyosda mavjud qiladi, ya'ni. mahalliy nom deklaratsiyasi sodir bo'ladi. Mahalliy o'zgaruvchini e'lon qilishning ikki yo'li mavjud: normal yoki foydalanish deklaratsiyasidan foydalanish.

Foydalanish direktivasi berilgan nomlar maydonidagi barcha nomlarni mavjud qiladi, lekin ularni mahalliy sifatida e'lon qilmaydi.

Use deklaratsiyasi use direktivasidan ustun turadi.

Keling, bir misolni ko'rib chiqaylik:

// @author Subbotin B.P..h" nom maydoni sbp ( int a; int b; int c; ) int a; int _tmain(int argc, _TCHAR* argv) ( int a; nom maydonidan foydalanish sbp; a = 1; sbp:: a = 2; ::a = 3; printf("\n a = %d\n", a); printf("\n sbp::a = %d\n", sbp::a); printf(" \n::a = %d\n\n", ::a); qaytish 0; )

Biz olamiz:

sbp nom maydonidan foydalanish;

Bu sbp nom maydonidagi barcha nomlarni mavjud qiladigan foydalanish direktivasi.

Bu mahalliy o'zgaruvchi bilan ishlaydi a. sbp bo'sh joyidan a o'zgaruvchisiga qiymatlarni belgilash uchun siz sbp ni aniq ko'rsatishingiz kerak:

Xuddi shu narsa global o'zgaruvchiga ham tegishli.

Mahalliy o'zgaruvchi a bir xil nomdagi global o'zgaruvchilarni yopadi.

Endi foydalanish deklaratsiyasiga misol:

// @author Subbotin B.P..h" nom maydoni sbp ( int a; int b; int c; ) int a; int _tmain(int argc, _TCHAR* argv) ( int a; a = 1; sbp::b; b dan foydalanish = 2; ::a = 3; printf("\n a = %d\n", a); printf("\n sbp::b = %d\n", sbp::b); printf("\ n::a = %d\n\n", ::a); 0ni qaytaring; )

Biz olamiz:

Bu foydalanish deklaratsiyasi. Bu erda b o'zgaruvchisi sbp nom maydonidan lokal ravishda e'lon qilinadi. Ushbu e'londan so'ng siz quyidagi harakatlarni amalga oshirishingiz mumkin:

lekin a uchun foydalanish deklaratsiyasi

bizni xatoga olib keladi, chunki misolda a mahalliy o'zgaruvchisi allaqachon aniqlangan.

Yordam beradi.
PHP-da nomlar maydonini qo'llab-quvvatlash yo'li juda qiyin bo'lgan. Ammo xayriyatki, u PHP 5.3 da tilga qo'shildi va o'shandan beri PHP kodining tuzilishi sezilarli darajada yaxshilandi. Lekin ulardan qanday qilib aniq foydalanishimiz kerak?

Nom maydonlari nima?

"Ismlar maydoni nomini satr sifatida saqlaganingizda teskari chiziqni unutmang!"

Nomlar maydonini har qanday narsani qo'yishingiz mumkin bo'lgan quti deb tasavvur qiling: qalam, o'lchagich, qog'oz varag'i va boshqalar. Bu sizning narsalaringiz. Sizning qutingiz ostida boshqa birovning qutisi joylashgan va uning egasi xuddi shu narsalarni ichida saqlaydi. Bir-biringizning narsalaridan foydalanmaslik uchun siz kimga tegishli ekanligi aniq bo'lishi uchun qutilarni belgilashga qaror qilasiz.

Ilgari ishlab chiquvchilar kodni ajratish uchun sinflari, funktsiyalari va konstantalarida pastki chiziq prefikslaridan foydalanishlari kerak edi. Bu har bir kishi o'z narsalarini belgilab, ularni bitta katta qutida saqlashga teng. Albatta, bu hech bo'lmaganda qandaydir tashkilotdir, lekin bu juda samarasiz.

Ismlar maydoni, yordam bering! Siz bir xil funktsiyani, sinfni, interfeysni e'lon qilishingiz va alohida nomlar bo'shliqlarida doimiyni aniqlashingiz mumkin, bu esa jiddiy xatolarga yo'l qo'ymaydi. Asosiysi, nom maydonlari oddiy PHP kodini o'z ichiga olgan ierarxik etiketli kod bloklaridan boshqa narsa emas.

Siz ulardan foydalanasiz!

Nom maydonlaridan bilvosita foydalanayotganingizni tushunish muhimdir; PHP 5.3 dan boshlab, foydalanuvchi tomonidan belgilangan nomlar bo'shliqlarida e'lon qilinmagan barcha ta'riflar global nomlar maydoniga tushadi.

Global nomlar maydoni, shuningdek, mysqli_connect() va Exception sinfi kabi PHP ning barcha ichki ta'riflarini ham saqlaydi. Global nom maydoni noyob identifikator nomiga ega emasligi sababli, u ko'pincha global nomlar maydoni deb ataladi.

Nom maydonidan foydalanish ixtiyoriy ekanligini unutmang.
Sizning PHP skriptingiz ularsiz yaxshi ishlaydi va bu xatti-harakat tez orada o'zgarmaydi.

Nomlar maydoni ta'rifi

Nom maydonini o'z ichiga olgan fayl har qanday boshqa koddan oldin uning deklaratsiyasini o'z ichiga olishi kerak. Nom maydonidan oldin e'lon qilinishi mumkin bo'lgan yagona narsa bu declare so'zi bo'lib, fayl kodlashini ko'rsatish uchun e'lon ifodasi nom maydoni deklaratsiyasidan oldin paydo bo'lishi mumkin.

Nomlar bo'shliqlari ajratilgan so'z nomlari maydoni yordamida e'lon qilinadi. Nom maydonlari PHPdagi boshqa identifikatorlar bilan bir xil qoidalarga amal qiladi. Shunday qilib, nom maydoni kerak harf yoki pastki chiziqdan keyin istalgan sonli harflar, raqamlar yoki pastki chiziq bilan boshlang.

Agar siz global maydonda kod blokini aniqlamoqchi bo'lsangiz, nom qo'shmasdan nomlar maydoni kalit so'zidan foydalanishingiz mumkin.

Bitta faylda bir nechta nom maydonidan foydalanishingiz mumkin.

Siz bir nechta turli fayllar uchun bir xil nom maydonidan foydalanishingiz mumkin; faylga ulanish jarayoni ularni avtomatik ravishda birlashtiradi. Sinflar bilan bo'lgani kabi, nom maydoni ta'riflari sonini bitta faylga cheklash yaxshi kodlash amaliyotidir.

Nomlar bo'shliqlari nomuvofiq ta'riflardan qochish va dastur kodiga ko'proq moslashuvchanlik va tartibni kiritish uchun ishlatiladi.

E'tibor bering, jingalak qavslar butunlay ixtiyoriy. Haqiqatan ham, har bir fayl qoidasi uchun bitta nom maydonidan foydalanish va jingalak qavslarni o'tkazib yuborish kodingizni ancha toza qiladi - ichki kodni cheklashning hojati yo'q.

Subnamespaces

Nomlar bo'shliqlari, xuddi kompyuterdagi fayl tizimidagi kataloglar kabi, ma'lum bir ierarxiyaga amal qilishi mumkin. Subnamespacelar loyiha strukturasini tashkil qilish uchun juda foydali. Misol uchun, agar loyihangiz ma'lumotlar bazasiga kirishni talab qilsa, siz ma'lumotlar bazasidan istisno ishlov beruvchisi va ulanishni qayta ishlash kodini Ma'lumotlar bazasi nom maydonining pastki nom maydoniga joylashtirishingiz mumkin.

Moslashuvchanlik uchun ichki kataloglarni ichki kataloglarda saqlash oqilona. Bu loyihani tuzishga yordam beradi va PSR-4 standartiga rioya qiluvchi avtoyuklagichlar uchun foydalanishni ancha osonlashtiradi.

PHP nom maydonini ajratuvchi sifatida teskari chiziqdan foydalanadi.

Qiziqarli fakt: RFCda qaysi nom maydoni ajratuvchisidan foydalanishni hal qilish uchun kulgichdan foydalanish varianti ko'rib chiqildi.

// myproject/ma'lumotlar bazasi/connection.phpIstaganingizcha ko'plab ichki nomlar maydonidan foydalanishingiz mumkin.

Ichki kod bloklari bilan pastki nomlar maydonini belgilash qo'llab-quvvatlanmaydi. Quyidagi misol halokatli xatoni qaytaradi: "Ismlar maydoni deklaratsiyasini joylashtirish mumkin emas."

Nom maydonidan chaqiruv kodi

Agar siz ob'ektning yangi nusxasini yaratmoqchi bo'lsangiz, funktsiyani chaqirmoqchi bo'lsangiz yoki turli nomlar bo'shliqlaridan doimiylardan foydalanmoqchi bo'lsangiz, siz teskari chiziqdan foydalanasiz. Nom maydoni nomining uchta turi mavjud:
  • Noma'lum nom
  • Malakali ism
  • To'liq malakali ism

To'liq bo'lmagan ism

Bu sinf, funksiya yoki doimiyning nomi va hech qanday nom maydoniga havolani o'z ichiga olmaydi. Nom maydonlari bilan endigina ishlashni boshlaganlar uchun bu umumiy nuqtai nazardir.

To'liq ism

Biz subnamespace ierarxiyasiga shu tarzda kiramiz; teskari chiziq bilan ajratilgan.

Quyidagi misol halokatli xatoni qaytaradi: "Muhim xato: "MyProject\Ma'lumotlar bazasi\MyProject\FileAccess\Input" klassi topilmadi", chunki MyProject\FileAccess\Input siz joylashgan nom maydoniga tegishli emas.

Mutlaq ism

To'liq va qisman ismlar siz hozir bo'lgan nom maydoniga nisbatan ishlatiladi. Ulardan faqat shu darajadagi kirishni aniqlash yoki nomlar maydoni ierarxiyasiga chuqurroq kirish uchun foydalanish mumkin.

Agar siz ierarxiyaning yuqori darajasida joylashgan funksiya, sinf yoki konstantaga kirishni istasangiz, unda siz nisbiy emas, to'liq ism - mutlaq yo'ldan foydalanishingiz kerak. Qo'ng'iroq teskari chiziq bilan boshlanishi kerak. Bu PHP-ga ushbu qo'ng'iroqni joriy joylashuvingizga nisbatan kirishdan ko'ra, global makondan amalga oshirish kerakligini bilish imkonini beradi.

PHP ichki funksiyalari uchun toʻliq nomdan foydalanishimiz shart emas. Funktsiyalar va konstantalar uchun nomaqbul nomlar, agar ular joriy nomlar maydonida aniqlanmagan bo'lsa, global nomlar maydonida aniqlanadi.

Buni bilgan holda, biz asl funktsiyani (yoki doimiy) chaqirish imkoniga ega bo'lgan holda, endi ichki PHP funktsiyalarini ortiqcha yuklashimiz mumkin.

"; }

Dinamik qo'ng'iroqlar

PHP dinamik dasturlash tilidir; shuning uchun siz ushbu funksiyadan nom maydonidan kod chaqirish uchun foydalanishingiz mumkin. Bu dinamik sinf nomidan foydalanish yoki uning nomini saqlash uchun o'zgaruvchidan foydalanib dinamik faylni ulash bilan bir xil. PHP nom ajratuvchisi satrlarda bir xil meta-belgilardan foydalanadi. Nom maydoni nomini satr sifatida saqlaganingizda teskari chiziq haqida unutmang!

nom maydoni kalit so'zi

Namespace kalit so'zi nafaqat nomlar maydonini aniqlash uchun ishlatiladi, balki u joriy nomlar maydoniga qo'ng'iroq qilish uchun ham ishlatilishi mumkin, funktsional jihatdan sinflar uchun self kalit so'ziga o'xshash.

__NAMESPACE__ doimiy

Xuddi self kalit so'zini joriy sinf nomini aniqlash uchun ishlatib bo'lmagani kabi, nomlar maydoni kalit so'zidan joriy nom maydoni uchun foydalanilmaydi. Shuning uchun biz __NAMESPACE__ doimiysidan foydalanamiz

Bu doimiy nomlar maydonini o'rganishni boshlaganda juda foydali; disk raskadrovka uchun ham juda foydali. U satr bo'lgani uchun uni yuqorida muhokama qilingan dinamik kod chaqiruvlari bilan birgalikda ishlatish mumkin.

Import qiling yoki taxallus ism yarating

nom maydonlarida foydalanish shart emas

PHP dagi nom maydonlarining muhim xususiyati tashqi mutlaq nomga murojaat qilish qobiliyatidir taxallus, yoki import qilish.

Importlar nomlar maydonining juda foydali va asosiy jihati hisoblanadi. Bu sizga kutubxonalar kabi tashqi paketlardan nom ziddiyati haqida qayg'urmasdan foydalanish imkoniyatini beradi. Import use kalit so'zi yordamida amalga oshiriladi. Agar xohlasangiz, as kalit so'zidan foydalanib, maxsus taxallusni belgilashingiz mumkin.

sifatida foydalaning

Uni qanday ishlatish kerak

Mutlaq nom qisqaroq nomga bog'lanishi mumkin, shuning uchun uni har safar ishlatmoqchi bo'lganingizda uning mutlaq nomini yozishingiz shart emas. Taxallusni yaratish yoki import qilish ota-ona yoki global nom maydonida amalga oshirilishi kerak. Buni usul yoki funksiya doirasida qilishga urinish noto‘g‘ri sintaksis.

Shu bilan bir qatorda boshqa nom bilan taxallusni tayinlash mumkin

Istisno kabi global sinflarni ham import qilishingiz mumkin. Import qilishda uning mutlaq nomini yozish shart emas.

Esda tutingki, nom maydonidagi nomlar uchun bosh teskari chiziq kerak emas va uning mavjudligi tavsiya etilmaydi, chunki import qilingan nomlar mutlaq bo'lishi va joriy nom maydoniga nisbatan tahlil qilinmasligi kerak.

Dinamik nom maydonini chaqirish qo'llab-quvvatlansa ham, dinamik import qo'llab-quvvatlanmaydi.

Xulosa

Nomlar bo'shliqlari ta'riflar to'qnashuvining oldini olish va dastur kodiga ko'proq moslashuvchanlik va tashkiliylikni kiritish uchun ishlatiladi. Esda tutingki, sizdan nom bo'shliqlaridan foydalanish shart emas; Bu xususiyat ob'ektga yo'naltirilgan yondashuv bilan birgalikda qo'llaniladi. Umid qilamanki, siz (kelajakdagi) PHP loyihangizni nom maydonlaridan foydalanib keyingi bosqichga olib chiqishni ko'rib chiqasiz.

Izoh: Ushbu bo'lim nomlar maydonidan foydalanish va e'lon qilishni tavsiflaydi. RDF, XML-Data, Document Content Description (DCD), Sxema for Object-oriented XML (SOX), Document Definition Markup Language (DDML, ilgari XSchema deb nomlanuvchi) ning asosiy xarakteristikalari berilgan.

Biz ilgari DTD ta'riflarining ba'zi kamchiliklarini tasvirlab berdik, ular quyidagilar bilan bog'liq:

  1. Ushbu ta'riflarning sintaksisi XML sintaksisidan farq qiladi (xususan, kengaytirilgan deb ataladigan) Backus-Naur shakli, Kengaytirilgan Backus Naur shakli);
  2. bu ta'riflar etarlicha ifodali emas;
  3. Har bir foydalanuvchi o'z teglarini yaratishi mumkinligi sababli, odamlar turli narsalarga murojaat qilish uchun bir xil element nomlaridan foydalanishlari mumkin. Elementlarning ma'nolari bir xil bo'lsa ham, ularning mumkin bo'lgan mazmuni ta'rifga qarab farq qilishi mumkin. Shunday qilib, bizga elementning o'ziga xos qo'llanilishini aniqlash usuli kerak, ayniqsa, agar biz bir xil hujjatda turli xil lug'atlarni aralashtirsak. Muammoni hal qilish uchun W3C XML nom maydoni deb nomlangan spetsifikatsiyani chiqardi, bu nomlar maydonidagi element kontekstini aniqlash imkonini beradi.
  4. Turli xil DTD ta'riflariga mos keladigan turli manbalardan XML hujjatlarini birlashtirish zarur bo'lgan holatlar mavjud. Misol uchun, bu holat katta hajmdagi axborotni tavsiflashda yuzaga keladi, agar alohida DTDlar butun hajmni qoplash uchun etarli bo'lmasa yoki ularni tushunish qiyin bo'lsa. Bu sizning biznes sherigingiz ma'lumotlarini sizniki bilan birlashtirishga harakat qilganda ham elektron tijorat tizimlarida paydo bo'ladi. Ba'zi ma'lumotlarni standart formatda almashish uchun mavjud DTD ga sozlamalaringizni qo'shishingiz kerak bo'lganda ham vaziyat yuzaga kelishi mumkin. Afsuski, XML tavsiyasi bir nechta DTDlarni bitta hujjatda ularni o'zgartirmasdan yoki yangi DTD yaratmasdan (tashqi havolalar yordamida) birlashtirish usulini ta'minlamaydi.

Ushbu bob quyidagi ikkita tushunchani qamrab oladi - nom maydoni va XML sxemalari. Nomlar bo'shliqlari XML ishlab chiquvchilariga murakkab muammolarni kichik bo'laklarga ajratish va uni to'liq tavsiflash uchun bir nechta lug'atlarni bitta hujjatda birlashtirish imkonini beradi. Sxemalar yordamida lug'at dizaynerlari DTDlarda mumkin bo'lganidan ko'ra aniqroq ta'riflarni yaratadilar va buni XML sintaksisi yordamida amalga oshiradilar.

Ushbu ikkita vosita XML dan foydalanishda yuzaga keladigan murakkab muammolarni hal qilishga yordam beradi. Nomlar va sxemalar XML dizaynerlari va dasturchilariga quyidagilarga imkon beradi:

  • Murakkab muammolarni hal qilish uchun lug'atni yaxshiroq tashkil qilish;
  • Saqlamoq kuchli yozish XML ga va XML dan o'zgartirishlar paytida ma'lumotlar;
  • Lug'atlarni DTD bilan mumkin bo'lganidan ko'ra aniqroq va moslashuvchan tarzda tasvirlab bering;
  • XML-da lug'at qoidalarini o'qing, tahlilchini murakkablashtirmasdan uning ta'riflariga kiring.

Lug'atlarni aralashtirish

Lug'atni loyihalashda global muammoni bir nechta tarkibiy qismlarga ajratish mantiqiy bo'lishi mumkin. Bu katta muammoni bir nechta lug'atlarga bo'lish usullarini talab qiladi. Biroq, hal qilinishi kerak bo'lgan haqiqiy muammo - bu alohida DTDlarni bitta hujjatning tanasida birlashtirish. Agar siz, masalan, DTD ta'riflari to'plami mavjud bo'lgan korporatsiyada ishlayotgan bo'lsangiz va ulardan foydalanish ishni sezilarli darajada osonlashtirishi mumkin bo'lsa, bu muammo paydo bo'lishi mumkin, chunki ular muammoni boshqalar tushunganidek tasvirlaydi. Ko'pincha DTD ta'riflarini qayta ishlatish ham foydalidir, ya'ni. Oldindan yaratilgan DTD ta'riflaridan umumiy konstruktsiyalardan foydalanish. Agar siz tashqi hamkorning dasturiy ta'minoti bilan bog'lanishi kerak bo'lgan dastur ishlab chiqayotgan bo'lsangiz, mavjud tushunchalarni qayta ishlatishdan boshqa tanlovingiz kam. DTD ning mavjud ta'riflari tushunish uchun gapirish kerak bo'lgan umumiy tilni tashkil qiladi. Agar kontseptsiya allaqachon mavjud bo'lsa, uni tushunish uchun ishlash kerak.

Boshqa ishlab chiquvchilarning DTDlaridan sizga foydali boʻlgan taʼriflardan foydalanganda yoki murakkab muammoni tavsiflovchi hujjat yaratish uchun segmentlangan DTDlarni birlashtirganingizda, agar hujjatlaringiz bir xil nomdagi elementlardan foydalansa, muammo yuzaga kelishi xavfi tugʻiladi. noaniqlik va nomlar to'qnashuvi.

Muammo bir nechta DTDlardan nom namunalarini qo'llashda yanada kuchayadi. Bunday holda, biz DTD ta'rifi qaysi elementga tegishli ekanligini bilmaymiz, yaxshi shakllangan hujjatlarning bu muammosi noaniqlik deb ataladi. Bundan tashqari, agar hujjatdagi nomlar talab qilsa haqiqiyligini tekshirish, biz ilovamizni juda chalkashtirib yuborishimiz mumkin. Ushbu muammo nomlarning to'qnashuvi deb ataladi.

Nom maydonlari

Nomlar bo'shliqlari foydalanuvchiga ikkita muhim usulda yordam berishi mumkin. Ularning yordami bilan siz:

  • dastur element yoki atribut qaysi manbadan olinganligini ajratib ko‘rsatishiga ishonchni yo‘qotmagan holda ikki yoki undan ortiq manbalardan hujjatlarni birlashtirish;
  • Iloji bo'lsa, foydalanuvchi agentiga hujjat turini aniqlash (DTD) yoki elementlar va atributlarning boshqa tavsifi kabi boshqa materiallarga kirishiga ruxsat bering.

Nomlar maydoni - bu XML hujjatlarida elementlar yoki atributlar nomi sifatida ishlatilishi mumkin bo'lgan ma'lum qiymatlar yoki xususiyatlar to'plami. XML-dagi nomlar bo'shliqlari Yagona Resurs Identifikatori (URI) tomonidan aniqlanadi (siz serveringizdagi DTD manzilini URI sifatida ishlatishingiz mumkin). Bu har bir nom maydonini noyob bo'lishiga imkon beradi.

Shunday qilib, turli manbalardagi elementlarni birlashtirgan hujjatda nomlar bo'shliqlaridan samarali foydalanish uchun biz quyidagilarni aniqlashimiz kerak:

  • Elementdan foydalanishni tavsiflovchi URIga havola.
  • Elementimiz qaysi nom maydonidan kelganligini tushunishga imkon beruvchi taxallus. Bu taxallus element prefiksi shaklida bo‘ladi (masalan, agar noaniq Kitob elementi uchun taxallus katalog bo‘lsa, u holda element chaqiriladi. ).

Nom maydonlaridan foydalanish va e'lon qilish

Nom maydoni deklaratsiyasi

Turli xil belgilash tillarida - XML ​​ilovalarida - teglarning bir xil nomlari va ularning atributlari mutlaqo boshqacha ma'noga ega bo'lishi mumkinligi sababli, ularni qandaydir tarzda ajrata olish kerak. Buning uchun teg va atributlarning nomlariga qisqa prefiks beriladi, u nomdan ikki nuqta bilan ajratiladi. Ism prefiksi nom maydonini belgilaydigan identifikator bilan bog'langan. Prefikslari bir xil identifikator bilan bog'langan barcha teg va atribut nomlari yagona nom maydonini tashkil qiladi, unda nomlar yagona bo'lishi kerak.

Biz hamma nom fazosi deklaratsiyasini ko'rganimizda tanib olishini xohlayotganimiz sababli, biz unga maxsus so'z ajratamiz. Nomlar bo'shliqlari tavsiyasiga ko'ra, so'z xmlns . Atributning qiymati foydalanish uchun nom maydonini belgilaydigan URI hisoblanadi. Bu ko'pincha DTD ta'rifining URL manzilidir, lekin har doim ham shunday bo'lishi shart emas. Nom maydoni prefiksi va identifikatori xmlns atributi tomonidan quyidagicha aniqlanadi:

Ko'rib turganingizdek, ntb prefiksi endigina aniqlangan, lekin u allaqachon ntb nomida ishlatilishi mumkin: notebook . Kelajakda http://some.firm.com/2003/ntbml nom maydoniga belgilamoqchi bo'lgan teglar va atributlar nomlari ntb bilan prefikslanadi, masalan:

Gorelovo

Bundan tashqari, bir tegda bir nechta nom maydoni paydo bo'lishi mumkin. Quyida bir nechta nom maydonini aralashtirish misoli keltirilgan:

Kitob elementi katalog nom maydonidan, ISBN atributi orderdan keladi.

Masalan, prefiks bilan birga nom bering

kengaytirilgan, malakali yoki malakali nom (OName. Qualified Name) deb ataladi. Ismning ikki nuqtadan keyin yoziladigan qismi otning mahalliy qismi deyiladi.

Veb-resurs nomlarining nomenklaturasi chalkash bo'lishi mumkin. Yagona Resurs Locator ( Yagona Resurs Locator, URL) kirish protokoli va tarmoq joylashuvi nuqtai nazaridan resursni bildiradi. Yagona manba identifikatori ( Yagona manba identifikatori, URI) ba'zi manbalar uchun noyob nom. URI ga oddiygina nomlar maydonini aniqlaydigan noyob belgilar qatori sifatida qarang.

SGML va XML qoidalariga ko'ra, ikkita nuqta oddiy belgi sifatida nomlarda ishlatilishi mumkin, shuning uchun prefiksli ism shunchaki hiyla-nayrang; nomlar maydonini "bilmaydigan" har qanday dastur hujjatni tahlil qiladi, ishlov beradi. malakali ism oddiy ism sifatida. Bundan kelib chiqadiki, xususan, in hujjat turi deklaratsiyasi(Hujjat turi deklaratsiyasi) nomi prefikslarini o'tkazib yuborish mumkin emas.

Xmlns atributi faqat ildiz elementida emas, balki har qanday XML elementida paydo bo'lishi mumkin. U belgilagan prefiks xmlns atributi yozilgan elementda va uning ichida joylashgan barcha elementlarda ishlatilishi mumkin. Bundan tashqari, bitta elementda bir nechta nom maydoni aniqlanishi mumkin.

O'rnatilgan elementlarda nomlar maydonini prefiksni boshqa identifikator bilan bog'lash orqali bekor qilish mumkin.

Nomlar maydonidan foydalanadigan hujjatda teg nomining prefikssiz ko'rinishi bu nomning standart nom maydoniga tegishli ekanligini bildiradi.

Yaxshi ishlab chiqilgan hujjat uning barcha elementlari uchun nom maydonidan foydalanishi kerak.

Xml belgilaridan boshlanadigan prefikslar har qanday holatda ham XML tilining o'zi uchun ajratilgan. Xmlns prefiksi boshqa aniqlangan prefiksni uning nom maydoni identifikatori bilan bog'lash uchun ishlatiladi. Xmlns prefiksi aniqlanishi shart emas, u "XML-dagi nomlar bo'shliqlari" tavsiyasi bilan kiritilgan va u erda nom maydoni identifikatori bilan bog'langan. http://www.w3.ori/2000 /xmlns/.

Boshqa prefiks xml identifikator bilan bir xil tavsiyada bog'langan http://www.w3.org/XML/1998/namespace. Bundan tashqari, XML hujjatida aniqlanishi shart emas. Bu identifikatorlar bilan boshqa hech qanday prefiksni bog‘lab bo‘lmaydi. bo‘sh joy belgilarini saqlab qolish ko‘rsatmalarini saqlang. Bu dastur kodlari kabi ba'zi matnlar uchun muhim. Standart qiymat bo'sh joyni ishlov beruvchining ixtiyoriga qoldiradi.

Qo'llash doirasi

Nomlar maydoni deklaratsiyasi dasturlash tillaridagi o'zgaruvchilar deklaratsiyasi kabi qamrovga ega. Bu juda muhim, chunki nomlar maydoni har doim ham XML hujjatining boshida e'lon qilinmaydi; ba'zan ular keyingi bo'limlarda e'lon qilinadi. Nom maydoni deklaratsiyasi u paydo bo'lgan elementga, shuningdek, u erda aniq belgilanmagan bo'lsa ham, ushbu elementning avlodlariga nisbatan qo'llaniladi. Ism faqat deklaratsiya doirasida foydalanilgandagina nom maydoniga murojaat qilishi mumkin.

Shu bilan birga, biz boshqa nom maydonlarini meros qilib oladigan elementlarga nom maydoni doiralarini aralashtirishimiz kerak bo'ladi. Shu munosabat bilan, qamrovni e'lon qilishning ikkita usuli aniqlanadi: standart va malakali.

Standart doira

Siz kutganingizdek, hujjatdagi har bir ismga prefiks qo'yish tezda zerikarli bo'ladi. Aslida, nom doirasi tushunchasini kiritish orqali biz hujjatimizda ko'p sonli prefikslarni aralashtirishimiz mumkin. Agar biz standart nom maydonini aniqlasak, u o'z deklaratsiyasi doirasidagi barcha noaniq nomlarga egalik qiladi deb taxmin qilinadi. Shunday qilib, ildiz elementida e'lon qilingan standart nom maydoni butun hujjat uchun standart hisoblanadi va faqat hujjat ichida e'lon qilingan aniqroq nom maydoni tomonidan bekor qilinishi mumkin.

Nom maydonini qamrov uchun standart nom maydoni qilish uchun shunchaki prefiks deklaratsiyasini o'tkazib yuboring.

Agar prefiks e'lon qilinsa va keyin nom bilan birgalikda ishlatilsa, nom maydoni aniq belgilangan deb aytiladi. Nomlar maydoniga nomaqbul nom berish uchun siz nomaqbul nomni (prefikssiz) o'z ichiga olgan standart bo'shliqni e'lon qilishingiz kerak.

Malakali doira

Agar siz nomlar bo'shliqlarini aniq ajratib olsangiz, yuqoridagi usul yaxshi ishlaydi. Ammo ba'zida hujjatga tashqi nomlar maydonidan individual nomlarni kiritish kerak bo'ladi. Butun doira uchun nom bo'shliqlarini e'lon qilish o'rniga, malakali nomlardan foydalanishingiz mumkin. Hujjatning boshida sizga kerak bo'lgan nomlar bo'shliqlarini e'lon qiling, so'ngra ulardan foydalanish joyida kvalifikatsiya qiling.



 


O'qing:



Yozilgan dasturlash tili Tur yoki format spetsifikatorlari yoki konversiya belgilari yoki boshqaruv belgilari

Yozilgan dasturlash tili Tur yoki format spetsifikatorlari yoki konversiya belgilari yoki boshqaruv belgilari

C++ dasturlash tili Oxirgi yangilangan: 28/08/2017 C++ dasturlash tili yuqori darajadagi kompilyatsiya...

Yangi yil bayramlarida rus pochtasi ish jadvali Yangi yil bayramlarida pochta ishi

Yangi yil bayramlarida rus pochtasi ish jadvali Yangi yil bayramlarida pochta ishi

21-asrda rus pochtasi nafaqat xatlar va posilkalarni olishga yordam beradigan universal muassasaga aylandi. Kommunal to'lovlar, pensiyalar,...

Tass: qisqartmalarni dekodlash

Tass: qisqartmalarni dekodlash

Bu atama italyancha abbreviatura va lotincha brevis - qisqacha so'zlardan keladi. Qadimgi kitoblar va qo'lyozmalarda bu qisqartirilgan ...

Sertifikat shablonlari bo'sh yuklab olish Faxriy yorliq shablonini chop etish uchun

Sertifikat shablonlari bo'sh yuklab olish Faxriy yorliq shablonini chop etish uchun

Assalomu alaykum, aziz o'quvchi! Bugun men sizga Word-da qanday qilib xat yozishni aytaman. Mening ishimda men juda ko'p sonli yozishim kerak edi ...

tasma tasviri RSS