命名空间
- 格式:ppt
- 大小:84.51 KB
- 文档页数:18


有关xml中的xmlns 命名空间
"xmlns"是XHTML namespace的缩写,叫做"名字空间"声明。名字空间是什么作用呢?我的理解是:
由于xml允许你自己定义自己的标识,你定义的标识和其他人定义的标识有可能相同,但表示不同的意义。当文件交换或者共享的时候就容易产生错误。为了避免这种错误发生,XML采用名字空间声明,允许你通过一个网址指向来识别你的标识。
比如在一个文档
Namespaces同样需要在XML文档的开头部分声明,声明的语法如下:
其中yourname是由你定义的namespaces的名称,URL就是名字空间的网址。
假设上面的"桌子
;
然后在后面的标识中使用定义好的名字空间:
wood table
这样就将这两个
命名冲突请看下面两个例子
这个 XML 文档在table元素中携带了水果的信息:
Apples
Bananas
这个 XML 文档在table元素中携带了桌子的信息(家具,不能吃的哦):
African Coffee Table
80
120
如果上面两个XML文档片断碰巧在一起使用的话,那么将会出现命名冲突的情况。因为这两个片断都包含了
--------------------------------------------------------------------------------
使用前缀解决命名冲突问题
下面的XML文档在table元素中携带了信息:
Apples Bananas
下面的XML文档携带了家具table的信息:
African Coffee Table
80
120
现在已经没有元素命名冲突的问题了,因为这两个文档对各自的table元素使用了不同的前缀,table元素在两个文档中分别是( 和)。
通过使用前缀,我们创建了两个不同的table元素。
--------------------------------------------------------------------------------
命名空间
.NET Framework 类库提供下列命名空间:
▲Microsoft.CSharp
包含支持用 C# 语言进行编译和代码生成的类。
▲Microsoft.JScript
包含支持用 JScript 语言进行编译和代码生成的类。
▲Microsoft.VisualBasic
包含支持用 Visual Basic .NET 语言进行编译和代码生成的类。
▲Microsoft.Vsa
包含使您可以将 .NET Framework 脚本引擎的脚本集成到应用程序中以及在运行时编译和执行代码的接口。
▲Microsoft.Win32
提供两种类型的类:处理由操作系统引发的事件的类和对系统注册表进行操作的类。
▲System
包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。
其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。
▲System.CodeDom
包含可用于表示源代码文档的元素和结构的类。这些元素可用于建立源代码文档的结构。通过使用
▲piler 命名空间所提供的功能,可以将源代码文档输出为用受支持的语言编写的源代码。
▲piler
包含用于管理用受支持的编程语言生成和编译源代码的类型。每个代码生成器可根据“代码文档对象模型”(CodeDOM) 源代码模型的结构(由
▲System.CodeDom 命名空间所提供的元素组成),用特定的某种编程语言生成源代码。
▲System.Collections
包含定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。
▲System.Collections.Specialized
包含专用的强类型集合;例如,链接表词典、位向量以及只包含字符串的集合。
▲ponentModel
C++命名空间namespace
虽然使用命名空间的方法,有多种可供选择。但是不能贪图方便,一味使用using 指令,这样就完全背离了设计命名空间的初衷,也失去了命名空间应该具有的防止名称冲突的功能。
一般情况下,对偶尔使用的命名空间成员,应该使用命名空间的作用域解析运算符来直接给名称定位。而对一个大命名空间中的经常要使用的少数几个成员,提倡使用using声明,而不应该使用using编译指令。只有需要反复使用同一个命名空间的许多数成员时,使用using编译指令,才被认为是可取的。
例如,如果一个程序(如上面的outi.cpp)只使用一两次cout,而且也不使用std命名空间中的其他成员,则可以使用命名空间的作用域解析运算符来直接定位。如:
#include
……
std::cout << "Hello, World!" << std::endl;
std::cout << "Outer::i = " << Outer::i << ", Inner::i = " <<
Outer::Inner::i << std::endl;
又例如,如果一个程序要反复使用std命名空间中的cin、cout和cerr(如上面的outi.cpp),而不怎么使用其他std命名空间中的其他成员,则应该使用using 声明而不是using指令。如:
#include
……
using std::cout;
cout << "Hello, World!" << endl;
cout << "Outer::i = " << Outer::i << ", Inner::i = " <<
Outer::Inner::i << endl;
4)命名空间的名称
l 命名空间别名
标准C++引入命名空间,主要是为了避免成员的名称冲突。若果用户都给自己的命名空间取简短的名称,那么这些(往往同是全局级的)命名空间本身,也可能发生名称冲突。如果为了避免冲突,而为命名空间取很长的名称,则使用起来就会不方便。这是一个典型的两难问题。
Docker命名空间
想学习更多Docker相关知识请看博主的个⼈博客地址:
命名空间
命名空间( namespace )是 Linux 内核的⼀个强⼤特性,为容器虚拟化的实现带来极⼤便利,利⽤这 特性,每个容器都可以拥有⾃⼰单独
的命名空间,运⾏在其中的应⽤都像是在独⽴的操作系统环境中⼀样 命名 间机制保证了容器之间彼此互不影响。
在操作系统中,包括内核、⽂件系统、⽹络、进程号( Process ID, PID )、⽤户号( UserID, UID 进程间通信( Inter Process
Communication, IPC )等资源,所有的资源都是应⽤进程直接共享的 要想实现虚拟化,除了要实现对内存、 CPU 、⽹络 IO 、硬盘 IO 、
存储空间等的限制外,还要实现⽂件系统、⽹络、 PID UID IPC 等的相互隔离 前者相对容易实现⼀些,后者则需要宿主主机系统的深⼊⽀
持。
随着 Linux 系统对于命名空间功能的逐步完善,现在已经可以实现这些需求,让进程在彼此隔离的命名空间中运⾏ 虽然这些进程仍在共⽤同
个内核和某些运⾏时环境(runtime ,例如⼀些系统命令和系统库),但是彼此是不可见的,并且认为⾃⼰是独占系统的
Docker 容器每次启动时候,通过调⽤ func setNamespaces(daemon *Daemon, s *specs. Spec, c *container.Container) error ⽅法来完成对
各个命名 间的配置
进程命名空间
Linux 通过进程命名 理进程号,对于同 进程(同 task struct ),在不同的命名空间中,看到的进程号不相同 个进程命名 间有⼀套 ⾃⼰的进
程号管理⽅法 进程命名空间是⼀个⽗⼦关系的结构,⼦空间中的进程对于⽗ 间是可见的 fork 出的 个进程,在⽗命名空间和⼦命名空间将分
别对应不同的进程号 例如,查看 Docker 服务主进程( dockerd )的进程号是 3393 ,它作为⽗进程启动了 docker containerd 进程,进程号