def getRules(self): if not self.rules: tree = XSDTree.makeOne(VERIFICATION_FILE_PATH) if not tree: return self.rules root = tree.getroot() prefix = root.prefix verificationTypes = tree.xpath( '//' + prefix + ':complexType[contains(@name, "Verification")]', namespaces={prefix: XSD_NS}) for verificationType in verificationTypes: name = verificationType.get('name') name = name[0].upper() + name[1:-len('Verification')] self._setDomains(prefix, verificationType, name) ruleNodes = tree.xpath('//' + prefix + ':element[contains(@name, "Rule")]', namespaces={prefix: XSD_NS}) for ruleNode in ruleNodes: mathNodes = ruleNode.xpath('.//math:math', namespaces={"math": MATHML_NS}) if mathNodes: mathDoc = MathDOM() mathDoc._etree = etree.XML(etree.tostring(mathNodes[0]), parser=mathDoc._parser) if mathDoc._etree is None: raise NoMathMLException( "The 'math' construction has errors") self.rules.add( Rule( ruleNode.get('name'), mathDoc, mathNodes[0].getparent().get('forInChIList'), self._domains[ruleNode.get('name')] if self._domains.has_key( ruleNode.get('name')) else [])) rules = set() for rule in self.rules: rules.add(rule.copy()) for rule in self.addRules: rules.add(rule) for rule in self.delRules: if rule in rules: rules.remove(rule) for rule in self.useRules: rules.add(rule) if self.useRules: for rule in self.rules: if not rule in self.useRules: if rule in rules: rules.remove(rule) return rules