选择显示字体大小

xml简易教程之三

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

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

<!attlist sibling (brother sister) #required>

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

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


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons