/// <summary> /// Gets an ontology data containing the facts which are members of this class /// </summary> public override RDFOntologyData EnlistMembers(RDFOntology ontology) { var facts = new RDFOntologyData(); if (ontology != null) { //Iterate the classes belonging to the intersection class Boolean firstIter = true; var compClassEnum = this.CompositingClassesEnumerator(); while (compClassEnum.MoveNext()) { //The first iteration must give the facts belonging to the first class if (firstIter) { facts = compClassEnum.Current.EnlistMembers(ontology); firstIter = false; } //The other iterations must compose them with an intersection logic else { facts = facts.IntersectWith(compClassEnum.Current.EnlistMembers(ontology)); } } } return facts; }
/// <summary> /// Enlists the facts which are members of the given composition within the given ontology /// </summary> internal static RDFOntologyData EnlistMembersOfComposite(RDFOntologyClass ontCompClass, RDFOntology ontology) { var result = new RDFOntologyData(); //Intersection if (ontCompClass is RDFOntologyIntersectionClass) { //Filter "intersectionOf" relations made with the given intersection class var firstIter = true; var iTaxonomy = ontology.Model.ClassModel.Relations.IntersectionOf.SelectEntriesBySubject(ontCompClass); foreach (var tEntry in iTaxonomy) { if (firstIter) { result = RDFOntologyReasoningHelper.EnlistMembersOf((RDFOntologyClass)tEntry.TaxonomyObject, ontology); firstIter = false; } else { result = result.IntersectWith(RDFOntologyReasoningHelper.EnlistMembersOf((RDFOntologyClass)tEntry.TaxonomyObject, ontology)); } } } //Union else if (ontCompClass is RDFOntologyUnionClass) { //Filter "unionOf" relations made with the given union class var uTaxonomy = ontology.Model.ClassModel.Relations.UnionOf.SelectEntriesBySubject(ontCompClass); foreach (var tEntry in uTaxonomy) { result = result.UnionWith(RDFOntologyReasoningHelper.EnlistMembersOf((RDFOntologyClass)tEntry.TaxonomyObject, ontology)); } } //Complement else if (ontCompClass is RDFOntologyComplementClass) { result = ontology.Data.DifferenceWith(RDFOntologyReasoningHelper.EnlistMembersOf(ontCompClass, ontology)); } return result; }