TPL + Json + PHP = ?
TPL + Json + PHP = TPL + JSPT
这里,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是一个工程转换器。它可以将各种源代码的工程格式彼此进行转换。
更多推荐
所有评论(0)