3.2命名空间的运行机制

###XML命名空间的运行机制

  • 命名空间为XML的元素和属性分派URI,以消除相同名称产生的歧义

  • 命名空间属性被放置于元素的开始标签中

  • 命名空间的声明:

  • 规范:http://www.w3.org/TR/REC-xml-names/

  • 直接命名:xmlns:[命名空间前缀]=[命名空间名URI]

  • 默认命名:xmlns=[命名空间名URI]

<pers:personxmlns:pers=”http://www.lzu.edu.cn/pers”>
 <person xmlns=”http://www.lzu.edu.cn/pers”>

**xmlns(xml namespace)是专门用于声明命名空间的关键字XML命名空间的运行机制 **

  • 使用XML命名空间,元素名就成为了限定名(Qualified Names, QName)

  • 本地部分:元素名

  • 命名空间前缀:确定了名称所在的命名空间XML命名空间的运行机制。

  • 声明了pers命名空间前缀及其代表的URI (http://www.lzu.edu.cn/pers)

  • 命名空间前缀用在元素名前面:pers:personnn前缀pers的唯一作用是代表一个命名空间的名称,没有任何含义,可用其他前缀代替。

  • 前缀名也要遵循元素名命名规则,pers:person的任何子元素或属性都可以使用该前缀,表示都属于http://www.lzu.edu.cn/pers命名空间 <pers:personxmlns:pers=”http://www.lzu.edu.cn/pers”>

  • 元素的开始标签和结束标签都要有前缀

<pers:person xmlns:pers=”http://www.lzu.edu.cn/pers”>     
    <pers:name>
        <pers:title>Sir</pers:title>
    </pers:name>
</pers:person>
  • 只有有前缀的元素才是命名空间的一部分

<pers:personxmlns:pers=”http://www.lzu.edu.cn/pers”> 
    <first/>
</pers:person>
  • XML解析器使用命名空间代替所有的命名空间前缀 <pers:person> ==<{http://www.lzu.edu.cn/pers\ person}>(完全限定名)

<?xml version="1.0"?>
<pers:person xmlns:pers="http://www.wiley.com/pers" xmlns:html="http://www.w3.org/1999/xhtml">
    <pers:name>
        <pers:title>Sir</pers:title>
        <pers:first>John</pers:first>
        <pers:middle>Fitzgerald Johansen</pers:middle>
        <pers:last>Doe</pers:last>
    </pers:name>
    <pers:position>Vice President of Marketing</pers:position>
    <pers:resume>
        <html:html>
            <html:head>
                <html:title>Resume of John Doe</html:title>
            </html:head>
            <html:body>
                <html:h1>John<html:h1>
                <html:p>John's a great guy,you know?</html:p>
            </html:body>
        </html:html>
    </pers:resume>
</pers:person>
  • pers前缀表示属于pers命名空间的元素

  • html前缀表示属于XHTML命名空间的元素

  • 前缀本身没有实际意义,前缀表示的命名空间才是解析器关心的XML命名空间的运行机制

  • 默认的命名空间

  • 一个不含前缀的元素及其所有子元素都属于同一个命名空间

  • 不需要在默认的命名空间所有元素前面插入前缀

  • 元素名不是限定名,用全域名称(Universal Name)表示一个命名空间里面的任何元素,不管是有前缀的限定名,还是默认命名空间中的名称

  • 一个元素可声明多个命名空间,只有一个默认的命名空间,默认的命名空间对属性无效XML命名空间的运行机制

<?xml version=“1.0”?> <person xmlns=“http://www.wiley.com/pers” xmlns:html=“http://www.w3.org/1999/xhtml”> <name> <title>Sir</title> <first>John</first> <middle>Fitzgerald Johansen</middle> <last>Doe</last> </name> <position>Vice President of Marketing</position> <résumé> <html:html> <html:head><html:title>Resume of John Doe</html:title></html:head> <html:body> <html:h1>John Doe</html:h1> <html:p>John’s a great guy, you know?</html:p> </html:body> </html:html> </résumé> </person>
  • XML命名空间的运行机制

  • 默认的命名空间

  • 可以在文档的任何一个元素里声明命名空间前缀

  • 在离使用命名空间最近的位置定义命名空间

  • xhtml前缀只作用与

    元素及其子元素

  • 对元素不起作用,也对非

    子元素的元素不起作用

  • 在文档的任何地方使用默认命名空间

  • 在离使用命名空间最近的位置声明 XML命名空间的运行机制

<?xml version=“1.0”?> 
<person xmlns=”http://www.wiley.com/pers”>
    <name>
        <title>Sir</title>
        <first>John</first>
        <middle>Fitzgerald Johansen</middle>
        <last>Doe</last>
    </name>
    <position>Vice President of Marketing</position>
    <résumé>
         <html xmlns=”http://www.w3.org/1999/xhtml”>
            <head>
                <title>Resume of John Doe</title>
            </head>
             <body>
                    <h1>John Doe</h1>
                    <p>John’s a great guy, you know?</p>
            </body>
        </html>
    </résumé>
</person> 
  • 取消默认命名空间

  • 通过编程方法从XML读取信息

  • DOM和SAX

Last updated