Python 创建声明性迷你语言
2007-03-30 12:31:54 来源:WEB开发网核心提示: 继承的魔力让支持库到处插入并操作应用程序的名称空间,这会启用精妙的声明性样式,Python 创建声明性迷你语言(7),但通常,将继承结构和自省一起使用会使灵活性更佳,我只想研究创建有效性类的声明性样式,与前面的 DTD 样本相匹配的一组规则/类包括:清单 10. gnosis.xml.va
继承的魔力
让支持库到处插入并操作应用程序的名称空间,这会启用精妙的声明性样式。但通常,将继承结构和自省一起使用会使灵活性更佳。
模块 gnosis.xml.validity 是用来创建直接映射到 DTD 产品的类的框架。任何 gnosis.xml.validity 类 只能用符合 XML 方言有效性约束的参数进行实例化。实际上,这并不十分正确;当只存在一种明确的方式可将参数“提升”成正确类型时,模块也可从更简单的参数中推断出正确类型。
由于我已经编写了 gnosis.xml.validity 模块,所以我倾向于思考其用途自身是否有趣。但是对于本文,我只想研究创建有效性类的声明性样式。与前面的 DTD 样本相匹配的一组规则/类包括:
清单 10. gnosis.xml.validity 规则声明
from gnosis.xml.validity import *
class figure(EMPTY): pass
class _mixedpara(Or): _disjoins = (PCDATA, figure)
class paragraph(Some): _type = _mixedpara
class title(PCDATA): pass
class _paras(Some): _type = paragraph
class chapter(Seq): _order = (title, _paras)
class dissertation(Some): _type = chapter
您可以使用以下命令从这些声明中创建出实例:
ch1 = LiftSeq(chapter, ("1st Title","Validity is important"))
ch2 = LiftSeq(chapter, ("2nd Title","Declaration is fun"))
diss = dissertation([ch1, ch2])
print diss
请注意这些类和前面的 DTD 非常匹配。映射基本上是一一对应的;除了有必要对嵌套标记的量化和交替使用中介体之外(中介体名称用前导下划线标出来)。
更多精彩
赞助商链接