[WS]Web服务系列(三) XML技术

简介: 对于XML这个名字,我们已经再熟悉不过了。它可以说是既简单又复杂,因为XML本身具有简单明确的规则,但随着越来越多基于XML技术的新应用的出现,它又演化出各种复杂的语言。希望这篇帖子能为你解决以下问题:XML是什么、我们为什么需要它以及怎样使用它。

对于XML这个名字,我们已经再熟悉不过了。它可以说是既简单又复杂,因为XML本身具有简单明确的规则,但随着越来越多基于XML技术的新应用的出现,它又演化出各种复杂的语言。希望这篇帖子能为你解决以下问题:XML是什么、我们为什么需要它以及怎样使用它。

XML,全称是可扩展标记语言(eXtensible Markup Language),它是一种标记语言。标记语言的特点是具有三个要素:标记、元素和属性。先看一段简单的XML例子,如下所示:

<? xml version="1.0" ?>
< team >
< member leader ="true" >
< name > 张浩 </ name >
< age > 25 </ age >
</ member >
< member leader ="false" >
< name > 孙亮 </ name >
< age > 25 </ age >
</ member >
</ team >

可以看出XML文档具有树状的结构,应该说这种结构是很适合描述数据的,所以会有不少人把XML作为持久化数据的方式。上面的XML文档中,用尖括号括起来的是标记,例如<team>、<member>等等,带斜线/的是结束标记,不带的是开始标记,如果是空标记可以写作<team />的形式;开始标记和结束标记与它们之间的内容合称元素属性是一个名称-值对,例如leader="true"表示leader是member元素的属性。

从XML的格式很容易想到HTML,HTML也是一种标记语言,还有WML、XHTML等等都是标记语言,XML与它们的不同之处在于:XML是创造这些标记语言的元语言。如果拿面向对象语言来类比的话,那就是HTML、WML、XHTML等等都继承了XML,是XML的子类。因此,凡是XML具备的特性,它们也都具备。例如,一个文档只能有一个根元素,标记可以嵌套但不能交叉,属性必须用双引号括起来,开始标记和结束标记必须配套等等。如果一个XML文档不遵守这些规则,则称它是无效的。另外,还可以通过DTD或Schema对XML格式增加额外的约束,例如可以要求<team>元素下至少有一个<member>元素,<age>元素为可选的等等,如果XML文档是有效的同时还满足这些额外要求,则称这个文档是格式良好的。

DTDSchema是验证XML是否格式良好的两种方式。DTD出现得比较早,它不是XML格式的;Schema则是XML格式的,并且功能更强,支持正则表达式。在XML文档头部可以引用这些文件,处理该XML文档时就会对它进行验证,如果验证失败则不会做进一步处理。为节约篇幅,DTD和Schema的格式这里就不细说了。一般来说,如果在程序中需要定义自己的XML格式,最好先定义DTD或Schema,我们平常使用的大部分XML文档如web.xml、struts-config.xml都有自己的DTD或Schema用来保证格式。

还要说一下名称空间的问题。名称空间是标记的前缀,XML文档在实际应用中可能会被合并,这个前缀保证了合并后的文档中不会出现冲突的标记。为了保证这个唯一性,名称空间一般使用URL的格式,例如:
< myNS:team xmlns:myNS ="http://www.mysite.com" >
</ myNS:team >

其中myNS是我们随便起的名字,后面的xmlns:myNS属性指定了这个名字代表的名称空间,应该注意真正有意义的是team这个名字。一个完整的标记应该是名称空间:标记名这样的形式,带有名称空间的XML文档读起来会有点乱,所以要认清哪些是重要的,哪些是暂时可以忽略的。

作为一种描述数据的方式,只要发挥想象力,XML可以有无限多种用途,你订阅过RSS吗,那也是其中之一。在Web服务中,我们用XML在服务提供者和使用者之间传递请求和响应数据(SOAP是其中一种格式)、用XML描述服务(例如WSDL),还用XML将服务组装成完整的流程(比如使用BPEL4WS),这些格式规范将在后面的帖子中一一介绍。对了,是XML的可扩展性成就了它们。

要在程序中使用XML,也许是从XML格式的配置文件中读取信息,或是向其他系统提供XML格式的数据,或者其他方式,最直接的方法是使用XML解释器,目前比较常见的DOM、SAX、JDOM和JAXP,其中JAXP作为Java扩展是一个统一的接口,前三者是它的实现方式。关于这些解释器的比较,有很多文章可以参考,这里就不赘述了,我用过DOM和JDOM,比较喜欢后者,因为代码量会小一些。

虽然直接使用XML解释器处理XML格式信息并在服务提供者和使用者间传递也是Web服务,但那样太麻烦了,我们将不得不处理各种琐碎问题(例如数据类型映射),同时产生大量代码。因此,有必要使用专门处理Web服务中各种专用XML格式的解释器,Apache Axis(前身是Apache SOAP)就是其中一种,它可以解释SOAP信息,比起直接用前面所说的XML解释器方便很多。

关于XML还有太多内容,例如XSL用来表现XML、XSLT用来在不同格式XML间转换,XPATH用来在XML文档中找到合适的元素,等等。怎么样,帖子开头提到的问题解决了吗?如果没有也没关系,IBM开发人员网站上有一个XML专区,在那里你一定会大开眼界,如果你是新手,先看看这个教程,可比我写得好多了,呵呵...下一贴开始讲SOAP。

本文转自博客园八进制的博客,原文链接:[WS]Web服务系列(三) XML技术,如需转载请自行联系原博主。

相关文章
|
5月前
|
开发框架 监控 安全
Windows Defender 导致 Web IIS 服务异常停止排查
某日凌晨IIS服务异常停止,经查为Windows Defender安全补丁KB2267602触发引擎更新,导致系统资源波动,进而引发应用池回收。确认非人为操作,系统无重启。通过分析日志与监控,定位原因为Defender更新后扫描加重负载。解决方案:将IIS及.NET相关路径添加至Defender排除列表,避免业务影响。
646 116
|
6月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
636 1
|
9月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
9月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
11月前
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
546 35
|
9月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。该方案设计目标是实现通用性,适用于各种网络架构和业务场景。
292 1
|
10月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。
385 7
|
数据采集 Web App开发 API
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
本文介绍了如何使用FastAPI和Selenium搭建RESTful接口,访问免版权图片网站Pixabay并采集图片及其描述信息。通过配置代理IP、User-Agent和Cookie,提高爬虫的稳定性和防封禁能力。环境依赖包括FastAPI、Uvicorn和Selenium等库。代码示例展示了完整的实现过程,涵盖代理设置、浏览器模拟及数据提取,并提供了详细的中文注释。适用于需要高效、稳定的Web数据抓取服务的开发者。
772 15
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
899 7
|
5月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
488 4