展平多文件RELAX NG架构
rnginline的Python项目详细描述
rnginline是一个python库和命令行工具,用于加载多个文件 从任意url中放松ng模式,并将其扁平化为单个放松ng 架构。
功能
- 将多文件rng架构转换为一个文件,而不中断或
重新构造架构
- 在单个输出中要非常小心地维护独立模式文件的语义
- 输入文档更改得越少越好,因此输出的可读性与输入的一样
- 文件系统
- 从python包的数据(不将其解压到文件系统)
- 100%线路和分支代码覆盖率
快速启动
使用pip安装:
$ pip install rnginline
您可以像这样从python中使用它:
>>>importrnginline>>>rnginline.inline('my-nested-schema-root.rng')<lxml.etree.RelaxNGobjectat...>
您可以从python包的数据中加载多文件模式,如下所示:
>>>importrnginline>>>fromrnginline.urlhandlersimportpydata>>>url=pydata.makeurl('rnginline.test',...'data/testcases/external-ref-1/schema.rng')>>>url'pydata://rnginline.test/data/testcases/external-ref-1/schema.rng'>>>rnginline.inline(url)<lxml.etree.RelaxNGobjectat...>
您可以在命令行中使用它,如下所示:
$ rnginline my-nested-schema-root.rng flattened-output.rng
动机
lxml对使用relax ng模式有很好的支持,但对 从文件系统以外的任何位置加载多文件架构。这是一个 如果希望将多文件模式与python捆绑在一起,则出现问题 包装/模块。您必须依赖可用的setuptools才能使用 {a6},或者使用现有的松弛NG合并工具之一 将架构转换为单个文件。
现有弛豫NG压扁工具下面的项目不太符合我的需要,导致我写了rnginline。
不过,他们可能会为你工作。
- rng2srng-实现已满
简化,因此输入模式的结构将丢失
- rng-incelim-类似于
这是用xslt实现的。不幸的是
无法正确处理<include>元素上的命名空间声明。
xslt 1.0不支持创建命名空间节点,因此要修复此问题
rng incelim必须将模式中的所有qname解析为ncnames
ns属性,这对我来说是不可取的。
下面的项目不太符合我的需要,导致我写了rnginline。 不过,他们可能会为你工作。
- rng2srng-实现已满 简化,因此输入模式的结构将丢失
- rng-incelim-类似于 这是用xslt实现的。不幸的是 无法正确处理<include>元素上的命名空间声明。 xslt 1.0不支持创建命名空间节点,因此要修复此问题 rng incelim必须将模式中的所有qname解析为ncnames ns属性,这对我来说是不可取的。
开发
一个invoke任务文件包含测试,doc 建筑,林务任务。tox配置使用invoke在各种 python版本。
要执行完整的测试运行,请安装tox($ pip install tox),然后运行 $ tox来自签出的回购协议。这需要几分钟 第一次运行,主要是由于构建lxml所需的时间 来源。
要运行调用任务,请确保安装了所有开发依赖项:
$ pip install -r requirements/all.txt $ invoke -l Available tasks: […] coverage Combine coverage of Python 2 and Python 3 test runs docs Build sphinx documentation docs_test Test the doctests in the Sphinx docs. Must be run with Python 3. pep8 Lint code for PEP 8 violations readme Lint the README for reStructuredText syntax issues test Run rnginline test suite $ invoke test============================= test session starts ============================== platform darwin -- Python 2.7.8 -- py-1.4.26 -- pytest-2.6.4 plugins: cov collected 346 items […]
预成型车轮
为了减少生成lxml所需的时间,可以预先生成 依赖项作为轮子放入./wheelhouse,并让pip使用预构建的 每次安装车轮。为此,请运行:
$ invoke cache_all_requirement_wheels $exportPIP_FIND_LINKS=$(pwd)/wheelhouse