当前位置: 代码迷 >> JavaScript >> 【研讨】关于标记语言 ――对JSTL语言的一点点认识
  详细解决方案

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

热度:188   发布时间:2012-11-07 09:56:10.0
【探讨】关于标记语言 ――对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标记语言的经验,它有如下的问题:

  1. 标记语言本身不是单步执行的语言,而是以一个tag作为一个元操作来解释的,所以对添加了ifwhile元素的JSTL来说单步调试就是个奢望
  2. JSTL不是原生的标记语言,使用servlet弥合而成的,效率不高
  3. JSTL有标记语言一样的缺点,没有变量,导致JSTL,需要借助java的 scripts或者EL这种变量查找系统来以堆或者栈的方式来获得需要的变量,换言之,它不是完备的。
  4. 没有作用域,这个也需要借助java的scripts来弥补,或者只有文件范围的作用域
  5. 标记语言没有完整性的标准,一个tag是完整的,一系列tag的嵌套也是完整的。所以这就导致了JSTL里传入参数容易但是传出很难,而且按照JSP2.0的做法,(不是通过增加scope这种方式)解决了传出问题,但是又引起了另外一个问题――命名冲突。
  6. 标记语言没有namespace(tag的namespace不算),导致无法按照语言级别来屏蔽或者避免,或者解决命名冲突问题
  7. 缺乏积木性,学术点,叫 元坐标是不完备的。因为你不能写<a><b></a></b>
  8. 按照我们的定义标记语言不一定是xml,但是一般都倾向xml这种树型的数据结构和书写方式,导致代码很难看,因为它的结束始终需要结束标记来完成

不过,在wikipedia里有曰:

过程性标志能力包含有一个Turing-complete编程语言。过程性标志语言的范例有:nroff, troff, TeX, Lout 以及 PostScript.

他们是完备的,有明白的?解释下。

?

因为本人码龄不长,可能这里列出的元素还不完全。但是本着乔帮主倡导的focus原理。标记语言你就好好整你的内容(样式也可以的),瞎jb引入流程,变量等元素,搞定JSTL像经过傅里叶变换的java一样,既有标记语言的难用。还有JAVA语言的罗嗦。看看本来想代替HTML+css的xml+XSLT 这种 杀人 的语言吧。你说它牛逼吗?有变量,有跳转,有条件判断。 一个p大的事情,整的巨复杂。我相信它是完毕的,可以完成任何问题,但是你偏偏学什么JAVA,为了大规模的xml融合,复用来设计。没曾想现在,html的复杂性已经通过合理的跳转 或者onepage one app的思想来化解了。所以xslt死的惨不忍睹。

?

JSTl也是,就一个半吊子,死就在不远的将来。

?

via?

?