Odoo 源码包含了2个 relax ng 文件,也是odoo sa用来验证xml的正确性的。

openerp/import_xml.rng

openerp/addons/base/rng/view.rng

   

阅读源码,发现odoo 在装载xml 文件以及加载 view到数据库的时候,会使用 lxml 调用 relax ng 来验证 XML文件,以及view 定义的正确性。

   

源码 addons/base/ir/ir_ui_view.py 里面的 _check_xml 方法

   

源码 tools/convert.py 里面的 convert_xml_import 方法

   

   

如果开发者在开发时,就能验证 XML 的正确性,就不用等到安装模块时才发现XML 撰写错误。

   

下面就如何在 sublime text 平台使用 relax ng 验证XML

其他 IDE 自行套用。

   

Sublime text 使用 sublimelinter - xmllint 插件

前提是要安装好 xmllint, xmllint 在 libxml2-utils 包分发

   

安装 sublimelinter 和 sublimelinter - xmllint.

   

使用 package control 管理 sublime text 的插件,将 sublimelnter 和 sublimelinter -xmllint 加入到 package control 用户配置里,这样, Package control 将会自动安装添到 installed pakcages 里面的插件

   

我的用户配置如下

   

{

"bootstrapped": true,

"git_binary":

[

"c:\\cygwin\\bin\\git.exe"

],

"in_process_packages":

[

],

"installed_packages":

[

"All Autocomplete",

"Anaconda",

"GitGutter",

"HTML-CSS-JS Prettify",

"Markdown Extended",

"Markdown Preview",

"MarkdownEditing",

"Package Control",

"SideBarEnhancements",

"SnippetMaker",

"sublime-odoo-snippets",

"SublimeGoogle",

"SublimeLinter",

"SublimeLinter-jshint",

"SublimeLinter-json",

"SublimeLinter-xmllint",

"SublimeREPL",

"Vintageous"

],

"repositories":

[

"https://github.com/sotogarcia/sublime-odoo-snippets"

]

}

   

   

从上面可以看出,我用cygwin来运行 linux tools… 所以我的 xmllint 也是在cygwin 下运行的。如果你是其他的平台,按照OS选择安装合适的 xmllint

   

   

安装 sublimelinter -xmllint 之后,最重要的事情,就是配置 sublimelinter…

   

进入 sublimelinter 用户配置

   

对 xmllint 小节修改配置

   

增加 xmllint 参数。。。

"args": [

"--relaxng",

"e:\\view.rng",

"--relaxng",

"e:\\import_xml.rng",

],

   

其中 view.rng 和 import_xml.rng 是 relax ng 文件的存放位置。