Differences between revisions 1 and 19 (spanning 18 versions)
Revision 1 as of 2004-08-14 01:17:55
Size: 736
Editor: hd
Comment: 开了开了! :)
Revision 19 as of 2004-08-24 16:29:00
Size: 8843
Editor: Zoom.Quiet
Comment: otterSample
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
含有章节索引的中文 文章模板 Otter 水獭(基于twisted的高速、可扩展性二进制流框架)
Line 5: Line 5:
Otter 水獭(基于twisted的高速、可扩展性二进制流框架)
attachment:ottertwo.gif

开发团队:["Zoom.Quiet"]、["zhaoxin"]、["HD"]
Line 9: Line 12:
= 前言= = 前言 =
Line 11: Line 15:

== 目标 ==
面对Twisted 完善的网络应用开发框架组织,我们灵机一动,将 Twisted 最典型,最基础也最灵活的 二进制流TCP 传输应用,通过简单的XML模板来自动生成,将会极大的规范化,标准化,可控制化网络应用的快速开发!

== 子项目 ==
 * ["/OtterBase"] 二进制流通讯框架
 * ["/OtterTool"] 二进制流通讯协议、报文、应用框架工具
 * ["/OtterTemplet"] 以Python脚本为解析目标的易用模板模块
Line 15: Line 27:
= 开发知识 =
 * [http://www.webwareforpython.org/Papers/Templates/ Python-based Template Packages] -- Python 的模板模块
 * '''XML'''的大量应用!
   * [http://220.248.2.35:7080/share/zqupload/tutorials/XML/ XML学习资料收集]
     * [http://220.248.2.35:7080/share/zqupload/tutorials/XML/XMLandUsage/ XML语言及其应用]ppt
     * [http://220.248.2.35:7080/share/zqupload/tutorials/XML/using.xml.schema.(2001)/Front%20matter.htm using.xml.schema].(2001)
     * [http://220.248.2.35:7080/share/zqupload/tutorials/XML/The%20XML%20Schema%20Complete%20Reference%20(2002)/Front%20matter.htm The XML Schema Complete Reference](2002)
Line 16: Line 35:
= 子项目 =
 * otter 二进制流通讯框架
 * ottertool 二进制流通讯协议、报文、应用框架工具
= 使用手册 =
 * ["XMLSpyHowto"] -- 强力XML.XSL.XSLT等等设计开发环境!
Line 20: Line 38:
= TODO List =
 * 为otter加入变长字段的支持
 * 为otter tools寻找一个最为合适的模板方法
 * 为otter tools寻找一个最为合适好用且通用的xml解析工具
 * otter tools的IDE嵌入开发

= 发布 =
 * [http://cvs.woodpecker.org.cn/cgi-bin/viewcvs.cgi/?cvsroot=otter#dirlist CVS仓库]

= 讨论·广告 =
 * '''精巧的思想,简单的表现,丰富的应用!'''
 * '''Otter! 快速架设稳定网络应用大坝的 水獭 !'''
 * otter与otter tools的关系及实现讲义 attachment:otter_and_tool_0821.ppt
 * 建议使用 RELAX NG 来更加精确的验证 XML, 提供伪脚本工具,通过类似Py 风格的脚本来自动生成合理的 XML,这样当 Otter Schema 升级时,也更加容易兼容原先的 XML!
{{{
Otter script--(OtterXML builder)-->Otter XML --(Otter engine)--> Twisted Python acript
}}}

= Otter技术路线讨论 =
''1.0a阶段的反思''
 * 040821 经过一周的快速开发,基本实现最简单的Otter 目标;
 * 其中也发现了进一步的需求,与问题;特此重新思考下一阶段的开发
== XML解析 ==
 * 根据 [http://wiki.woodpecker.org.cn/moin.cgi/Otter#head-a30129d4bc6dd8578b7d39e170fbb97b09a1afcc todolist] 的精神,重点应该是好用!而不是通用!
   * 应该,通用的不一定好用;
   * 好用的现在不一定是通用的;以后也说不定!
=== Python中XML的处理 ===
'''分析现在针对XML数据库,Py视野中的处理思路'''
==== 直接使用Py实现W3C建议XML处理 ====
 * minidom
 * pulldom
 * expat
 * SAX
 * PyXML 集合包
 * ...
==== 将XML的数据直接映射到Py类型数据中 ====
 * [http://www-900.ibm.com/developerWorks/cn/xml/x-matters/part11/index.shtml gnosis.xml.objectify]
   * 即,对象化XML树!以Py 看方式,然后就可以开始神奇的Py魔术!
==== 借用其它语言的威力 ====
 * [http://www-900.ibm.com/developerWorks/cn/xml/x-matters/part16/index.shtml 4Suite] 的 cDomlette(Ft.Xml.Domlette)用 C 语言构建 DOM 树,避免了使用 Python 回调
 * [http://www-900.ibm.com/developerWorks/cn/xml/x-matters/part29/index.shtml RXP 解析器] ...pyRXP 和 LT XML,这两者利用了 RXP 速度上的优势,但又避免了 RXP 的复杂性
==== 超越限制的解决 ====
 * [http://www-900.ibm.com/developerWorks/cn/xml/x-matters/part14/index.shtml HaXml 编程模型]
   * DOM 将 XML 每一样都融入到面向对象编程(OOP)框架中,在比其他任何专门编程语言更高的抽象层次上。DOM 是语言无关的,并且其“文档对象模型”是由许多通用编程语言的库提供的。在某种意义上,DOM 是语言 — 它指定了所有的方法和参数 — 而基本通用语言只不过是一点胶水。我的实用程序 xml_objectify, 曾在前面的专栏文章中讨论过,提供了一种将 XML 文档转换为更自然感觉的“OOP 化”对象(在 Python 中)的方法,主要是为了回应有点人造感觉的 DOM。
   * SAX 在其语言中性上与 DOM 相似,但它用事件驱动和过程化模型取代了 DOM 的 OOP 框架。SAX 在将 XML 文档作为流处理的能力上有非常好的特性,即根据遇到的每个元素和内容来进行处理。但随着其事件驱动原理带来了 SAX 的缺点,即没有由 XML 文档表示的数据结构的实际概念。我们可以在一个具体的应用程序中构建这样的结构,但即使如父/子这样简单的事物都必须以 SAX 库下面的编程语言的词汇表进行表示;SAX 本身对 XML 的大部分事情几乎一无所知。
   * XSLT 是,从某种意义上说,与 XML 的结构最匹配的常见技术。可以反映这种匹配的是,XSLT 文档本身就是 XML 文档实例。XSLT 是一种专门功能编程语言,允许您指定将 XML 文档转换成其它形式(特别是,但不仅是,转换成其它 XML 文档)。XSLT 除了有些冗长外,它的表达力也有所限制 — 您可说的事情可以清楚地表达(是功能地,不是过程地),但您很快增加许多无法简单地在 XSLT 中表示的事情。

-------
 * [http://www-900.ibm.com/developerWorks/cn/xml/x-matters/part28/index.shtml ElementTree]
   * 回避矛盾,以不完全的解决方式,来获得最大效益!

=== Otter的XML处理 ===
 * 综上,以及Otter的配置XML的特点:
   * 不会太大;
   * 不要求创建处理;
   * 不会反复读取;
 * Otter 的XML解析处理的原则应该是:
   * 快捷;
   * 轻量级别;
   * 代码简单,容易理解;
==== ElementTree的理由 ====
 * 是支持DOM 解析的所有Py 解析包中最快的
 * 足够清晰,简单;
 * 足够轻量!只有一个文件,可以单独包含在OtterTool 发行中
==== 未来的选择 ====
 * 根据OtterBase 的进化,如果目标代码复杂到一定程度,可惜考虑其它解析包
 * 而且XML解析包的选择是于模板解析解决方案紧密关联的,不应该分别考虑

== 模板实现 ==
'''根据个人开发感受,整理模板实现思路'''
 * ["Otter/OtterTemplet"] -- 专门讨论页面

== 目标结构 ==
 * 仓促启动,模块的目录,文件约定都是在开发中变动者,现在应该统一下来:
   * 注意!:
     * '''+--otterSample 目标代码示例文件目录'''
     * '''+--otterTemplet 模板文件存放目录'''
{{{]tree OtTool
+--doc epydoc 自动组织的API 文档
| +--api
| | +--epydoc.css
| | +--index.html
| | +--....
| +--CHANGES
| +--html
| +--LICENSE
| \--README
+--OtTool.py 主调用入口类
+--OtXML.py XML解析类,处理Otter 配置 XML 文件
+--OtCUI.py Otter Tools Commend User Interface;命令行用户界面;用以处理各种命令行的响应操作
+--OtFiler.py 文件伺候包;专门用以进行文件,目录的操作
+--OtTemplet.py 模板解析包,现在为空类,由继承的类实际运行式 操作
+--OtTDict.py 字典匹配式模板解析类
+--OtTXML.py XML标签驱动模板解析类
+--timer.py 运行时间记录工具包
+--otterTemplet 模板文件存放目录
| +--lib
| | +--messages
| | | +--bytemsg.py
| | | +--pcon-pmsg.py
| | | +--scon-pmsg.py
| | | \--__init__.py
| | +--protocols
| | | +--byteprotocol.py
| | | +--pcon-p.py
| | | +--scon-p.py
| | | \--__init__.py
| | \--__init__.py
| +--gnsc.py
| \--gnsd.py
+--otterSample 目标代码示例文件目录
| +--lib
| | +--messages
| | | +--bytemsg.py
| | | +--gnspmsg.py
| | | +--usspmsg.py
| | | \--__init__.py
| | +--protocols
| | | +--byteprotocol.py
| | | +--gnsp.py
| | | +--ussp.py
| | | \--__init__.py
| | \--__init__.py
| +--ussc.py
| \--ussd.py
+--web 预备的CGI 接口目录
+--xml 预备的 Otter XML Schema 和示范 XML文件
| +--ottertools.xsd
| \--uss.xml
\--__init__.py

}}}

Otter 水獭(基于twisted的高速、可扩展性二进制流框架)

attachment:ottertwo.gif

开发团队:["Zoom.Quiet"]、["zhaoxin"]、["HD"]

-- hd [DateTime(2004-08-14T01:17:55Z)] TableOfContents

前言

Otter的来源是在为PyUSS书写测试程序时的小框架,因为在网络应用中会大量使用基于TCP的二进制流通信,所以将这个小框架正式变为一个独立的项目,成为以后相关应用的开发基础。

目标

面对Twisted 完善的网络应用开发框架组织,我们灵机一动,将 Twisted 最典型,最基础也最灵活的 二进制流TCP 传输应用,通过简单的XML模板来自动生成,将会极大的规范化,标准化,可控制化网络应用的快速开发!

子项目

  • ["/OtterBase"] 二进制流通讯框架

  • ["/OtterTool"] 二进制流通讯协议、报文、应用框架工具

  • ["/OtterTemplet"] 以Python脚本为解析目标的易用模板模块

开发基础

  • python 跨平台、易使用的开发语言
  • twisted 基于python的高可用性、高可扩展性、高性能的网络框架

开发知识

使用手册

  • ["XMLSpyHowto"] -- 强力XML.XSL.XSLT等等设计开发环境!

TODO List

  • 为otter加入变长字段的支持
  • 为otter tools寻找一个最为合适的模板方法
  • 为otter tools寻找一个最为合适好用且通用的xml解析工具
  • otter tools的IDE嵌入开发

发布

讨论·广告

  • 精巧的思想,简单的表现,丰富的应用!

  • Otter! 快速架设稳定网络应用大坝的 水獭 !

  • otter与otter tools的关系及实现讲义 attachment:otter_and_tool_0821.ppt
  • 建议使用 RELAX NG 来更加精确的验证 XML, 提供伪脚本工具,通过类似Py 风格的脚本来自动生成合理的 XML,这样当 Otter Schema 升级时,也更加容易兼容原先的 XML!

Otter script--(OtterXML builder)-->Otter XML --(Otter engine)--> Twisted Python acript

Otter技术路线讨论

1.0a阶段的反思

  • 040821 经过一周的快速开发,基本实现最简单的Otter 目标;
  • 其中也发现了进一步的需求,与问题;特此重新思考下一阶段的开发

XML解析

Python中XML的处理

分析现在针对XML数据库,Py视野中的处理思路

直接使用Py实现W3C建议XML处理

  • minidom
  • pulldom
  • expat
  • SAX
  • PyXML 集合包
  • ...

将XML的数据直接映射到Py类型数据中

借用其它语言的威力

超越限制的解决

  • [http://www-900.ibm.com/developerWorks/cn/xml/x-matters/part14/index.shtml HaXml 编程模型]

    • DOM 将 XML 每一样都融入到面向对象编程(OOP)框架中,在比其他任何专门编程语言更高的抽象层次上。DOM 是语言无关的,并且其“文档对象模型”是由许多通用编程语言的库提供的。在某种意义上,DOM 是语言 — 它指定了所有的方法和参数 — 而基本通用语言只不过是一点胶水。我的实用程序 xml_objectify, 曾在前面的专栏文章中讨论过,提供了一种将 XML 文档转换为更自然感觉的“OOP 化”对象(在 Python 中)的方法,主要是为了回应有点人造感觉的 DOM。
    • SAX 在其语言中性上与 DOM 相似,但它用事件驱动和过程化模型取代了 DOM 的 OOP 框架。SAX 在将 XML 文档作为流处理的能力上有非常好的特性,即根据遇到的每个元素和内容来进行处理。但随着其事件驱动原理带来了 SAX 的缺点,即没有由 XML 文档表示的数据结构的实际概念。我们可以在一个具体的应用程序中构建这样的结构,但即使如父/子这样简单的事物都必须以 SAX 库下面的编程语言的词汇表进行表示;SAX 本身对 XML 的大部分事情几乎一无所知。
    • XSLT 是,从某种意义上说,与 XML 的结构最匹配的常见技术。可以反映这种匹配的是,XSLT 文档本身就是 XML 文档实例。XSLT 是一种专门功能编程语言,允许您指定将 XML 文档转换成其它形式(特别是,但不仅是,转换成其它 XML 文档)。XSLT 除了有些冗长外,它的表达力也有所限制 — 您可说的事情可以清楚地表达(是功能地,不是过程地),但您很快增加许多无法简单地在 XSLT 中表示的事情。


Otter的XML处理

  • 综上,以及Otter的配置XML的特点:
    • 不会太大;
    • 不要求创建处理;
    • 不会反复读取;
  • Otter 的XML解析处理的原则应该是:
    • 快捷;
    • 轻量级别;
    • 代码简单,容易理解;

ElementTree的理由

  • 是支持DOM 解析的所有Py 解析包中最快的
  • 足够清晰,简单;
  • 足够轻量!只有一个文件,可以单独包含在OtterTool 发行中

未来的选择

  • 根据OtterBase 的进化,如果目标代码复杂到一定程度,可惜考虑其它解析包

  • 而且XML解析包的选择是于模板解析解决方案紧密关联的,不应该分别考虑

模板实现

根据个人开发感受,整理模板实现思路

  • ["Otter/OtterTemplet"] -- 专门讨论页面

目标结构

  • 仓促启动,模块的目录,文件约定都是在开发中变动者,现在应该统一下来:
    • 注意!:
      • +--otterSample 目标代码示例文件目录

      • +--otterTemplet 模板文件存放目录

{{{]tree OtTool +--doc epydoc 自动组织的API 文档 | +--api | | +--epydoc.css | | +--index.html | | +--.... | +--CHANGES | +--html | +--LICENSE | \--README +--OtTool.py 主调用入口类 +--OtXML.py XML解析类,处理Otter 配置 XML 文件 +--OtCUI.py Otter Tools Commend User Interface;命令行用户界面;用以处理各种命令行的响应操作 +--OtFiler.py 文件伺候包;专门用以进行文件,目录的操作 +--OtTemplet.py 模板解析包,现在为空类,由继承的类实际运行式 操作 +--OtTDict.py 字典匹配式模板解析类 +--OtTXML.py XML标签驱动模板解析类 +--timer.py 运行时间记录工具包 +--otterTemplet 模板文件存放目录 | +--lib | | +--messages | | | +--bytemsg.py | | | +--pcon-pmsg.py | | | +--scon-pmsg.py | | | \--init.py | | +--protocols | | | +--byteprotocol.py | | | +--pcon-p.py | | | +--scon-p.py | | | \--init.py | | \--init.py | +--gnsc.py | \--gnsd.py +--otterSample 目标代码示例文件目录 | +--lib | | +--messages | | | +--bytemsg.py | | | +--gnspmsg.py | | | +--usspmsg.py | | | \--init.py | | +--protocols | | | +--byteprotocol.py | | | +--gnsp.py | | | +--ussp.py | | | \--init.py | | \--init.py | +--ussc.py | \--ussd.py +--web 预备的CGI 接口目录 +--xml 预备的 Otter XML Schema 和示范 XML文件 | +--ottertools.xsd | \--uss.xml \--init.py

}}}

Otter (last edited 2009-12-25 07:14:51 by localhost)