XML属性和实体:简化菜谱

王朝other·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

简化菜谱

如果你读过我写的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,表示属性可以包含值或是空的。

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航