class PositiveParserTestCase(RDFTestCase): def setUp(self): super().setUp() self.input_graph = Graph() for document in self.test.input_documents: self.input_graph.update(document.read(self.opener)) self.output_graph = Graph(self.test.output_document.read(self.opener)) def runTest(self): self.assertEqual(self.input_graph, self.output_graph)
class EntailmentTestCase(RDFTestCase): ENTAILMENT_RULES = { TEST.simpleEntailment: SIMPLE_ENTAILMENT_LG, RDF: RDF_ENTAILMENT, RDFS: RDFS_ENTAILMENT, TESTS['datatypes#']: DATATYPE_ENTAILMENT } def setUp(self): super().setUp() self.premise = Graph() for premise_document in self.test.premise_documents: if premise_document.type != TEST['False-Document']: self.premise.update(premise_document.read(self.opener)) else: self.premise = False self.entailments = [] for rules_uri in self.test.entailment_rules: entailment = self.ENTAILMENT_RULES[rules_uri] self.entailments.append(entailment) if (SIMPLE_ENTAILMENT not in self.entailments and SIMPLE_ENTAILMENT_LG not in self.entailments): self.entailments.append(SIMPLE_ENTAILMENT_LG) self.merged_entailment = Entailment() for entailment in self.entailments: self.merged_entailment.conditions += entailment.conditions self.merged_entailment.axioms |= entailment.axioms self.merged_entailment.rules += entailment.rules self.merged_entailment.axioms |= { (datatype, RDF.type, RDFS.Datatype) for datatype in self.test.datatype_support } if self.test.conclusion_document.type != TEST['False-Document']: self.conclusion = Graph( self.test.conclusion_document.read(self.opener)) else: self.conclusion = False
def entails(self, s, e): if s >= e: return True entailed = Graph(s | self.axioms) context = Context() num_triples = -1 while len(entailed) != num_triples: num_triples = len(entailed) for rule in self.rules: entailed.update(rule.apply(entailed, context)) if len(entailed) != num_triples: if e <= entailed: return True for triple in e: if triple not in entailed: for entailed_triple in entailed: pattern = Pattern(entailed_triple) if pattern.matches(triple): break else: return False return True
class EntailmentTestCase(RDFTestCase): ENTAILMENT_RULES = {TEST.simpleEntailment: SIMPLE_ENTAILMENT_LG, RDF: RDF_ENTAILMENT, RDFS: RDFS_ENTAILMENT, TESTS['datatypes#']: DATATYPE_ENTAILMENT} def setUp(self): super().setUp() self.premise = Graph() for premise_document in self.test.premise_documents: if premise_document.type != TEST['False-Document']: self.premise.update(premise_document.read(self.opener)) else: self.premise = False self.entailments = [] for rules_uri in self.test.entailment_rules: entailment = self.ENTAILMENT_RULES[rules_uri] self.entailments.append(entailment) if (SIMPLE_ENTAILMENT not in self.entailments and SIMPLE_ENTAILMENT_LG not in self.entailments): self.entailments.append(SIMPLE_ENTAILMENT_LG) self.merged_entailment = Entailment() for entailment in self.entailments: self.merged_entailment.conditions += entailment.conditions self.merged_entailment.axioms |= entailment.axioms self.merged_entailment.rules += entailment.rules self.merged_entailment.axioms |= { (datatype, RDF.type, RDFS.Datatype) for datatype in self.test.datatype_support} if self.test.conclusion_document.type != TEST['False-Document']: self.conclusion = Graph( self.test.conclusion_document.read(self.opener)) else: self.conclusion = False