diff --git a/bin/addons/base/ir/ir_ui_view.py b/bin/addons/base/ir/ir_ui_view.py
index e1fbba0c329..43ceae9131c 100644
--- a/bin/addons/base/ir/ir_ui_view.py
+++ b/bin/addons/base/ir/ir_ui_view.py
@@ -28,16 +28,23 @@
##############################################################################
from osv import fields,osv
-from xml import dom
+from lxml import etree
+import tools
+import netsvc
+import os
-def _check_xml(self, cr, uid, ids):
- try:
- cr.execute('select arch from ir_ui_view where id in ('+','.join(map(str,ids))+')')
- for row in cr.fetchall():
- doc = dom.minidom.parseString(row[0])
- return True
- except Exception, e:
- return False
+def _check_xml(self, cr, uid, ids, context={}):
+ for view in self.browse(cr, uid, ids, context):
+ eview = etree.fromstring(view.arch)
+ frng = tools.file_open(os.path.join('base','rng',view.type+'.rng'))
+ relaxng = etree.RelaxNG(file=frng)
+ if not relaxng.validate(eview):
+ logger = netsvc.Logger()
+ logger.notifyChannel('init', netsvc.LOG_ERROR, 'The view do not fit the required schema !')
+ logger.notifyChannel('init', netsvc.LOG_ERROR, relaxng.error_log.last_error)
+ print view.arch
+ return False
+ return True
class view(osv.osv):
_name = 'ir.ui.view'
diff --git a/bin/addons/base/rng/board.rng b/bin/addons/base/rng/board.rng
new file mode 100644
index 00000000000..73477113f62
--- /dev/null
+++ b/bin/addons/base/rng/board.rng
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bin/addons/base/rng/form.rng b/bin/addons/base/rng/form.rng
new file mode 100644
index 00000000000..73477113f62
--- /dev/null
+++ b/bin/addons/base/rng/form.rng
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bin/addons/base/rng/graph.rng b/bin/addons/base/rng/graph.rng
new file mode 100644
index 00000000000..73477113f62
--- /dev/null
+++ b/bin/addons/base/rng/graph.rng
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bin/addons/base/rng/tree.rng b/bin/addons/base/rng/tree.rng
new file mode 100644
index 00000000000..73477113f62
--- /dev/null
+++ b/bin/addons/base/rng/tree.rng
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+