Size: 736
Comment: 开了开了! :)
|
Size: 8843
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的高可用性、高可扩展性、高性能的网络框架
开发知识
[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)
使用手册
- ["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解析
根据 [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
}}}