Кіріспе
Идентификаторлар жиынтығының контейнері. Компьютерде атау кеңістігі – әртүрлі нысандарды анықтау және оларға сілтеме жасау үшін қолданылатын белгілер (атаулар) жиынтығы. Атау кеңістігі нысандардың берілген жиынтығының барлық атаулары бірегей болуын қамтамасыз етеді, осылайша оларды оңай анықтауға болады. Атау кеңістіктері әдетте түрлі контексттерде атауларды қайта пайдалануға мүмкіндік беру үшін иерархиялық құрылымда болады. Мысалы, әр адамның есімі және туыстарымен ортақ туыстық аты болатын адамдарды атау жүйесін қарастырайық. Егер отбасы мүшелерінің есімдері тек әр отбасы шеңберінде ғана бірегей болса, онда әр адамды есімі мен тегінің комбинациясы арқылы бірегей анықтауға болады; тек бір ғана Джейн Доу бар, ал Джейндер көп болуы мүмкін. Доу отбасының атау кеңістігінде бұл адамды анық көрсету үшін тек "Джейн" жеткілікті, ал барлық адамдардың "глобал" атау кеңістігінде толық аты қолданылуы керек. Атау кеңістіктерінің айқын мысалдарына файлдарға атау беретін файлдық жүйелер жатады. Кейбір бағдарламалау тілдері өздерінің айнымалыларын және процедураларын атау кеңістіктерінде ұйымдастырады. Компьютерлік желілер мен таратылған жүйелер компьютерлер, принтерлер, веб-сайттар және қашықтағы файлдар сияқты ресурстарға атаулар береді. Операциялық жүйелер виртуализация контейнерлерін қолдау үшін ядро ресурстарын оқшауланған атау кеңістіктері арқылы бөлуге болады. Сол сияқты, иерархиялық файлдық жүйелер файлдарды каталогтарға ұйымдастырады. Әрбір каталог жеке атау кеңістігі болып табылады, сондықтан "хаттар" және "шот-фактуралар" каталогтарында "Джейнге" деген файл болуы мүмкін. Компьютерлік бағдарламалауда атау кеңістіктері әдетте белгілі бір функционалдыққа қатысты символдар мен идентификаторларды топтастыру және бірдей атауды бөлісетін бірнеше идентификаторлар арасындағы қақтығыстарды болдырмау үшін қолданылады. Желіде Домендік атаулар жүйесі веб-сайттарды (және басқа ресурстарды) иерархиялық атау кеңістіктеріне ұйымдастырады.
In computing, a namespace is a set of signs (names) that are used to identify and refer to objects of various kinds. A namespace ensures that all of a given set of objects have unique names so that they can be easily identified. Namespaces are commonly structured as hierarchies to allow reuse of names in different contexts. As an analogy, consider a system of naming of people where each person has a given name, as well as a family name shared with their relatives. If the first names of family members are unique only within each family, then each person can be uniquely identified by the combination of first name and family name; there is only one Jane Doe, though there may be many Janes. Within the namespace of the Doe family, just "Jane" suffices to unambiguously designate this person, while within the "global" namespace of all people, the full name must be used. Prominent examples for namespaces include file systems, which assign names to files. Some programming languages organize their variables and subroutines in namespaces. Computer networks and distributed systems assign names to resources, such as computers, printers, websites, and remote files. Operating systems can partition kernel resources by isolated namespaces to support virtualization containers. Similarly, hierarchical file systems organize files in directories. Each directory is a separate namespace, so that the directories "letters" and "invoices" may both contain a file "to jane". In computer programming, namespaces are typically employed for the purpose of grouping symbols and identifiers around a particular functionality and to avoid name collisions between multiple identifiers that share the same name. In networking, the Domain Name System organizes websites (and other resources) into hierarchical namespaces.
Мысалдар
+ Атау кеңістігіндегі атаулардың мысалдары Контексттік атау Атау кеңістігі атауы Жергілікті атау Жол /home/user/readme.txt /home/user (директория) readme.txt (файл атауы) Домен атауы www.example.com example.com (домен атауы) www (жапырақ домен атауы) C++ std::array std (C++ кеңістігі) array (құрылым) UN/LOCODE US NYC US (ел немесе аумақ) NYC (жергілікті орналасқан жер) XML xmlns:xhtml="http://www.w3.org/1999/xhtml" <xhtml:body> xhtml (бұрын жарияланған XML кеңістігі xhtml="http://www.w3.org/1999/xhtml") body (элемент) Perl $DBI::errstr $DBI (Perl модулі) errstr (айнымалы) Java java.util.Date java.util (Java кеңістігі) Date (класс) Бірыңғай ресурс атауы (URN) urn:nbn:fi fe19991055 urn:nbn (Ұлттық библиографиялық нөмірлер) fi fe19991055 Handle System 10.1000/182 10 (handle naming authority) 1000/182 (handle жергілікті атауы) Цифрлық объектінің идентификаторы 10.1000/182 10.1000 (баспагер) 182 (жарияланым) MAC мекенжайы 01 23 45 67 89 ab 01 23 45 (ұйымдық бірегей идентификатор) 67 89 ab (NIC-ке тән) PCI ID 1234 abcd 1234 (өндіруші ID) abcd (құрылғы ID) USB VID/PID 2341 003f 2341 (өндіруші ID) 003f (өнім ID) SPARQL dbr:Sydney dbr (бұрын жарияланған онтология, мысалы, @prefix dbr: <http://dbpedia.org/resource/> арқылы көрсетілген) Sydney
Өкілеттік беру
Жауапкершілікті тараптар арасында бөлу, World Wide Web құрылымы сияқты нақты қолданыстарда маңызды. Атау кеңістіктері идентификаторларды тағайындау құқығын бірнеше атау беруші ұйымдарға жүктеуге, әрі жаһандық бірегейлікті сақтауға мүмкіндік береді. Орталық тіркеу органы тағайындалған атау кеңістігі атауларын тіркейді. Әр атау кеңістігі атауы, одан кейін өздеріне бөлінген атау кеңістігіндегі атауларды тағайындауға жауапты ұйымға беріледі. Бұл ұйым атауларды өзі тағайындайтын атау беруші ұйым немесе өз атау кеңістігінің бөліктерін басқа ұйымдарға жүктететін тағы бір тіркеу органы болуы мүмкін.
Иерархиялық жүйе
Атау кеңістіктерін үшінші тараптарға бөлуге мүмкіндік беретін атау жүйесі иерархиялық атау кеңістігі болып табылады. Егер атау кеңістігі атауларының синтаксисі әрбір бөлу үшін бірдей болса, онда иерархия рекурсивті болады. Рекурсивті иерархияның мысалы – Домендік атаулар жүйесі. Рекурсивті емес иерархияның мысалы – Интернетке тағайындалған нөмірлер органының (IANA) нөмірін көрсететін Бірыңғай ресурс атауы. + Карл Поппердің «Ғылыми білімнің логикасы» кітабының идентификаторы, 10-шы басылымы үшін urn:isbn:978 3 16 148410 0 иерархиялық атау кеңістігінің жіктелуі. Тіркеуші Тіркеуші Мысал идентификаторы Атау кеңістігінің атауы Атау кеңістігінің Бірыңғай ресурс атауы (URN) Интернетке тағайындалған нөмірлер органы urn:isbn:978 3 16 148410 0 urn Ресми URN атау кеңістігі Ресми URN атау кеңістігі Интернетке тағайындалған нөмірлер органы urn:isbn:978 3 16 148410 0 ISBN Халықаралық стандартты кітап нөмірлері Бірыңғай ресурс атауы ретінде Халықаралық тауарлық код (EAN) GS1 978 3 16 148410 0 978 Bookland Халықаралық стандартты кітап нөмірі (ISBN) Халықаралық ISBN Агенттігі 3 16 148410 X 3 Немец тілінде сөйлейтін елдер Немец баспасы Agentur für Buchmarktstandards 16 Mohr Siebeck
Компьютерлік ғылымға қатысты ойлар
Компьютерлік ғылымдағы атау кеңістігі (кейде атау ауқымы деп те аталады) – бірегей идентификаторлардың немесе символдардың (яғни, атаулардың) логикалық топталуын сақтау үшін құрылған абстрактілі контейнер немесе орта. Атау кеңістігінде анықталған идентификатор тек сол атау кеңістігімен байланысты болады. Бір идентификатор бірнеше атау кеңістігінде тәуелсіз түрде анықталуы мүмкін. Яғни, бір атау кеңістігінде анықталған идентификатордың, басқа атау кеңістігінде анықталған сол идентификатормен бірдей мағынасы болуы да, болмауы да мүмкін. Атау кеңістіктерін қолдайтын тілдер, идентификатордың (оның анықтамасы емес) қай атау кеңістігіне жататынын анықтайтын ережелерді белгілейді. Бұл ұғымды аналогия арқылы түсіндіруге болады. Екі компанияны көзге елестетіңіз, X және Y, олардың әрқайсысы өз қызметкерлеріне жеке нөмірлер тағайындайды. X компаниясында бірдей жеке нөмірі бар екі қызметкер болмауы керек, сондай-ақ Y компаниясында да; бірақ екі компанияда да бірдей жеке нөмірді пайдалану ешқандай мәселе тудырмайды. Мысалы, егер Билл X компаниясында, ал Джейн Y компаниясында жұмыс істесе, олардың әрқайсысы 123-ші қызметкер болуында ешқандай қиындық жоқ. Осы мысалда, ID нөмірі – идентификатор, ал компания атау кеңістігінің ролін атқарады. Бір идентификатордың әр атау кеңістігінде әртүрлі адамды көрсетуі ешқандай проблема тудырмайды. Ірі компьютерлік бағдарламаларда немесе құжаттарда жүздеген немесе мыңдаған идентификаторлар болуы мүмкін. Атау кеңістіктері (немесе осыған ұқсас техника, Атау кеңістіктерін эмуляциялауды қараңыз) жергілікті идентификаторларды жасыру механизмін ұсынады. Олар логикалық жағынан байланысты идентификаторларды тиісті атау кеңістіктеріне топтастыруға мүмкіндік береді, соның арқасында жүйе модульдік болады. Деректерді сақтау құрылғылары және көптеген қазіргі заманғы бағдарламалау тілдері атау кеңістіктерін қолдайды. Сақтау құрылғылары атау кеңістіктері ретінде каталогтарды (немесе қалталарды) пайдаланады. Бұл құрылғыда әртүрлі каталогтарда сақталған бірдей аты бар екі файлды сақтауға мүмкіндік береді. Кейбір бағдарламалау тілдерінде (мысалы, C++, Python) атау кеңістіктерін атау идентификаторлары өзінің жоғары тұрған атау кеңістігімен байланысты. Осылайша, бұл тілдерде атау кеңістіктері біріне ішкі болып орналасып, атау кеңістігі ағашын құрайды. Бұл ағаштың түбірінде атаусыз ғаламдық атау кеңістігі орналасқан.
Жава
Java-да атау кеңістігі тұжырымы Java пакеттері арқылы іске асырылады. Барлық код пакетке жатады, бірақ осы пакетті міндетті түрде атаудың қажеті жоқ. Басқа пакеттерден кодқа қол жеткізу үшін, тиісті идентификатордың алдына пакет атауын қою қажет, мысалы, java.lang пакетіндегі String класын java.lang.String деп атауға болады (бұл толыққанды сынып атауы деп аталады). C++ сияқты, Java пакет атауын жазу қажеттілігін жойатын құрылымды ұсынады (import). Дегенмен, кейбір мүмкіндіктер (мысалы, рефлексия) бағдарламашыдан толыққанды атауды пайдалануды талап етеді. C++-тан айырмашылығы, Java-дағы атау кеңістіктері тіл синтаксисі тұрғысынан иерархиялық емес. Бірақ пакеттер иерархиялық түрде аталады. Мысалы, java-дан басталатын барлық пакеттер Java платформасының бөлігі болып табылады – пакет тілдің негізгі кластарын, ал пакет рефлексияға қатысты негізгі кластарды қамтиды. Java-да (және Ada, C# және басқаларында) атау кеңістіктері/пакеттер кодтың семантикалық категорияларын көрсетеді. Мысалы, C#-та System атау кеңістігі жүйемен (NET Framework) ұсынылатын кодты қамтиды. Осы категориялардың нақтылығы мен иерархия деңгейі тілдерге қарай өзгеше. Функциялар мен сыныптардың аумағы көріну, қолжетімділік және объектінің өмір сүру мерзімімен тығыз байланысқан имплицитті атау кеңістіктері ретінде қарастырылуы мүмкін.
XML атау кеңістігі
XML-де XML атау кеңістігінің сипаттамасы XML құжатындағы элементтер мен атрибуттардың атауларын бірегей етуге мүмкіндік береді, бұл бағдарламалау тілдеріндегі атау кеңістіктерінің атқаратын қызметіне ұқсас. XML атау кеңістіктерін қолдану арқасында XML құжаттары бірнеше XML сөздігінен элементтер мен атрибуттардың атауларын қамтуы мүмкін.