`
sunli_qun
  • 浏览: 13592 次
  • 性别: 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来做个测试。
分享到:
评论

相关推荐

    XML和Java解析技术

    - 第二天:XML - 第三天:DTD - 第四天:命名空间与XML Schema - 第五天:XPath与XSLT - 第六天:Java与DOM - 第七天:Java与SAX、XSLT #### 四、课程组织 - **讲座**:涵盖理论知识和概念介绍。 - **演示**:展示...

    mybatis第二天课堂笔记

    **MyBatis** 是一个优秀的持久层框架,它支持自定义 SQL 查询语句,并能很好地与 Java 的 POJOs 对象(Plain Old Java Objects)进行映射,这使得开发者能够轻松地进行数据库交互操作。MyBatis 的设计目标是将 SQL ...

    通向架构师的道路(第二天)之apache_tomcat_https应用

    第二天的学习内容主要围绕Apache HTTP Server与Tomcat的整合,以及HTTPS的应用。通过这种架构,我们可以将静态HTML内容的处理交给Web Server,而App Server(如Tomcat)则专门处理Java请求,这样能够显著提高系统的...

    mybatis第二天课堂笔记.doc

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 - **特点**: - 不完全的ORM框架:相较于Hibernate等完全ORM框架,...

    Springmvc第二天课程文档

    - **命名空间**:`mapper.xml`中的`namespace`应与对应的Java接口的全限定名一致。 - **方法名**:XML映射文件中的SQL语句ID应与接口中的方法名相同。 - **参数类型**:`parameterType`应与接口方法的参数类型...

    java0107-main.rar

    这个命名通常表示该文件是关于Java编程的一个特定主题,可能是第107次讨论或者第107天的学习内容,而"main"则可能指的是主要的代码库或主程序。 【描述】虽然描述部分只给出了文件名"java0107-main.rar",但我们...

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

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

    通向架构师的道路(第十一天)之Axis2 Web Service(二).docx

    在“通向架构师的道路(第十一天)之Axis2 Web Service(二)”的主题中,我们主要探讨了如何使用Axis2框架创建和部署Web服务,并且使用简单Java类型来定义服务接口。以下是关于这个主题的详细知识讲解: 1. **Axis2 ...

    《21天学通c#》课件56讲

    《21天学通C#》是一门针对初学者精心设计的编程课程,旨在帮助学习者在短短21天内掌握C#编程的基础知识。这门课程覆盖了C#语言的核心概念、语法以及实际应用,通过56个PPT文件进行深入浅出的讲解。下面我们将详细...

    关于dome4j

    Dom4j是一个强大的Java库,用于...在实际开发中,Dom4j不仅可以用于基本的增删改查,还能处理更复杂的XML结构,例如查找、遍历、添加属性、处理命名空间等。熟练掌握Dom4j,能够大大提高处理XML文档的效率和灵活性。

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

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

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

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

    jdbc学习资料 内部资料

    #### 四、JDBC第二天知识点 ##### 预编译的Statement - `PreparedStatement`是一种特殊的`Statement`,它可以预编译SQL语句,提高性能并减少SQL注入的风险。 ##### 元数据 - **结果集元数据**:描述结果集中列的...

    day36_mybatis.zip

    在 "day36_mybatis.zip" 文件中,我们可以推测这可能是某次课程或学习计划的第三十六天,主题围绕 MyBatis 进行。这个压缩包可能包含了关于 MyBatis 学习的相关资料,如代码示例、教程文档等。 1. **MyBatis 概述**...

    【IT十八掌徐培成】Hadoop第01天-03.hadoop安装.zip

    【IT十八掌徐培成】Hadoop第01天-03.hadoop安装.zip这个压缩包文件,主要聚焦在Hadoop的安装过程上,这是一份关于大数据处理框架Hadoop的入门教程,由知名IT专家徐培成讲解。Hadoop是Apache软件基金会开发的一个开源...

    Spring第一天.pdf

    - 文件名称和路径自定义,但通常命名为`applicationContext.xml`。 - 配置文件基于XSD规范,使用`&lt;bean&gt;`标签来定义对象。 - 示例代码: ```xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; xmlns=...

    Java中Spring使用Quartz任务调度定时器

    )、字母L、字母W和井号(#)等,可以构建出复杂的执行规则,如每隔一定时间执行、每月的最后一天执行、每月的第二个星期一执行等。 在Spring中使用Quartz,首先需要创建一个带有定时任务的方法,通常使用`@...

    day05代码.zip

    "day05代码.zip"这个文件很可能包含了一位开发者在第五天学习或工作中编写的代码示例。这种命名方式常见于编程教程或者个人项目记录,其中的"day05"可能代表着学习计划的一个里程碑或者是某个项目开发的日程进度。 ...

Global site tag (gtag.js) - Google Analytics