展平多文件RELAX NG架构

rnginline的Python项目详细描述


https://img.shields.io/travis/h4l/rnginline.svghttps://img.shields.io/codecov/c/github/h4l/rnginline/master.svghttps://img.shields.io/pypi/v/rnginline.svghttps://img.shields.io/badge/docs-latest-brightgreen.svg

rnginline是一个python库和命令行工具,用于加载多个文件 从任意url中放松ng模式,并将其扁平化为单个放松ng 架构。

功能

  • 将多文件rng架构转换为一个文件,而不中断或 重新构造架构
  • 在单个输出中要非常小心地维护独立模式文件的语义
  • 输入文档更改得越少越好,因此输出的可读性与输入的一样
  • 从以下位置加载架构:
    • 文件系统
    • 从python包的数据(不将其解压到文件系统)
  • 命令行界面以及python api
  • 测试套件涵盖了许多边缘情况,例如名称空间处理
    • 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属性,这对我来说是不可取的。

    开发

    一个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
    

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


    热门话题
    java hibernate。MappingException持久类未知   其余的都是java。lang.ClassNotFoundException:雅加达。servlet。在Tomcat 9上运行时在Maven/Jersey web服务上进行筛选   java从异步任务返回结果   java阶乘程序打印出递归   停止或重新部署Spring 3.1.2、Hibernate 4.1.0、Spring DataJpa 1.1.0、Tomcat 7.0.30时出现java内存泄漏   java如何在配置文件中生成计算属性   集合java 8将ListB的所有元素合并到ListA中(如果不存在)   运行mvn verify时,java为'test'配置文件中的测试设置defaultbinder   java如何在Hashmap中删除重复的键值对?不只是复制键或值   java如何编程一个按钮以成功加载数组中的下一个数据   java将ASCII数据发送到Android Things上的UART3,最后是3个字节0xFF   多线程Java并发递增一个值   java Android应用程序登录和登录问题