XML简易教程之三_XML/RSS

XML的未来
现在你已经知道XML。确实,结构有点复杂,而且DTD有各种可
以定义文档可以包含的内容的选项。但还不只这些。

考虑一个数据交换对其很重要的产业,如银行。银行使用所有
权系统来跟踪内部的交易,但是如果他们在Web上使用一种通用
的XML格式,那么他们必须描述交易信息给另一个机构或应用程
序(如Quicken或MS Money)。当然,他们也可以在Web页面上
表示数据。FYI:这个标记不存在。它叫做OFEX,开放金融交易
格式(Open Financial Exchange)。

在某种情况下,如果PC上的IE 4碰到一个<SOFTPKG> 标记符,一
个函数会被启动以给用户更新已安装的软件的机会。如果你用
的是Windows 98,你可能看见过这种情况,但是不知道它是一
个XML应用程序。

这里我们有三个XML应用程序,看起来与Andy Grove在70年代看
到的加法机、打字机和铅笔不同。但是与最终出现在PC上的应
用程序相似,XML的好处可以被一般性地描述为:“当你使用人
类和机器可读的标记符描述你的数据时,会有好事发生的。”

这些好事是什么呢?我不知道。但是我也不知道我的PC上的下
一代程序将会是什么样。只要数据以这种方式标记,可以产生
不同的应用。

你开始考虑它会扩展到什么程度了吗?

我们有很多XML的实际应用可以谈论,我会在不久的将来谈到它
们的。既然我们都是网民,以后将是XSL(扩展样式语言 -
eXtensible Style Language)了。

顺便提一句,这个菜谱确实是我妈妈_的,而且很杰出。如果你
用之,再加半杯碎椰子。

我写这篇文章是因为我真诚地关心你对我的看法。我担心的是:如果你读过我写的XML简介然后准备开始写自己的XML文档。于是你开始寻找一个已经建立的DTD来表示你的信息。你找到一个,如下所示:

 

<!ATTLIST fn

%attr.lang;

value CDATA #FIXED "TEXT">

<!ENTITY % attr.img "

img.type CDATA #REQUIRED

img.data ENTITY #REQUIRED">

马上你就会认为Jay一定是一个白痴。他没有说关于ATTLIST和ENTITY的任何事 - 不管它们是什么。

那么让我们谈谈这件事,先有一点耐心。

上面这些行可能不好看,但实际上没什么。它们被用在DTD中来定义XML文档中的属性和实体。了解HTML的人会对这很清楚。属性是带有HTML标记符的条目,用来更准确地描述标记符。在经常出现的<img src="my.gif" height="20" width="20">中,有两个属性:height和width。你在后面会看到,在XML文档使用属性与之很相似。

对实体也没有什么新东西。如果你用过&,你就已经掌握了最基本的东西。一个被&和分号包围起来的字符串用来表示另一个或一套字符。(这里有ISO实体的完整清单。)

当然,XML中属性和实体还有其它功能。这就不可避免地要引入语法,虽然不太多。一旦知道了这些,就会不费劲地使用XML文档。

简化菜谱

如果你读过我写的XML简介,你会记得用简单的标记符表示的菜谱中的组成成分,如<item>2 cups flour</item>。在写完那篇文章后,我在网上漫游,发现关于菜谱的另一个XML文档。其中的菜谱元素如下所示:

<ingredient quantity="2" units="cups">flour</ingredient>

这种方法有一个实际的好处:可以更容易控制数据。用第一种方法,<item>标记符用来容纳一堆不同的信息。如果我想提取组成成分的清单而不需要各成分的量,我就不会那么做。

我可以用如下的结构取得相似的功能:

<item>flour

<quantity>2</quantity>

<units>cups</units>

这可以被处理,但是有两个问题:首先,item元素包含了混合的内容:文本和其它标记符。我很快就发现应该尽量避免这种结构。其次是标记符几乎没有独立的意义。很难想象只要units而不要实际的组成成分的情况。这些条目可以被简单描述,我宁愿把它们当作属性。

首先要注意的是属性名,quantity和units只有被能够翻译它们的应用程序处理时才有意义。

在被包含在有效的文档中之前,应告诉DTD来允许它。对于上面的ingredient元素,我们在DTD中只包含了以下代码:

 

