用于将XDV规则编译为XSLT的Buildout (zc.buildout) 脚本
项目描述
这是一个 Buildout 脚本,它自动化了 XDV 规则和主题文件的编译,生成用于具有转换功能的Web服务器的 XSLT。
简介
Deliverance 是将不同的Web应用程序组装和主题化成一个单一、统一的单元的“颠覆性”概念。 XDV 是Deliverance的一个子集实现,它生成纯可扩展样式表语言 (XSL) 转换 (XSLT) 规则。 Buildout 是通过“食谱”来重复构建应用程序的一种文明方式,这些“食谱”告诉如何达到特定的目标。
此食谱 sk.recipe.xdv 使Buildout能够自动从其源规则和主题构建XDV的XSLT输出。
开发者信息
安装
由于这是一个Buildout配方,实际上并没有什么需要安装的。只需在buildout中提及配方名称即可,享受吧!例如,您的buildout.cfg可能如下所示
[buildout] parts = my-webserver my-cms my-theme web-config ... [my-theme] recipe = sk.recipe.xdv rules = ${buildout:directory}/etc/rules.xml theme = ${buildout:directory}/src/skin/main-template.html [web-config] recipe = collective.recipe.template input = ${buildout:directory}/etc/httpd.conf.template output = ${buildout:directory}/etc/httpd.conf ...
然后,假设httpd.conf.template包含${my-theme:output},生成的httpd.conf将包含编译后的XSLT文件的路径。
很简单!
支持选项
sk.recipe.xdv配方支持以下选项
- rules
(必需。) 要编译的规则XML文件。
- theme
(必需。) 要使用的主题HTML文件,作为模板。
- output
(可选。) 编译结果写入XSLT文件的路径。如果不指定,配方将在Buildout的parts目录中创建一个以buildout配置中部分名称命名的子目录,并在该目录中创建名为theme.xsl的编译后的XSLT文件。
- includemode
(可选。) 指定如何解引用规则中包含的内容,默认为document。在document模式下,包含的内容通过XSLT的document()函数插入。在ssi模式下,是通过服务器端包含(需要兼容的web服务器)。在esi模式下,是通过边缘包含(需要兼容的缓存服务器)。
- network
(可选。) 指定是否可以访问网络以解析实体(获取资源);指定true或false。如果Buildout本身以离线模式运行,则默认为false。
如果您没有指定output选项,则此配方将将其设置为生成主题XSLT文件的路径。然后您可以使用此值在其他buildout部分中使用${part-name:output},其中part-name是使用sk.recipe.xdv配方的部分的名称。
示例用法
为此演示,我们在testdata子目录中预先准备了规则和模板文件,分别命名为rules.xml和theme.html。让我们获取对这些文件的便捷引用
>>> import os.path >>> testdata = join(os.path.dirname(__file__), 'testdata') >>> rulesXML = join(testdata, 'rules.xml') >>> themeHTML = join(testdata, 'theme.html')
现在让我们创建一个buildout来编译这些规则和主题模板
>>> write(sample_buildout, 'buildout.cfg', ''' ... [buildout] ... parts = my-rules ... ... [my-rules] ... recipe = sk.recipe.xdv ... rules = %(rules)s ... theme = %(theme)s ... ''' % dict(rules=rulesXML, theme=themeHTML))
我们列出两个必需设置,rules和theme,并让Buildout自行处理
>>> print system(buildout) Installing my-rules.
由于我们留出了所有其他选项为默认值,配方将规则和模板主题编译成名为theme.xsl的文件,并将其放入Buildout的parts目录的子目录中,该目录名为my-rules,您会发现这是buildout.cfg文件中的部分名称
>>> ls('parts', 'my-rules') - theme.xsl
它看起来是什么样子?让我们看看
>>> cat('parts', 'my-rules', 'theme.xsl') # doctest: +ELLIPSIS <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"...
这看起来像是XSLT。
控制目标文件
将编译后的XSLT输出写入parts目录是大多数Buildout情况下的默认行为,但您可能需要更多的控制。让我们更新buildout.cfg文件以实现这一点
>>> destDir = tmpdir('my-dir') >>> destXSL = join(destDir, 'my-output.xsl') >>> write(sample_buildout, 'buildout.cfg', ''' ... [buildout] ... parts = my-rules ... ... [my-rules] ... recipe = sk.recipe.xdv ... output = %(destination)s ... rules = %(rules)s ... theme = %(theme)s ... ''' % dict(destination=destXSL, rules=rulesXML, theme=themeHTML))
重新运行Buildout
>>> print system(buildout) Uninstalling my-rules. Installing my-rules.
现在看看我们的工作目录中出现了什么
>>> ls(destDir) - my-output.xsl
完美。
控制第三方实体包含
XDV通常通过应用规则将底层生产系统中的内容转换为所需主题的XSLT。然而,内容也可以来自当前资源流之外的第三方资源。如果您没有在规则文件中指定如何检索它们,则将使用默认的资源方法。您可以使用includemode选项指定默认方法。
除非另有说明,包含模式使用XSLT的document函数。您可以在配方部分明确指出document。
[my-rules] recipe = sk.recipe.xdv includemode = document ...
其他包含模式包括使用服务器端包含的ssi和使用边缘包含的esi。让我们尝试其中一个。首先,让我们更新buildout.cfg。
>>> destDir = tmpdir('another-dir') >>> docBased = join(destDir, 'doc-based.xsl') >>> ssiBased = join(destDir, 'ssi-based.xsl') >>> write(sample_buildout, 'buildout.cfg', ''' ... [buildout] ... parts = ... doc-based ... ssi-based ... ... [doc-based] ... recipe = sk.recipe.xdv ... includemode = document ... output = %(docBased)s ... rules = %(rules)s ... theme = %(theme)s ... ... [ssi-based] ... recipe = sk.recipe.xdv ... includemode = ssi ... output = %(ssiBased)s ... rules = %(rules)s ... theme = %(theme)s ... ''' % dict(docBased=docBased, ssiBased=ssiBased, rules=rulesXML, theme=themeHTML))
现在让我们运行Buildout并看看输出有何不同。
>>> print system(buildout) Uninstalling my-rules. Installing doc-based. Installing ssi-based.
现在看看我们的工作目录中出现了什么
>>> ls(destDir) - doc-based.xsl - ssi-based.xsl >>> cat(docBased) # doctest: +ELLIPSIS <xsl:stylesheet ...<xsl:copy-of select="document('/legal.html', .)//*[@id = ... >>> cat(ssiBased) # doctest: +ELLIPSIS <xsl:stylesheet ... <xsl:copy-of select="/html/head/div[2]"/><xsl:comment># include virtual="/legal.html...
ESI的工作方式类似(如果它真的工作的话;今天早上测试它时,XDV编译器给我报错)。
变更日志
0.0.0
这次发布注定将成为最终的GA版本。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
sk.recipe.xdv-0.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 01fe1b56c2cf958bdc473e1ed901a3bb2524cc40d804897c9d74f8ae126c770c |
|
MD5 | 60a394561f972c496167cdde4f8d37c6 |
|
BLAKE2b-256 | 181119d9969e38ac0fe0d2957befa3a18808c7b0ef102d7fc719e64ef52a0d64 |
sk.recipe.xdv-0.0.0-py2.6.egg的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 441d8f36beb7378d96e8b1daf38c4ce46391a8f58fc2205b8b251d506a0091ae |
|
MD5 | 42de53f7020c8f23163b00a1fbfba959 |
|
BLAKE2b-256 | 69353982950fb02e940dabbe3be90a02a3092654e4919a4482821c5ed1d15629 |
sk.recipe.xdv-0.0.0-py2.5.egg的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 02e94c99376627e9e6e40b7cb79d57d99b17e8094c7df547565251825b59e35b |
|
MD5 | 2282c95d5777afea876ac4230acf61ba |
|
BLAKE2b-256 | 81b6aa981160142d36ed17d002fd7b88ee7fa8a9c2ca33a8de0ef0596a7416ea |
sk.recipe.xdv-0.0.0-py2.4.egg的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1f06fc258266e0e7329c820bb015b6d1c9f7f3b6efed1318355b389ea4b62f36 |
|
MD5 | 42a045951d3be383cfeca674f18c6b60 |
|
BLAKE2b-256 | 5ad4ca05d94a11bab89fe57ad567643c58f144dbe404826abaeee4de061f32b8 |