XML的未来
现在你已经知道XML。确实,结构有点复杂,而且DTD有各种可以定义文档可以包含的内容的选项。但还不只这些。
考虑一个数据交换对其很重要的产业,如银行。银行应用所有权系统来跟踪内部的交易,但是假如他们在Web上应用一种通用的XML格局,那么他们必需描写交易信息给另一个机构或利用程序(如Quicken或MS Money)。当然,他们也可以在Web页面上表现数据。FYI:这个标记不存在。它叫做OFEX,开放金融交易格局(Open Financial Exchange)。
在某种情况下,假如PC上的IE 4碰到一个 标记符,一个函数会被启动以给用户更新已安装的软件的机会。假如你用的是Windows 98,你可能看见过这种情况,但是不知道它是一个XML利用程序。
这里我们有三个XML利用程序,看起来与Andy Grove在70年代看到的加法机、打字机和铅笔不同。但是与终极呈现在PC上的利用程序类似,XML的利益可以被一般性地描写为:“当你应用人类和机器可读的标记符描写你的数据时,会有好事产生的。”
这些好事是什么呢?我不知道。但是我也不知道我的PC上的下一代程序将会是什么样。只要数据以这种方法标记,可以产生不同的利用。
你开端考虑它会扩大到什么程度了吗?
我们有很多XML的实际利用可以谈论,我会在不久的将来谈到它们的。既然我们都是网民,以后将是XSL(扩大样式语言 -eXtensible Style Language)了。
顺便提一句,这个菜谱确实是我妈妈_的,而且很出色。假如你用之,再加半杯碎椰子。
我写这篇文章是由于我真挚地关心你对我的见解。我担心的是:假如你读过我写的XML简介然后准备开端写自己的XML文档。于是你开端寻找一个已经建立的DTD来表现你的信息。你找到一个,如下所示:
%attr.lang;
value CDATA #FIXED 'TEXT'>
img.type CDATA #REQUIRED
img.data ENTITY #REQUIRED'>
马上你就会认为Jay必定是一个白痴。他没有说关于ATTLIST和ENTITY的任何事 - 不管它们是什么。
那么让我们谈谈这件事,先有一点耐心。
上面这些行可能不好看,但实际上没什么。它们被用在DTD中来定义XML文档中的属性和实体。懂得HTML的人会对这很明白。属性是带有HTML标记符的条目,用来更准确地描写标记符。在经常呈现的中,有两个属性:height和width。你在后面会看到,在XML文档应用属性与之很类似。
对实体也没有什么新东西。假如你用过&,你就已经把握了最基础的东西。一个被&和分号包抄起来的字符串用来表现另一个或一套字符。(这里有ISO实体的完整清单。)
当然,XML中属性和实体还有其它功效。这就不可避免地要引进语法,固然不太多。一旦知道了这些,就会不费劲地应用XML文档。
简化菜谱
假如你读过我写的XML简介,你会记得用简略的标记符表现的菜谱中的组成成分,如- 2 cups flour
。在写完那篇文章后,我在网上周游,发明关于菜谱的另一个XML文档。其中的菜谱元素如下所示:
flour
这种方法有一个实际的利益:可以更轻易把持数据。用第一种方法,- 标记符用来容纳一堆不同的信息。假如我想提取组成成分的清单而不需要各成分的量,我就不会那么做。
我可以用如下的结构取得类似的功效:
- flour
2
cups
这可以被处理,但是有两个标题:首先,item元素包含了混杂的内容:文本和其它标记符。我很快就发明应当尽量避免这种结构。其次是标记符几乎没有独立的意义。很难想象只要units而不要实际的组成成分的情况。这些条目可以被简略描写,我情愿把它们当作属性。
首先要留心的是属性名,quantity和units只有被能够翻译它们的利用程序处理时才有意义。
在被包含在有效的文档中之前,应告诉DTD来答应它。对于上面的ingredient元素,我们在DTD中只包含了以下代码:
第一行看起来很熟悉 - 在任何DTD中都能看到的尺度元素定义。每个ATTLIST行都依次包含以下信息:
这是属性依附的元素。
这里定义属性名。
这里设置属性类型。CDATA代表字符数据。意味着处理器在属性内可以得到文本。
最后的部分定义属性的缺省值。可以应用实际的数值,如3。这样,XML中空缺长度的属性值将为3。输进的值将笼罩缺省值。
在上面的例子中我没有设置特定的数目,而是应用XML的要害字#REQUIRED。它告诉处理器次属性必需包含一个值。假如空缺,文档将不被处理。
缺省值有另外两个要害字。第一个是#FIXED - 假如属性值在全部文档中保持雷同的值。假设我定义一个image的标记符属性,所有图像的大小都雷同,比如说100*50像素,就可以在DTD中这样定义属性:
另一个要害字是#IMPLIED,表现属性可以包含值或是空的。
下面让我们看看属性类型。
假如你决定自己写DTD,可能需要一本说明ATTLIST语句中所有组合的XML的书。但是假如借用DTD,或许只知道CDATA和另外三种属性就性了。
第一个是ID。它请求属性的值在文档中不重复。应用过数据库的人都知道唯一标记符的必要性。DTD ATTLIST语句看起来象这样:
很难想象没有#REQUIRED缺省值的ID属性类型。假如那样,任何重复的或空的ID都会迫使处理器返回一个错误。ID必需以字母或下划线开端并且不能包含任何空格。
NMTOKEN类型也应用上面的命名规矩。但是答应重复。它被用做传递数据给利用程序的保障。大多数程序语言,包含Java和Javascript,在模块名中不能有空格。大多数情况下,最好保证属性符合它们的规矩。
最后是枚举类型,不需要特定的要害字。而是用'|'符号包含在括号内的值,例如:
假如有有限的可能的属性值,可以用这种方法。
不会认为今天的课程无趣吧,那么就接着读吧!