返回介绍

给小白的 Java EE 生存指南(3) : XML

发布于 2025-01-22 00:38:53 字数 3674 浏览 0 评论 0 收藏 0

前两篇文章 《给小白的 Java EE 生存指南(1)》 和《给小白的 Java EE 生存指南(2)》 (注:回复关键字“小白”即可查看)基本上把 Web 编程所依赖的基础技术(HTTP,HTML, WEB 服务器,浏览器)的来龙去脉介绍完了, 从这篇开始 ,正式开始进入应用程序的开发领域。

其实 Web 应用程序开发也有个极为常见的技术: XML . 很多小白在问,为什么有 XML, 要 XML 干嘛?不是有 HTML 了吗 ? 晕倒

对一项技术我的风格是喜欢刨根问底, 不但要知道 how, 还要知道 why , 了解了一个技术的成因, 才能真正掌握。

假设你用 Java 写了一个很棒的 Web 应用, 这个程序可以在线购书, 在互联网刚起步的时代这个应用火的一塌糊涂 , 后来有个出版社看到了机遇, 就想和你搞合作: 我这儿也有个 Web 应用,可以给你提供很多书籍的资源, 你能不能开发个程序把这些书的信息读出来,放到你的网站上?

这没啥难的, 首先得定义一下你的应用和出版社的应用中间怎么进行数据交换, 你要定义一个格式,像这样:

[isbn|书名|作者|简介|价格]

例如: [978-7-229-03093-3|三体|刘慈欣|中国最牛的科幻书|38.00]

数据虽然紧凑, 但是每个字段是什么含义,不好理解, 你想起了 HTML 的标签好像不错,不如学习 HTML 改进一下:

<book>

<isbn>978-7-229-03093-3</isbn>

<name>三体</name>

<author>作者</author>

<introduction>中国最牛的科幻书</introduction>

<price>38.00</price>

</book>

由于 HTML 的标签<head>,<title>,<tr><td>...... 是有限的,而你的标签确实可以随意扩展的,想写什么写什么 所以你就把它称为 E x tensible M arkup L anguage, 简称 XML

现在每个字段的含义很明确, 人读起来也很爽了, 但是毕竟是程序在处理出版社发过来的数据, 万一他们的数据里少了一些重要字段该怎么办, 能不能自动的检测出来?

所以你需要设计一套 校验规则 , 能让程序自动校验一段 xml 文本是不是你期望的, 这个规则可以像这样:

<!ELEMENT book (isbn, name, author, introduction, price)>

<!ELEMENT price (#PCDATA)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT isbn (#PCDATA)>

<!ELEMENT introduction (#PCDATA)>

<!ELEMENT author (#PCDATA)>

其中第一行的意思是 xml 需要有个 book 标签(元素), 它包含了几个子标签 , 并且这几个标签必须都得有,并且按次序出现。

其他行表示每个标签都是文本就可以了。

你把这个东西起名为文档类型定义 D ocument T ype D efinition, 简称 DTD

这样就不怕出版社使坏了, 对他们发过来的数据,在真正的处理之前, 你写了个程序, 调用用 DTD 一验证就知道是不是合法的, 少了个字段什么的一下子就能查出来,巨爽。

后来又有人发明了 DTD 的改进版 XML Schema ,那就是后话了。

慢慢的你就发现,XML 极为灵活,描述一个东西非常方便, 除了应用之间交互数据之外,用来描述你的系统的配置信息也大有永无之地。

原来你为了让代码有可移植性(说白了就是在别人的机器上安装时不用费那么大劲),把数据库的 ip , 用户名, 密码 都写在了一个文本文件中, 这样就可以只改配置而不用改动代码了

ip=192.168.0.1

name=test

user=liuxin

password=liuxin

但是碰到复杂的,尤其是层次化的配置用文本文件就捉襟见肘了,例如:

form1.name=login

form1.class=com.test.login

form1.property1.name=ok

form1.property1.type=java.lang.String

form1.property2.name=failure

form1.property2.type=java.lang.String

form2.name=logout

form2.class=com.test.logout

form2.property1.name=ok

form2.property1.type=java.lang.String

form2.property2.name=failure

form2.property2.type=java.lang.String

是不是看的头大?

改成 xml 描述看看, 是不是就容易理解多了:

<form name="login" class="com.test.login">

<property name="ok" type="java.lang.String" />

<property name="failure" type="java.lang.String" />

</form>

<form name="logout" class="com.test.logout">

<property name="ok" type="java.lang.String" />

<property name="failure" type="java.lang.String" />

</form>

其实不光是你, 现在绝大多数 Java 应用程序的配置文件都是 xml , 已经成为事实的标准了。

总结:XML 主要用于程序之间的数据交换, 以及描述程序的配置信息。

历史知识:

早在 1969 年,IBM 公司就开发了一种文档描述语言 GML 用来解决不同系统中文档格式不同的问题,这个语言在 1986 年演变成一个国际标准(ISO8879),并被称为 SGML,SGML 是很多大型组织,比如飞机、汽车公司和军队的文档标准,它是语言无关的、结构化的、可扩展的语言,这些特点使它在很多公司受到欢迎,被用来创建、处理和发布大量的文本信息。

在 1989 年,在 CERN 欧洲粒子物理研究中心的研究人员开发了基于 SGML 的超文本版本,被称为 HTML。HTML 继承了 SGML 的许多重要的特点,比如结构化、实现独立和可描述性,但是同时它也存在很多缺陷:比如它只能使用固定的有限的标记,而且它只侧重于对内容的显示。

同时随着 Web 上数据的增多,这些 HTML 存在的缺点就变的不可被忽略。W3C 提供了 HTML 的几个扩展用来解决这些问题,最后,它决定开发一个新的 SGML 的子集,称为 XML。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文