<!ELEMENT ingredient #PCDATA>

<!ATTLIST ingredient quantity CDATA #REQUIRED>

<!ATTLIST ingredient units CDATA #REQUIRED>

第一行看起来很熟悉 - 在任何DTD中都能看到的标准元素定义。每个ATTLIST行都依次包含以下信息:

<!ATTLIST ingredient quantity CDATA #REQUIRED>

这是属性依附的元素。

<!ATTLIST ingredient quantity CDATA #REQUIRED>

这里定义属性名。

<!ATTLIST ingredient quantity CDATA #REQUIRED>

这里设置属性类型。CDATA代表字符数据。意味着处理器在属性内可以得到文本。

<!ATTLIST ingredient quantity CDATA #REQUIRED>

最后的部分定义属性的缺省值。可以使用实际的数值,如3。这样,XML中空白长度的属性值将为3。输入的值将覆盖缺省值。

在上面的例子中我没有设置特定的数量,而是使用XML的关键字#REQUIRED。它告诉处理器次属性必须包含一个值。如果空白,文档将不被处理。

缺省值有另外两个关键字。第一个是#FIXED - 如果属性值在整个文档中保持相同的值。假设我定义一个image的标记符属性,所有图像的大小都相同,比如说100*50像素,就可以在DTD中这样定义属性:

<!ATTLIST picture length CDATA #FIXED "100 px">

<!ATTLIST picture width CDATA #FIXED "50 px">

 

另一个关键字是#IMPLIED,表示属性可以包含值或是空的。

下面让我们看看属性类型。

如果你决定自己写DTD,可能需要一本解释ATTLIST语句中所有组合的XML的书。但是如果借用DTD,或许只知道CDATA和另外三种属性就性了。

第一个是ID。它要求属性的值在文档中不重复。使用过数据库的人都知道唯一标志符的必要性。DTD ATTLIST语句看起来象这样:

<!ATTLIST element_name attribute_name ID #REQUIRED>

很难想象没有#REQUIRED缺省值的ID属性类型。如果那样,任何重复的或空的ID都会迫使处理器返回一个错误。ID必须以字母或下划线开始并且不能包含任何空格。

NMTOKEN类型也使用上面的命名规则。但是允许重复。它被用做传递数据给应用程序的保障。大多数程序语言,包括Java和JavaScript,在模块名中不能有空格。大多数情况下,最好保证属性符合它们的规则。

最后是枚举类型,不需要特定的关键字。而是用"|"符号包含在括号内的值,例如:

<!ATTLIST sibling (brother | sister) #REQUIRED>

如果有有限的可能的属性值,可以用这种方式。

不会认为今天的课程无趣吧,那么就接着读吧!

时间: 2024-10-01 03:23:41

XML简易教程之三_XML/RSS的相关文章

XML简易教程之四_XML/RSS

实体 有五种预定义的XML实体HTML编码者应该熟悉.XML文档中的字符&.<.>."和'被分别表示为&.@lt;.>."和'. XML很大程度上扩展了实体的功能 - 允许在DTD中定义实体以便在文档的其余部分使用.例如我在XML文档中需要频繁使用词组"Wired Digital"可以在DTD中这样表示 <!ENTITY wd "Wired Digital"> 这样当我使用这个词组时可以敲入&

XML简易教程之一_XML/RSS

在Intel的早期,Andy Grove遇到一个雇员 - 他建议公司在芯片的基础上开发个人计算机.AndyGrove疑问道"个人计算机能做什么呢?",这个雇员举例说,它可以存储处方.Grove考虑到整个研究.开发和市场费用要数百万美圆,最终决定以为红绿灯提供芯片作为开始. 每个人都是事后诸葛亮.Andy Grove,不管你怎样看他,被普遍认为是一个非常聪明的人 - 能够做出发展公司的重大决定.但是在七十年代,不可能强求他预见到个人计算机的潜力.如果他当时见过Excel.Quark.Ph

XML简易教程之二_XML/RSS

