跳转到主要内容

用于将XDV规则编译为XSLT的Buildout (zc.buildout) 脚本

项目描述

这是一个 Buildout 脚本,它自动化了 XDV 规则和主题文件的编译,生成用于具有转换功能的Web服务器的 XSLT

简介

Deliverance 是将不同的Web应用程序组装和主题化成一个单一、统一的单元的“颠覆性”概念。 XDV 是Deliverance的一个子集实现,它生成纯可扩展样式表语言 (XSL) 转换 (XSLT) 规则。 Buildout 是通过“食谱”来重复构建应用程序的一种文明方式,这些“食谱”告诉如何达到特定的目标。

此食谱 sk.recipe.xdv 使Buildout能够自动从其源规则和主题构建XDV的XSLT输出。

开发者信息

项目主页

http://code.google.com/p/buildout-recipes/

源代码库

http://buildout-recipes.googlecode.com/svn/recipes/sk.recipe.xdv

问题跟踪器

http://code.google.com/p/buildout-recipes/issues/list

安装

由于这是一个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

(可选。) 指定是否可以访问网络以解析实体(获取资源);指定truefalse。如果Buildout本身以离线模式运行,则默认为false。

如果您没有指定output选项,则此配方将将其设置为生成主题XSLT文件的路径。然后您可以使用此值在其他buildout部分中使用${part-name:output},其中part-name是使用sk.recipe.xdv配方的部分的名称。

示例用法

为此演示,我们在testdata子目录中预先准备了规则和模板文件,分别命名为rules.xmltheme.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))

我们列出两个必需设置,rulestheme,并让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 (8.6 kB 查看哈希值)

上传时间:

构建分发

sk.recipe.xdv-0.0.0-py2.6.egg (14.6 kB 查看哈希值)

上传时间:

sk.recipe.xdv-0.0.0-py2.5.egg (14.6 kB 查看哈希值)

上传时间:

sk.recipe.xdv-0.0.0-py2.4.egg (14.6 kB 查看哈希值)

上传时间:

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面