TPL + Json + PHP = TPL + JSPT

来源:互联网 发布:头像源码图片怎么用 编辑:程序博客网 时间:2024/04/28 00:44

这里,JSPT 是我发明的名词。它代表了 Json PHP Transformations = Json (Data) + PHP (Transformation Template)。为什么有这个词,是因为这个世界上还有一个著名的词:XSLT = XSL Transformations = XML (Data) + XSL (Transformation Template)。

我介绍 TPL 时,曾经把文本处理分为I和O。其中I是Parser,即将文本Parse为内存DOM结构,其中O是Formmatter,即将内存DOM结构转换为文本。其实还有第三个角色,就是Data。这里补充说明下:

TPL: 是I(Parser)模块。它将文本转为DOM。

Json/XML/etc: 它们的定位是,作为DOM的文本规范。我称之为Data。其实它们仍然是文本,需要Parser和Formmatter来处理它。但是它们的特殊之处在于 通常它们被看作为程序之间的交互规范,是DOM的Presentation(或者Persistence)。

PHP/XSL/etc: 是O(Formatter)模块。它们将DOM转为文本。通常O模块还有另一个名字,叫模板引擎(Template Engine)。这个世界上有太多的模板引擎。如:

  • http://www.djangoproject.com/documentation/templates/ (Python,有Erlang版: http://code.google.com/p/erlydtl/)

  • http://www.stringtemplate.org/ (Java,有Erlang版: http://code.google.com/p/sgte/)

  • http://smarty.php.net/ (PHP)

  • http://yarivsblog.com/articles/2006/10/21/erltl-0-9-1/ (Erlang)

但我个人更倾向于认为,PHP才是世上最棒的模板引擎 ── 这根本就是这个语言的定位。任何额外的封装其实是画蛇添足。

当然,对TPL而言,它并不排斥任何组合。TPL + XSLT,还是 TPL + JSPT (Json + PHP),还是其他,你来决定。

TPL + JSPT (Json + PHP)如何工作?

TPL + JSPT可将任意两种文本格式进行相互转换。假设我们要将 TextA 转为 TextB。那么实际转换的流程是:

  • TextA 由 TPL 分析,Parse为内存中的DOM。

  • 内存中的DOM,由一个JsonFormmatter转为Json文本。

  • Json文本由PHP的JsonParser模块转为内存中的DOM。

  • 最后,使用PHP强悍的Formmatter能力,转换为TextB格式。

前两步由TPL库提供。后两步由PHP完成。TPL与PHP的交互通过Json文本。

一个TPL + JSPT的样例:prjconv

prjconv是一个工程转换器。它可以将各种源代码的工程格式彼此进行转换。

代码参见:http://winx.googlecode.com/svn/trunk/tpl/JSPT/