文档格式的排错 我妈妈_的清单中有数十条菜谱,甚至数百条.如果产生一个致命错误,排错将非常困难 - 你将一行一行地寻找丢失的标记符.如果使用几层嵌套,发现错误将很困难. 但是可以找到很好的帮助.分析器 - XML代码和报告格式错误的应用程序可以在网上免费得到.其中最好的是Lark,它的作者是由Tim Bray - XML规范的技术编辑和极力鼓吹者,地球上最聪明的人之一. 我用Lark分析下面的代码.注意"chocolate chips"和它的关闭标记符出现在</ingredien

使用XMLHTTP发送超长XML表单数据_XML/RSS

在把大量的XML作为POST数据的一部分发送给你的IIS服务器的时候--诸如在ASP表单的TEXTAREA里--你可能会得到一些没有预料到的结果.当数据在服务器上被处理的时候,由于你处理数据方式的不同,你最终可能会碰到错误.其原因是,当你把数据提交回服务器的时候,POST字段里有一个(数据)大小的限制.这样做的目的是为了防止可能的入侵者在实施拒绝服务(denial of service,DoS)的攻击中向服务器发送超大量的数据.  这一限制也束缚你的能力.但是有办法解决这个问题.如果你没被限制在

了解WEB页面工具语言XML(一)产生背景_XML/RSS

一.XML产生的背景 XML同HTML一样,都来自Standard Generalized Markup Language, 即标准通用标记语言,简称SGML.早在Web未发明之前,SGML就早已存在.正如它的名称所言,SGML是一种用标记来描述文档资料的通用语言,它包含了一系列的文档类型定义(简称DTD),DTD 中定义了标记的含义,因而 SGML 的语法是可以扩展的.SGML十分庞大,既不容易学,又不容易使用,在计算机上实现也十分困难.鉴于这些因素,Web的发明者--欧洲核子物理研究中心的研

把数据转换成XML格式的好处_XML/RSS

    我们常常会碰到需要处理以各种格式(从以逗号或者制表符做分隔符的文件到更负载的格式)保存或者传输的数据的情况,对每一种格式你都需要对应的解析器(parser).这一缺点减缓了开发进度,而且可能会导致错误的发生.一个解决方案就是把常用格式的数据转化成XML文档,然后对它进行保存.处理或者转换成其它格式. 一个实例 现在已经有好多种实现在软件内部或者软件之间进行数据保存.导出.导入以及传输功能的数据格式.最常见的是定界格式(delimited format),如逗号或者制表符分隔数据格式以及定

了解WEB页面工具语言XML(四)应用分类_XML/RSS

四.XML应用分类 总的说来的XML的应用可分为四类: (1)应用于客户需要与不同的数据源进行交互时.数据可能来自不同的数据库,他们都有各自不同的复杂格式.但客户与这些数据库间只通过一种标准语言进行交互,那就是XML.由于XML的自定义性及可扩展性,它足以表达各种类型的数据.客户收到数据后可以进行处理,也可以在不同数据库间进行传递.总之,在这类应用中,XML解决了数据的统一接口问题.但是,与其他的数据传递标准不同的是,XML并没有定义数据文件中数据出现的具体规范,而是在数据中附加tag来表达数据

了解WEB页面工具语言XML(三)支持工具_XML/RSS

三.支持XML的公司和它们的开发工具 尽管XML还处在开发阶段,其标准正在由W3C组织制定,但是已经有许多公司表示全力支持XML,并开发了不少XML工具.Adobe公司的FrameMaker可以用来书写XML文档.Microsoft公司推出的IE 4.0已经可以显示.处理和编辑XML文档,Microsoft公司作出承诺,要在下一个版本的Office 软件如MS Word.Excel中支持XML. Netscape.Sun公司也不甘寂寞,纷纷表示要在他们的Web工具中支持XML.除了这些著名的公司

一个简单的XML Schema的例子_XML/RSS

我们可以看到,DTD的语法相当复杂,并且它不符合XML文件的标准,自成一个体系.也就是说DTD文档本身并不是一个良好形式的XML文档,上面的关于DTD的介绍也仅仅是作了一个简介,目的是帮助大家能读懂DTD文件以及在必要时创建简单的DTD文件,因为现在很多的XML应用是建立在DTD之上的. 另外一个代替DTD的就是W3C定义的Schema,Schema从字面意义上来说,可以翻译成模式.大纲.计划.规划等等.它的基本意思就是说为XML文档制定一种模式. Schema相对于DTD的明显好处