将 jing 和 trang RELAX NG 工具包装到 Python 脚本中
项目描述
jingtrang是基于 Java 的命令行工具的包装器,用于处理 RELAX NG 模式。
动机
RELAX NG,尤其是描述 XML 结构的紧凑形式非常有效。
不幸的是,对于 Python,支持相当有限:
lxml 只允许验证基于 XML 的模式
lxml 基于 libxml2 库,它在 RELAX NG 验证方面有一些小的限制(在某些情况下,您会发现错误消息,如“TODO”)。
包 rnc2rng 有望从 XML 转换为紧凑形式,但并不是真正可用(它根本不起作用)。
一般来说,找到紧凑的 RELAX NG 语法的命令行验证器甚至不是很容易。
RNV 很有前途,但 Sourceforge 上的版本相当旧,而且 GitHub 上的版本没有最新的安装说明。
其他 RELAX NG 相关工具大多忽略紧凑语法。
唯一的例外是托管在 googlecode 上的 jingtrang 项目。
这个工具的问题是,它需要几个步骤,然后从控制台轻松安装以供日常使用真的很方便。
由于我们的团队同时在 Linux 和 MS Windows 上工作,我一直在寻找跨平台命令行解决方案。
由于 jingtrang 命令(jing 和 trang)似乎运行良好,我决定编写这个 jing 和 trang 包装器。
提供 (py)jing 和 (py)trang 命令行工具
原始命令行工具被命名为 jing(验证器)和 trang(转换模式)。
为防止命名冲突,使用前缀py。
命令行界面完全一样,就好像用java解释器一样,只是介绍性的“java -jar <jarfile.jar>”部分不需要调用。
这里只描述了最流行的用例,更多选项,请查阅原始 jingtrang 文档(从 googlecode 或其他地方下载并查看包含的 html 文档)。
安装
先决条件是:
Python(2.7 或 3.4 及更高版本)
爪哇
点子
通过以下方式安装它:
$ pip install jingtrang
之后,安装了两个新脚本:
pyjing - RELAX NG 验证器
pytrang - 用于在 XML/紧凑语法/XSD/其他几种格式之间进行转换的实用程序
pyjing - RELAX NG 验证器(XML 以及紧凑的语法)
pyjing用于根据 XML 以及紧凑的语法 RELAX NG 模式验证 XML 文档:
$ pyjing Jing 版本 20091111 用法:java com.thaiopensource.relaxng.util.Driver [-i] [-c] [-s] [-t] [-C catalogFile] [-e encoding] RNGFile XMLFile... RELAX NG 是一个XML 的模式语言 有关详细信息,请参阅http://relaxng.org/。
要使用 XML 语法 RELAX NG 模式验证 XML:
$ pyjing schema.rng file.xml
要使用紧凑语法模式进行验证,请使用-c开关:
$ pyjing -c schema.rnc file.xml
可以一次验证多个 XML 文件:
$ pyjing schema.rnc samples/*.xml
pytrang - 模式格式转换器
pytrang是“模式语言翻译器”,不仅支持 RELAX NG XML 和紧凑语法,还支持 DTD、XSD。它甚至允许基于示例 XML 文档生成初始模式。
尝试运行它:
$ pytrang fatal: at least two arguments are required Trang version 20091111 usage: java com.thaiopensource.relaxng.translate.Driver [-C catalogFileOrUri] [-I rng|rnc|dtd|xml] [-O rng|rnc|dtd|xsd] [-i input-param] [-o output-param] inputFileOrUri ... outputFile
pytrang能够从文件扩展名中自动检测格式,因此您可以直接转换而无需明确指定要使用的输入和输出格式。
将紧凑语法转换为 XML 可以通过以下方式完成:
$ pytrang root.rnc root.rng
要从示例 XML 文件生成紧凑格式的初始 RELAX NG 模式,请尝试:
$ pytrang sample.xml initial.rnc