JavaEE之XML学习

一、JavaEE与XML

JavaEE(Java Enterprise Edition),一般表示Java企业应用开发中所经常用到的开发套件与框架,而学习JavaEE一般都是从Java Web(包括Servlet/JSP,Tomcat等)开始的,从这里开始,你将会接触到最基本的XML用于配置你的项目。

XML(Extensible Markup Language)1998,是一种用来解决;SGML(Standard Generalized Markup Language)1969过于复杂,而HTML(HyperText Markup Language)1991又比较简单,功能不够充分而出现的一种语言,广受开发人员的喜爱,从而用于各种场合中。XML标记只描述文档内容的结构和语义而不是内容的格式,格式可在另外的样式表中描述。

在讲XML之前,还要简要描述下DTD-文档类型定义
DTD(Document Type Definition)用于定义XML标签含义,约束XML的值类型以及范围。比如月份的定义:

<MONTH> 12 </MONTH>

这是个合法的定义,但如果超过1~12这个范围,XML是无法处理对错的,所以这里可以定义DTD用于约束XML。
DTD应规定元素清单,属性,标记,文档中的实体以及相互关系。比如一项DTD指定一个BOOK元素中有一个ISBN子元素,一个TITLE子元素,一个或多个AUTHOR子元素等。
因为XML的作用不是单一的,当多种DTD解释XML的同种标记时可能产生二义性,所以XML中有命名域的概念,每个不同的DTD可以作为一个命名域来排解这种冲突。

二、XML的应用

2.1、作为专业领域标记语言

在我个人的理解中,XML实际上就是一种多领域自治互通语言,它能解决不同领域间的沟通问题。我们知道,XML的基本元素形式是这样的:

<标签 属性="值"...> 内容 </标签>

我们可以很容易的定义自己的标签从而表示出复杂的数学/化学公式或者乐谱等。

2.2、作为配置文件

XML还经常用于程序配置中,我们知道mysql的程序配置是这样的:

[子程序]
键 = 内容
......

如果配置比较简单的确可以这样实现,但是如果配置是分模块,分层次的,并且有语义约束。那么使用上面的形式就很难做到了。使用XML作为配置文件对比如上配置文件就像 面向对象的配置 和 面向过程的配置 一样。后者更有利于组织配置以及配置之间的关系。

2.3、作为XML的描述文件

如果要将XML用于某一公共领域,那么私人肯定是不能随意定义和解释"公共标签"的,那么这时,可以依靠XML用来描述另一个XML,在JavaEE中经常会遇到这样的东西:XSL-XML样式单语言XLL-XML链接语言XSD-XML文档模式定义

2.3.1、XSL

  XSL(Extensible Style Language)主要用于将另外的XML文档转换为另外一种格式的文档。
  它主要有两个部分,第一部分定义了将XML文档加以转换的词汇表,这一部分的XSL将XML文档从一种标记词汇转换为另一种所需要的元素。这部分通称为"变换部分"。
XSL的第二部分定义了用于格式化转换后的XML文档(由第一部分产生)的词汇表。这包括用于格式化对象(比如分页,块,表格,图形等)的XML标记。这部分通称为"格式化部分"。
XSL的功能包括但不限于:抽取XML元素属性/内容,转换XML元素属性/内容,选择/重排XML元素等等,很像我们平时将HTML静态页面在服务器渲染数据的过程。只不过XSL是在客户端进行渲染的,并且数据源是XML文档。
综上所述,XSL更适合现实世界和大量数据应用的最佳选择,CSS更适合简单页面,即使CSS在预处理和JS方面的加持下,功能也无法突破自身的限制。

2.3.2、XLL

  XLL(Extensible Linking Language)类似于HTML中的<a …/>,但功能比之只有更强,因为XLL是双向的,读者可以跳转过去也可以跳转回来,并且XLL可以寻址文档内部的任意位置,比如第3个< p >标记等。

2.3.4、XSD

XSD(XML Schemas Definition),是DTD的替代品,特点有下:

  1. XML Schema基于XML,没有专门的语法
  2. XML Schema可以象其他XML文件一样解析和处理
  3. XML Schema比DTD提供了更丰富的数据类型.
  4. XML Schema提供可扩充的数据模型。
  5. XML Schema支持综合命名空间
  6. XML Schema支持属性组。

JavaEE开发人员会经常与XSD打交道,当然,仅需了解常用用法的话是不需要了解XSD的,但如果想深究其原理,就不得不懂点XSD了。在比如Maven配置文件 pom.xml 中的根标签中就有如下定义:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

可以看出工程标签中有三个属性定义,分别是:
默认命名空间 : xmlns=“http://maven.apache.org/POM/4.0.0”,代表着该标签内的元素都是该命名域中的元素。

带有前缀的(实例)命名空间 : xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”,这句代表着该标签内部 带有 xsi 前缀的标签是该命名域中的元素。如果只有一个实例,可以将该实例命名空间声明为默认的,之后写标签就不用写前缀了。

命名域架构声明 : xsi:schemaLocation =
http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd
这句的形式是以"键 值"的形式定义的,键是空格前面的命名域,值是空格后面的XSD文件,这句代表着xsi命名域中的架构设置为后面的文件。该属性中可以声明多条键 值对。

三、XML的解析

  定义了规则后,在应用时就需要具体的程序去解析(parse)它。XML解析器通过读入一个正确的XML文件,将其分解为各种元素,使程序员能够正确地访问这些元素。一般来说,XML有两种解析器:

  1. 文档对象模型解析器
      文档对象模型(DOM)解析器是树型解析器,它们将读入的XML文档转换为树形结构。

  2. XML简单API解析器
      XML简单API(XSI)解析器是流式解析器,它们在读入XML文档时生成相应的事件。

它们的区别是,DOM解析器因为需要将整个文档建立为树形结构,所以更加消耗内存,但信息也更加全面。XSI解析器不会以任何方式存储文档,而是基于事件回调来解析XML的。所以XSI解析器更适合文档内容较多,并且处理算法比较简单,不必看到完整的文档结构时使用。比如网络爬虫需要爬取全部的<a />标签,但又不过度依赖文档上下文,这时使用XSI就更好。

更多学习途径:
W3 XML标准;
W3C XML Schema文档;
同类型博客;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值