def _validate_node(self, node):
c = Composer(self.device, node)<EOL>if c.schema_node is None:<EOL><INDENT>p = self.device.get_xpath(node, instance=False)<EOL>raise ConfigError('<STR_LIT>''<STR_LIT>'.format(p))<EOL><DEDENT>if c.schema_node.get('<STR_LIT:type>') == '<STR_LIT:list>':<EOL><INDENT>for key in c.keys:<EOL><INDENT>if node.find(key) is None:<EOL><INDENT>p = self.device.get_xpath(node, instance=False)<EOL>raise ConfigError("<STR_LIT>""<STR_LIT>".format(key, p))<EOL><DEDENT><DEDENT><DEDENT>for tag in operation_tag, insert_tag, value_tag, key_tag:<EOL><INDENT>if node.get(tag):<EOL><INDENT>raise ConfigError("<STR_LIT>""<STR_LIT>".format(tag, self.device.get_xpath(node)))<EOL><DEDENT><DEDENT>for child in node.getchildren():<EOL><INDENT>if len(child) > <NUM_LIT:0>:<EOL><INDENT>self._validate_node(child)<EOL><DEDENT>child_schema_node = self.device.get_schema_node(child)<EOL>if child_schema_node is None:<EOL><INDENT>raise ConfigError("<STR_LIT>""<STR_LIT>".format(self.device.get_xpath(child), self))<EOL><DEDENT>if len(child) == <NUM_LIT:0> andchild_schema_node.get('<STR_LIT:type>') == '<STR_LIT>' andchild_schema_node.get('<STR_LIT>') != '<STR_LIT:true>':<EOL><INDENT>node.remove(child)<EOL><DEDENT><DEDENT>
_validate_node

        Low-level api: Validate one config node. This is a recursive method. An
        exception will be raised if validation fails.

        Parameters
        ----------

        node : `Element`
            An Element node in config tree.

        Returns
        -------

        None
            There is no return of this method.