3.1命名空间

####命名空间

  • 命名空间(namespace)的概念在许多计算机领域中有着广泛的应用,主要是通过某种形式来表示标识符(identifier)的上下文。

  • 标识符可能用于表示各种对象,比如在软件开发中可以表示变量、函数、数据对象等。编程语言中的命名空间

  • 在C++语言中,可以使用关键字namespace来声明命名空间,并使用{ }来界定命名空间的作用域。 namespace foo { int bar1,bar2;}

  • 使用namespace foo内的变量,必须使用::操作符,比如foo::bar1。可以使用关键字using导入某个名称、或整个的命名空间。

int main(){ 
    using foo::bar1;
    cout<< bar1 << endl;
}


int main(){
    using namespace foo;
    cout<< bar1 << endl;
}
  • Java语言Package:Java.applet.Applet和Java.app.Applet ####XML文档中的命名空间。

  • 解决XML文档中具有相同名称的元素和属性命名的冲突问题。某个命名空间中的元素或属性可以具有与其他命名空间中同名元素或属性完全不同的含义,从而对这些数据对象进行区分。

  • 将来自单一XML应用的相关元素和属性集合在一起,使软件能更容易识别。

  • XML的命名空间是用来混合多个词汇为一个单一文档的标准工具,通过在每个元素和属性的名称之间添加前缀来实现命名空间。

  • 来自不同XML文档的不同元素和不同属性组合为其他文档时,利用命名空间可以区别来自不同文档的元素和属性,可同时处理多个文档。

*元素

<person>
    ...
    <resume>
        ...
        <title>
        ...
    </resume>
    ...
</person>
<person>
    ...
    <name>
        ...
        <title>
        ...
    </name>
    ...
</person>
<?xml verson="1.0"?>
<person>
    <name>
        <tilte>Sir</title>
        <first>John</first>
        <middle>Fitzgerald Johansen</middle>
        <last>Doe</last>
    </name>
    <position>Vice President of Marketing</position>
    <resume>
        <html>
            <head>
                <title>Resume of John Doe</title>
            </head>
            <body>
                <h1>John<h1>
                <p>John's a great guy,you know?</p>
            </body>
        </html>
    </resume>
</person>
  • 元素中的内容都是XHTML格式

  • XML解析器无法区别两个

<table>
    <tr>
    <td>Apples</td>
    <td>Bananas</td>
    </tr>
</table>

<table>
    <name>African Coffee Table</name>
    <width>80</width>
    <length>120</length>
</table>

× 前缀  + 为文档中每一个元素取一个完全不同的名字   - XML文档中的每一个元素使用一个前缀:pers

  • 每一个XHTML元素使用另一个前缀:xhtml

* 前缀

<h:table> 
    <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
    </h:tr>
</h:table>

<f:table>
    <f:name>African Coffee Table</f:name>      
    <f:width>80</f:width>
    <f:length>120</f:length>
</f:table>
  • 命名空间与词汇表有关,与文档类型无关。

  • 命名空间仅表示哪些名字在哪个命名空间里,并不表示其含义,也不表示其组合形式。

  • 一个命名空间纯粹是一个抽象的实体,是一组在概念上彼此共存的名字。

  • 前缀的管理

  • 命名空间前缀本身也必须是唯一的。

  • 每个前缀映射到一个统一资源标识符(Uniform Resource Identifier, URI),并可为元素提供默认URI,与相同URI关联的元素和属性属于同一命名空间,URI必须用作前缀。 + URI是一个用来表示资源的字符串,有两种版本:HTTP/URL(Uniform Resource Locator,同一资源定位符)和URN(Universal Resource Name,统一资源名称)。

  • http://www.lzu.edu.cn/another-namespace

  • 对于命名空间,URL只是表示命名空间的一个符号,XML解析器不会从该URL读取任何资源

  • 命名空间看上去像一个URL,但一个命名空间的名字只是作为一个名字来使用,并不表示一个资源定位地址

  • Not well-formed--XML的非法字符

<?xml version=”1.0”?> 
<{http://www.lzu.edu.cn/pers}person>     
    <{http://www.lzu.edu.cn/pers}name> 
    <{http://www.lzu.edu.cn/pers}title>
    Sir 
    </{http://www.lzu.edu.cn/pers}title>
<!--etc...-->
  • 在XML中创建三部分组成的名称

  • 元素名称

  • 该名称的URI,作为元素的命名空间

  • 一个任意前缀表示一个URI,表示该元素所在的命名空间

Last updated