`
canonical
  • 浏览: 366992 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

文本化

阅读更多

    软件技术的发展是一个结构化不断加深的过程,我们逐渐拥有了越来越丰富的结构识别, 表达和处理手段。在这一方向上, 组件技术最终取得了巨大的商业成功。但是区分同时也就意味着隔阂。面向对象技术最基础的概念在于 O = C(O), 对象的复合(Composition)仍然是对象.  然而在越来越复杂的软件生态环境中,这一图景实现的可能性被大大的压缩. 面对层层封装造成的形态各异的表达方式, 不同来源, 不同目标, 不同运行环境下的信息的交互变得越来越困难。我们逐渐丧失了概念上的简洁性, 也丧失了数学世界中的那种穿透一切的统一的力量. 所谓SOA(Serivce Oriented Architecture)技术试图通过补充更多的环境信息,放弃状态关联,暴露元知识等方式来突破现有的困境。 http://canonical.iteye.com/blog/33803 这其中一项关键的技术抉择是基于文本格式进行信息表达。

      在过去10年中Web技术取得了空前的成功,它造就了互联网这一世界上最大的分布式集成应用。SOA从某种程度上说是对这一事实在技术层面上的反思。基于文本传递的web技术所表现出来的开放性,可理解性和可观测性,与封闭的,难以直接解读的,必须拥有大量相关知识才能正确操作的二进制结构相比,这本身就是革命性的创新。不需要特殊的工具就可以非常轻易的察看到网页程序的输入输出,所有交互过程都处在完全透明的检查下,各种不曾事先规划的文本处理手段都可以参与到web创建的过程中。随着速度,存储不再是我们考虑的首要问题,文本化作为一种技术趋势逐渐变得明确起来。但是任何一种技术思想的成功或失败都不可能是因为某种单一的原因所造成的,因此有必要对文本化的技术价值做更加细致的剖析。
  
   1. 文本化是一定程度上的去结构化,但是通过这种方式我们获得了对程序结构的更强的控制力。无论我们所关心的文本片断层层嵌套在大段文本的哪个部分,我们都可以通过text.indexOf(subStr)来实现定位,通过text.replace(oldStr,newStr)实现变换。而在组件系统中,我们只有通过某种预定的遍历方式逐步递归才有可能访问到组件内部的组成对象。如果某个组件不按照规范实现或者规范中缺少明确的设定,则这一信息关联链条将会断裂。在一些组件系统中,甚至没有规定一种统一的遍历方式,则我们根本无法定义出通用的大范围的结构定位/变换手段。即使是在设计精良的组件框架中,受限制于组件的封装性要求,我们也不可能访问到全部的信息。当我们以组件设计者意料之外的方式使用这些组件的时候,就会遇到重重障碍。即使所需的只是微小的局部调整,因为无法触及到需要修改的部分,我们也可能被迫放弃整个组件。
  
   2. 文本是普适的信道。各种操作系统,各种程序语言所具有的最基本的能力就是文本处理能力,对于文本格式的约定是最容易达成共识的。虽然对于机器而言,理解基于地址定位的二进制数字可能更加直接,但是所有的应用程序都是由人来负责编制,调试,部署,维护的,如果人可以不借助特殊的工具就可以明确了解到系统内发生的过程,则系统的构建和维护成本就会大幅下降。
  
   3. 文本表述形式上的冗余性增强了系统的概念稳定性和局部可理解性。在二进制格式中,经常出现的是根据相对地址定位,这要求我们完整理解整个二进制结构,才能够逐步定位到局部数据块。同时,二进制格式中也经常使用一些外部的信息,例如某个位置处的数据为整型,占用四个字节等。这样的信息可能只能在文档说明里查到,而在数据体中没有任何的体现,这限制了独立的理解可能性。与此相反,文本格式经常是自说明式的,例如width:3.5px, 这提高了系统的可理解性,特别是局部可理解性。即使我们对系统只具有很少的知识,一般也能根据数据周围的相关信息进行局部操作。一般很容易就能够定位到特殊的局部数据区,安全的跳过众多未知的或者不被关心的结构. 一个程序新手也可以在很短时间内靠着连蒙带猜, 实现xml格式的word文件中的书签替换功能,而要搞清楚word的二进制格式,并独立编制出正确的替换功能,显然就不是一两周的工作量可以解决的了. 这其中, 可理解性的差异是存在着数量级上的鸿沟的.
  
   4. xml这种半结构化的文本格式规范的兴起, 以通用的方式为文本描述引入了基本的形式约束, 实现了结构表达的均一性. C语言中的宏(Macro)本质上就是一种文本替换技术,它的威力在于没有预定义的语义, 因此可以超越其他语法成分, 破除现有语法无法跨越的限制. 但是它的危险性在于缺乏与其能力相适应的形式约束, 难以控制. 而在xml格式规范下, 不同语义, 不同抽象层面的节点可以共存在同一个形式体系中, 可以用通用的方式进行定位,校验, 转换等. Witrix平台在动态xml方面发展了一系列技术, 为文本处理引入了更多应用相关的规则, 增强了文本描述的抽象能力和表达能力. 
  
   5. 文本作为描述(description)而不是执行指令(execution). C语言的源代码与机器码基本上是一一对应的, 即源代码本身所表达的就是指令的执行过程. 而在Web应用领域, HTML语言仅仅是声明界面上需要展现什么, 但是如何去实现是由通用的解析引擎负责,它并不是我们关注的重点. 描述需要结合诠释(解释)才能够产生实际的运行效果, 才能对现实的物理世界产生影响.这在某种程度上实际上是延迟了执行过程. 一种描述可以对应多种诠释, 例如同样的元数据在前台可以用来生成界面,在后台可以用于生成数据库, 进行数据有效性校验等. 在特定的应用领域中,执行引擎可以是通用的, 可以独立于描述本身不断演化, 因此一种领域特定的描述,它所承载的内容并不是固化的, 而是可以随着执行引擎的升级不断增强的. 例如, 在Witrix平台中, FlowDSL本身所做出的流程描述是稳定的, 但是随着流程引擎不断改进,不断引入新的功能,所有使用DSL的已实现的应用都同步得到升级. http://canonical.iteye.com/blog/275015
  
   6. Text = Process(Text) 这个不动点在Unix系统中得到了充分的应用: 多个小程序通过管道(Pipe)组合在一起, 可以完成相当复杂的功能. 一个更加丰富的处理模型是 XML = Process(XML). 文本描述很自然的支持多趟处理, 它使得我们可以充分利用全局知识(后续的处理过程可以使用前次处理过程收集的全局信息), 可以同时支持多个抽象层面(例如DSL的不断动态展开). Witrix平台中的编译期运行技术实际上就对应于如下简单规则: 编译期运行产生文本输出, 对输出文本再次进行编译. 通过这一递归模式, 可以简单的实现动态解析与静态描述之间的平衡. 模板(Template)技术是具有关键性作用的文本生成技术. out.write("<div>");out.write(value);out.write("</div>");这种API拼接方式显然不如<div>${value}</div>这种模板生成方式直观且易于使用. 在Witrix平台的tpl模板语言中, xml的规范性使得在多趟编译过程中我们一直可以维持某种形式约束.
  
   7. 不是所有的情况下都应该使用文本. 普元EOS中所鼓吹的XML总线之类的技术是我所极力反对的. http://canonical.iteye.com/blog/33794

1
0
分享到:
评论

相关推荐

    易语言字节集文本化模块例程

    "字节集文本化模块"是易语言中的一个重要概念,它涉及到数据的编码与解码过程。在这个模块中,字节集通常指的是二进制数据的集合,而文本化则是将这些二进制数据转化为人类可读的文本形式。 字节集在编程中广泛用于...

    易语言源码易语言字节集文本化模块例程.rar

    本压缩包文件"易语言源码易语言字节集文本化模块例程.rar"包含了易语言源码和一个用于处理字节集与文本相互转换的模块例程,对于学习易语言以及理解字节集在编程中的应用具有很高的参考价值。 在易语言中,字节集是...

    KindEditor从Word复制内容自动文本化

    为了解决这个问题,我们需要实现“从Word复制内容自动文本化”的功能。 在KindEditor中,这个功能可以通过修改编辑器的源码来实现。具体来说,我们需要处理粘贴事件,确保当用户从Word中复制内容并粘贴到KindEditor...

    [PLC工控]IEC 61131-3 的编程语言(一):文本化语言

    IEC 61131-3 编程语言(一):文本化语言 IEC 61131-3 国际标准的编程语言包括图形化编程语言和文本化编程语言。文本化编程语言包括指令表(IL-Instruction List)和结构化文本(ST-Strutured Text)。本文重点介绍...

    AscgendotNET图像文本化软件V0.9.6汉化绿色免费版

    标题中的"AscgendotNET图像文本化软件"是一款基于.NET框架开发的图像处理工具,其主要功能是将图像转换为可编辑的文本形式。这款软件的版本为V0.9.6,经过汉化处理,适合中国用户使用,并且是绿色免安装版本,意味着...

    KindEditor-4.1.3从Word复制内容自动文本化

    KindEditor-4.1.3是目前官方最新版本,对从Word复制内容进来自动文本化问题得以解决。 网上找了很多关于KindEditor编辑器复制粘贴的问题,也下载了很多方法都没能真正解决从WORD、Excel等软件直接复制的内容格式化...

    Html文本化程序(c#)

    挺好用的代码,处理完后,文本格式也比较漂亮。 对大家绝对有用。

    CPPC++_文本化.zip

    cppc++

    易语言字节集文本化模块例程-易语言

    在这个“易语言字节集文本化模块例程”中,我们将深入探讨易语言如何处理字节集并将其转化为文本,这对于数据的编码与解码至关重要。 字节集在计算机编程中是常见的数据类型,它通常用于存储二进制数据,如图片、...

    uni-app 自定义组件展示html富文本内容,可实现富文本html内容中 图片展示、视频播放、音频播放。

    富文本HTML通常包含各种标记语言元素,如图片、链接、样式等,用于创建结构化和格式化的文本。在uni-app中,直接在页面上展示HTML字符串可能受限,因此需要转换处理。这里提到的“html2json”就是一种转换工具,它...

    全国285个地级市ZF工作报告原始全文2002-2023文本总长度文本总词频统计

    对原始全文的进行文本化处理,装载到excel,并进行词频分析统计 [1]数据介 绍 数据名称:政府工作报告-文本数据 数据范围:市级 数据年份:市级(2002- 2023),285个地级市 数据来源:地方政府网 数据格式:面板...

    文本化数学工具MathScript

    MathScript通过一种面向数学的文本编程语言对LabVIEW进行扩展,用来进行数学运算与信号分析处理,扩展功能如下。  1.文本数学功能  MathScript内置超过600种函数,用于数学运算、信号分析处理,包括线性代数、...

    Mathscript_编程指南_labview_particularmua_

    LabVIEW MathScript 为 LabVIEW 增加了面向数学的文本化编程方式。您在使用 LabVIEW 开发软件时,可用 MathScript 结合图形化编程作为另一种方法来定制软件。使用 LabVIEW 开发,您可以选择文本化实现、图形化实现...

    数据结构 文本格式化 数据结构 文本格式化

    数据结构与文本格式化是计算机科学中的两个重要概念,它们在编程、软件开发以及数据分析等领域中扮演着核心角色。理解并掌握这些知识点对于任何IT专业人员来说都是至关重要的。 首先,我们来探讨“数据结构”。数据...

    基于文本的仿真语言,旨在替代 Simulink 进行仿真,通过与框图等效的文本语言描述仿真对象,并解释/编译而后求解

    **基于文本的仿真语言 Ligral:Simulink 的文本化替代方案** 在现代工程和科学计算领域,模拟和仿真已经成为理解和预测系统行为的关键工具。MATLAB 的 Simulink 是一个广泛应用的图形化仿真环境,它允许用户通过...

    数据结构课程设计文本格式化

    数据结构课程设计文本格式化 本文旨在描述一个文本格式化的课程设计报告,旨在帮助大家更好地理解文本格式化的概念和实现过程。 标题: 数据结构课程设计文本格式化 描述: 上传一个文本格式化的课程设计报告,...

    EndNote X9

    EndNote X9 是一款在学术界比较主流的文献管理软件,可以进行文献批量下载和管理、写作论文时添加索引、分析某篇文献的引文索引、分析某领域或者学术课题的经典文献地位等,功能强大。该资源含有安装包 安装破解...

    PlainPasta:一个简单的macOS应用程序,用于“纯文本化”剪贴板

    示范没有普通面食 复制/粘贴样式化的文本同时使用文本和样式配意大利面 复制/粘贴文本样式与普通面食启用仅粘贴文本本身,没有造型贡献PR实在是太受欢迎了! 要启动并运行,您需要克隆此存储库,然后使用以下方法...

Global site tag (gtag.js) - Google Analytics