日期:2014-05-16  浏览次数:20393 次

【探讨】关于标记语言 ——对JSTL语言的一点点认识

在展开讨论前,需要给标记语言下个定义。

——在我的理解里,标记语言是:

  1. 指那些使用 严格xml语法格式,
  2. 使用有限词汇词汇集
  3. 以tag为主体,以tag属性值为可变点
  4. 普遍缺少流程控制,缺少其他全领域语言里逻辑和运算元素的一个语言集合

写完毕这段话,我查了查资料:
在wikipedia里有:

标记语言,也称置标语言,是一种将文本(Text)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。与文本相关的其他信息(包括例如文本的结构和表示信息等)与原来的文本结合在一起,但是使用标记(markup)进行标识。当今广泛使用的置标语言是超文本置标语言(HyperText Markup Language,HTML)和可扩展置标语言 (eXtensible Markup Language,XML)。置标语言广泛应用于网页和网络应用程序。标记最早用于出版业,是作者、编辑以及出版商之间用于描述出版作品的排版格式所使用的。

里面提到,标记语言可以分为3类置标语言通常可以分为三类:表示性的、过程性的以及描述性的,但是在我看来就是就是一类——内容性,他们共有的特点就是为了表达内容的组成。
这段来whodo网站:

标记语言(markup language),则特指用一系列约定好的标记来对电子文档进行标记,来实现对电子文档的语义、结构、格式的定义。这些标记必须能够和容易的和内容相区分,易于识别。标记语言必须定义什么样的标记是允许的,什么样的标记是必须的,标记是如何与文档的内容向区分的,以及标记的含义是什么。

所以综合看了,标记语言应该是:

  1. 为表述内容,和内容的表现形式
  2. 内容是tag内部的cdata,样式由tag的属性来控制
  3. io,只有来引入其他标记部分的实体这种IO,除此之外不能有任何io
  4. 没有作用域,就是说tag的影响区域不的会传播到外面,也不会下沉到自己tag里面。
  5. tag的表达和tag的输出是一对一的关系。因为没有流程控制,没有运算符等元素。也就是这里是没有 “表达”到“输出”的非平凡映射。
  6. tag和tag属性是个有限集合,只有cdata区域是可以变化的。
  7. 由于标记语言书写的解释、或者编译是一次性的具有原子型,不存在逐步执行的问题。
  8. 标记语言没有完整性的标准,N*tag(n>0)都是完整的。

(但是,tag还有有一点的流程判断的,如配合使用标记的开始和结束,而且不一定是xml)


如果以此为准则,因为标记语言来自出版业,所有这种纯文本格式的语言对人也是友好的,而且它主要是人和人之间的交流。至于,日后xml的产生,那是为了给机器看,牺牲了诸多的可读性,也就是现在所说的内容和样式的分离。
所以目前尊重 内容+样式+行为 模式来做的html不是这里定义的标记语言,因为他没有样式信息;而本文的主角JSTL的主旨是,内容+流程控制——它完全符合上面的定义的绝大多数,但是如果为了给达到让那些可以使用标记语言来做做界面的人也可以编写动态页面这个龌龊的目的.JSTL为tag添加了大量的流程控制,变量,函数和操作。在继承了标记语言 对人友好,使用简单这些优点的同时,梦魇也从它一开始就围绕在每一个开发人员的头上,以我2年左右html和JSTL标记语言的经验,它有如下的问题: