`
sunli_qun
  • 浏览: 12884 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

学习java&XML第二天,命名空间

    博客分类:
  • java
阅读更多
      关于XML的基础知识一直都是读的http://www1.xml.net.cn/那本初学进阶,讲的非常容易懂,就是关于命名空间这一块没有给出一个比较好的例子,所以自己整理了一下。
      初学进阶里面说命名空间是用于在一个XML里面引入多个DTD的,的确,概念上是这样子的,不过网上的资料显示XML的命名空间并不支持DTD格式的格式定义,也就是说,想实现一个XML当中有多个文档格式的话,就必须要使用Schema。
      先了解一下我们要实现的例子:
      
client.xml
<联系人列表>
  
<联系人>
    
<姓名>张三</姓名>
    
<ID>001</ID>
    
<公司>A公司</公司>
    
<EMAIL>zhang@aaa.com</EMAIL>
    
<电话>(010)62345678</电话>
    
<地址>
      
<街道>五街1234号</街道>
      
<城市>北京市</城市>
      
<省份>北京</省份>
    
</地址>
    
<直接上司>
      
<姓名>王五</姓名>
      
<电话>
        
<秘书电话>(010)62345678</秘书电话>
        
<手机>13601234567</手机>
      
</电话>
    
</直接上司>
  
</联系人>
</联系人列表>

      以上是我们想要最终表达的数据格式,其中,联系人的直接上司属性有点麻烦,因为整个直接上司表达的是一个“企业经理”的“对象”,该“对象”可以以另外的XML形式体现,如下:

<?xml version="1.0" encoding="GB2312"?>
<企业经理>
  
<姓名>王五</姓名>
  
<电话>
    
<秘书电话>(010)62345678</秘书电话>
    
<手机>13601234567</手机>
  
</电话>
</企业经理>

      看以上的两个文档,实际上就是我们想表达的数据,两个抽象的实体“联系人”和“企业经理”之间存在着一对一的关系。
      但是我们现在有个麻烦,在联系人列表这个XML当中,有两个“姓名”元素和两个“电话”元素,他们表达的是不同的意思,其文档格式定义也不同。他们分别对应着不同的DTD或者是Schema。
      为了解决这一问题,就有了命名空间的概念,首先,对于我们要最终作用于其上的client.xml,他必须首先区别联系人和企业经理,做法就是在前面加前缀,比如联系人的名字改为“联系人:名字”而企业经理的名字则改为“企业经理:名字”
      其次,两个不同的文档定义文件必须首先定义好命名空间,在作用于XML文件的时候,使命名空间和XML声明中的命名空间一致
      下面分别给出例子代码:
      client.xml:
<?xml version="1.0" encoding="GB2312"?>
<联系人:联系人列表 
xmlns:联系人
="id" 
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation
="id client.xsd id2 manager.xsd"
xmlns:企业经理
="id2">
    
<联系人:联系人>
        
<联系人:姓名>张三</联系人:姓名>
        
<联系人:ID>001</联系人:ID>
        
<联系人:公司>A公司</联系人:公司>
        
<联系人:EMAIL>zhang@联系人.com</联系人:EMAIL>
        
<联系人:电话>(010)62345678</联系人:电话>
        
<联系人:地址>
            
<联系人:街道>五街1234号</联系人:街道>
            
<联系人:城市>北京市</联系人:城市>
            
<联系人:省份>北京</联系人:省份>
        
</联系人:地址>
        
<联系人:直接上司>
            
<企业经理:姓名>王五</企业经理:姓名>
            
<企业经理:电话>
              
<企业经理:秘书电话>(010)62345678</企业经理:秘书电话>
              
<企业经理:手机>13601234567</企业经理:手机>
            
</企业经理:电话>
        
</联系人:直接上司>
    
</联系人:联系人>
    
<联系人:联系人>
        
<联系人:姓名>李四</联系人:姓名>
        
<联系人:ID>002</联系人:ID>
        
<联系人:公司>B公司</联系人:公司>
        
<联系人:EMAIL>li@bbb.org</联系人:EMAIL>
        
<联系人:电话>(021)87654321</联系人:电话>
        
<联系人:地址>
            
<联系人:街道>南京路9876号</联系人:街道>
            
<联系人:城市>上海市</联系人:城市>
            
<联系人:省份>上海</联系人:省份>
        
</联系人:地址>
        
<联系人:直接上司>aa</联系人:直接上司>
    
</联系人:联系人>
</联系人:联系人列表>

      client.xsd:
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<!--W3C Schema generated by XMLSpy v2005 sp1 U (http://www.xmlspy.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="id" targetNamespace="id" elementFormDefault="qualified">
    
<xs:element name="EMAIL" type="xs:string"/>
    
<xs:element name="ID" type="xs:string"/>
    
<xs:element name="公司" type="xs:string"/>
    
<xs:element name="地址">
        
<xs:complexType>
            
<xs:sequence>
                
<xs:element ref="街道"/>
                
<xs:element ref="城市"/>
                
<xs:element ref="省份"/>
            
</xs:sequence>
        
</xs:complexType>
    
</xs:element>
    
<xs:element name="城市" type="xs:string"/>
    
<xs:element name="姓名" type="xs:string"/>
    
<xs:element name="电话" type="xs:string"/>
    
<xs:element name="省份" type="xs:string"/>
    
<xs:element name="联系人">
        
<xs:complexType>
            
<xs:sequence>
                
<xs:element ref="姓名"/>
                
<xs:element ref="ID"/>
                
<xs:element ref="公司"/>
                
<xs:element ref="EMAIL"/>
                
<xs:element ref="电话"/>
                
<xs:element ref="地址"/>
                
<xs:element ref="直接上司"/>
            
</xs:sequence>
        
</xs:complexType>
    
</xs:element>
    
<xs:element name="联系人列表">
        
<xs:complexType>
            
<xs:sequence>
                
<xs:element ref="联系人" maxOccurs="unbounded"/>
            
</xs:sequence>
        
</xs:complexType>
    
</xs:element>
    
<xs:element name="街道" type="xs:string"/>
    
<xs:element name="直接上司" type="xs:anyType"/>
</xs:schema>

      manager.xsd:
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<!--W3C Schema generated by XMLSpy v2005 sp1 U (http://www.xmlspy.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="id2" targetNamespace="id2" elementFormDefault="qualified">
    
<xs:element name="企业经理">
        
<xs:complexType>
            
<xs:sequence>
                
<xs:element ref="姓名"/>
                
<xs:element ref="电话"/>
            
</xs:sequence>
        
</xs:complexType>
    
</xs:element>
    
<xs:element name="姓名" type="xs:string"/>
    
<xs:element name="手机" type="xs:string"/>
    
<xs:element name="电话">
        
<xs:complexType>
            
<xs:sequence>
                
<xs:element ref="秘书电话"/>
                
<xs:element ref="手机"/>
            
</xs:sequence>
        
</xs:complexType>
    
</xs:element>
    
<xs:element name="秘书电话" type="xs:string"/>
</xs:schema>

说明:我在这里用id和id2来表示命名空间是应为很多人会认为那个命名空间的网址会在解析XML的时候被访问,我一开始也这样认为,所以改成id来做个测试。
分享到:
评论

相关推荐

    电子书-21天学通J2EE第二部分

    第三周的课程介绍了企业应用的安全性和完、XML文档转换、模式、整合外部资源、WEB服务等。 本书适合于有一定Java编程经验的程序员阅读。通过本书的学习,能将您的Java技能提高到一个新的水平。

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    新建 Flex 工程 - 第二步 因此,需要填入 EmployeeMgmt-Server 项目的 web 根目录,该目录下必须要存在 /WEB-INF/flex/。点击“Validate Configuration”验证配置文件是否正确,只有通过验证后,才能继续。默认...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    新建 Flex 工程 - 第二步 因此,需要填入 EmployeeMgmt-Server 项目的 web 根目录,该目录下必须要存在 /WEB-INF/flex/。点击“Validate Configuration”验证配置文件是否正确,只有通过验证后,才能继续。默认...

    asp.net知识库

    在 SQL Server 2005 中使用表值函数来实现空间数据库 SQL Server 2005的30个最重要特点 同时安装sql2000和sql2005的经验 类如何与界面绑定 在Asp.net中如何用SQLDMO来获取SQL Server中的对象信息 使用Relations建立...

    c#学习笔记.txt

    接口可以是命名空间或类的成员,并且可以包含下列成员的签名:方法属性 索引器. 一个接口可从一个或多个基接口继承。接口可由类实现。实现的接口的标识符出现在类的基列表中。被继承的接口称为该接口的显式基接口。...

    ssh2(struts2+spring2.5+hibernate3.3)自动生成模版

    1.每次自动生成的代码都是一次性全部初始化生成,对于二次开发的人员来讲,需要对自己想要指定的单表(数据库表)进行生成(bean,hbm.xml,dao.service,action)时,该插件无法做到,我想了一下,作者应该会考虑到这一点吧,...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    第二章 系统设计 2.1. 系统分析 在整个blog进行开发之前,要确定出整个项目的整体架构,包括系统的选型、运行环境的确定及系统结构设计。下面对这进行详细介绍。 在进行软件系统开发的最初环节,一般都需要进行...

    C#微软培训资料

    第二章 运行环境 全面了解.NET.12 2.1 .NET 结构.12 2.2 公用语言运行时环境与公用语言规范.13 2.3 开 发 工 具 .17 2.4 小 结 .19 第三章 编写第一个应用程序 .20 3.1 Welcome 程序 .20 3.2 代 码 分 ...

    freemarker总结

    ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x&gt; ${x_index + 1}.${x}, 星期四"&gt;&lt;#break&gt;&lt;/#if&gt; &lt;p&gt;We have these animals: &lt;tr&gt;&lt;th&gt;Name&lt;th&gt;Price &lt;tr&gt;&lt;td&gt;${...

    易语言程序免安装版下载

    易语言5.1 相对于易语言5.0更新说明: ... 修改XML解析支持库,增加写出CDATA数据功能,解决解析XML时错误的丢弃换行和TAB字符的BUG,解决读取节点值时对CDATA数据进行转义处理的BUG。 20. 修改扩展界面支持库...

Global site tag (gtag.js) - Google Analytics