xml文件中写的 xmlns=.... 到底起到什么作用,我知道这是命名空间,比如我在xml正文写的<account>应该在命名空间中定义
但是一般常用的几种标准的命名空间,xmlns都指向w3c某个网址发布的文件,那么这对我编写xml文件有任何影响么?我的意思是说如果我的xmlns指向网络中某个规范的文档,而我写了其中没有定义的命名,也并不会报错阿,似乎这只成了个文档标记性的东西,起不到任何监测和约束的效果阿?我的另一个想法是,xml文档是自描述的,也就是在接收端解析xml文档的程序中,如果程序发现了某个标签为命名空间之外的,就会报错,用这个思路结束UTF-8编码设置是合理的,但是解释xmlns的真正作用还是不合理,因为如果xmlns指向互联网中某个网址,如果xml接受程序当前主机没联网情况下是不可能访问的,也没听说xml解析程序必须联网时候才能用...难道xmlns真仅仅是个类似注释的东西??

解决方案 »

  1.   

    帮你顶一下先!我知道使用命名空间防止名称重复。“如果xmlns指向互联网中某个网址...”引用《XML实用教程》中的一段话:
    “字符串“xmlns:book="http://bestbook.jmu.edu.cn/cs/testbook”并不是实际存在的网页,它可以是任何合法的字符串。只是采用URI的形式便于确保唯一性,一般采用编程人员所在单位的网址变形而成。如果不采用网址而是用随意的字符串,那么其他人员随意才用的字符串就可能与其相同而发生冲突。”“那么这对我编写xml文件有任何影响么?我的意思是说如果我的xmlns指向网络中某个规范的文档,而我写了其中没有定义的命名,也并不会报错阿”既然xmlns指向的并不是实际存在的网页,所以“我的xmlns指向网络中某个规范的文档,而我写了其中没有定义的命名”当然就不存在问题了。我是这样认为的,一块探讨。
      

  2.   

    XML里边的元素有两种方式来约束,一种是Schema
    一种是DTD,如果你的XML里边的元素是自己定义的,你就不用引用Schema或者DTD
    直接写自己的元素,不就行了。
      

  3.   

    我觉得命名空间应该从两个层面理解:
    1.我指的是 xml文件你自定义的命名空间,主要是为了保证xml文档的唯一性。就是我上面在书上找的那部分内容。2.你指的是 为了对xml文件用schema进行校验,当然要导入xml schema的命名空间了,好用schema对xml进行校验,但我始终认为并不要求写实际网址,只不过为了使用schema应按人家规范写。<?xml version ="1.0" encoding = "utf-8"?>
    <book xmlns:xsi="http://www.w3.org/2001/xmlSchema-instance" xsi:schemaLocation="http://tempuri.org/book/book.xsd" xmlns="http://tempuri.org.book">
    <!-- ..... -->
    </book>你指的是绿的,我是说红的。
      

  4.   

    <?xml version ="1.0" encoding = "utf-8"?>
    <book xmlns:xsi="http://www.w3.org/2001/xmlSchema-instance" xsi:schemaLocation="http://tempuri.org/book/book.xsd" xmlns="http://tempuri.org.book">
    <!-- ..... -->
    </book>刚才的代码的效果不太理想,呵呵。“http://tempuri.org.book” 肯定不是实际的网址。
      

  5.   

    那你的意思是不是说xmlns="http://tempuri.org.book",是一种标记,一种约定,但是对读取解析xml过程没有任何影响,换句话说,如果咱们大家都写xml文档附上标准的xmlns="http://www.w3.org那么无论是谁写的,另一个人一看就知道什么意思,因为http://www.w3.org已经成为一种约定俗成的命名空间
      

  6.   


    你的意识是不是说,“http://tempuri.org.book”仅仅代表一个唯一性标识,比如大家都用标准的w3c标注,然后一个人发起的xml文件,另一个人不需要特别解释就能理解。。
      

  7.   


    因为我认为,有了默认的名称空间:如 xmlns="http://tempuri.org.book" 你写的xml文件中的元素在这个空间下,由于这个URI的唯一性,别人写的xml不会与你写的xml发生冲突。“引用:“http://tempuri.org.book”仅仅代表一个唯一性标识,比如大家都用标准的w3c标注,然后一个人发起的xml文件,另一个人不需要特别解释就能理解。。”按照w3c规范,大伙一看都明白,呵呵。