public HashSet <IClassExpression> SuperClasses( IClassExpression classExpression ) { if (!_superClasses.TryGetValue( classExpression, out HashSet <IClassExpression> superClassExpressions)) { superClassExpressions = new HashSet <IClassExpression>(); _superClasses[classExpression] = superClassExpressions; superClassExpressions.Add(classExpression); Get <ISubClassOf>() .Where(subClassOf => subClassOf.SubClassExpression == classExpression) .Select(subClassOf => subClassOf.SuperClassExpression) .ForEach(superClassExpression => superClassExpressions.UnionWith(SuperClasses(superClassExpression))); if (classExpression is IObjectIntersectionOf objectIntersectionOf) { objectIntersectionOf .ClassExpressions .ForEach(componentClassExpression => superClassExpressions.UnionWith(SuperClasses(componentClassExpression))); } } return(superClassExpressions); }
public ObjectAllValuesFrom( IObjectPropertyExpression objectPropertyExpression, IClassExpression classExpression ) : base(objectPropertyExpression) { _classExpression = classExpression; }
private void Classify( ISet <IClass> classes, ISet <IClass> candidates, object individual, IClassExpression classExpression ) { if (classExpression is IClass @class) { if (!classes.Add(@class)) { // Class Expression already processed. return; } // Prune candidates. candidates.Remove(@class); candidates.ExceptWith(_disjointClassExpressions[classExpression].OfType <IClass>()); _superClassExpressions[classExpression].ForEach(superClassExpression => Classify( classes, candidates, individual, superClassExpression)); } else if (classExpression is IObjectIntersectionOf objectIntersectionOf) { objectIntersectionOf.ClassExpressions .ForEach(componentClassExpression => Classify( classes, candidates, individual, componentClassExpression)); } }
public static IObjectUnionOf Union( this IObjectUnionOf lhs, IClassExpression rhs ) { lhs.ClassExpressions.Add(rhs); return(lhs); }
public static IObjectIntersectionOf Intersect( this IObjectIntersectionOf lhs, IClassExpression rhs ) { lhs.ClassExpressions.Add(rhs); return(lhs); }
protected ObjectCardinality( IObjectPropertyExpression objectPropertyExpression, int cardinality, IClassExpression classExpression ) : base(objectPropertyExpression) { _cardinality = cardinality; _classExpression = classExpression; }
public ClassAssertion( IOntology ontology, IClassExpression classExpression, INamedIndividual namedIndividual ) : base(ontology) { _classExpression = classExpression; _namedIndividual = namedIndividual; }
public HasKey( IOntology ontology, IClassExpression classExpression, params IDataPropertyExpression[] dataPropertyExpressions ) : base(ontology) { _classExpression = classExpression; _dataPropertyExpressions = dataPropertyExpressions; }
public SubClassOf( IOntology ontology, IClassExpression subClassExpression, IClassExpression superClassExpression ) : base(ontology) { _subClassExpression = subClassExpression; _superClassExpression = superClassExpression; }
public ObjectPropertyRange( IOntology ontology, IObjectPropertyExpression objectPropertyExpression, IClassExpression range ) : base( ontology, objectPropertyExpression) { _range = range; }
public ObjectPropertyDomain( IOntology ontology, IObjectPropertyExpression objectPropertyExpression, IClassExpression domain ) : base( ontology, objectPropertyExpression) { _domain = domain; }
public DataPropertyDomain( IOntology ontology, IDataPropertyExpression dataPropertyExpression, IClassExpression domain ) : base( ontology, dataPropertyExpression) { _domain = domain; }
public ObjectExactCardinality( IObjectPropertyExpression objectPropertyExpression, int cardinality, IClassExpression classExpression = null ) : base( objectPropertyExpression, cardinality, classExpression) { }
public ObjectComplementOf( IClassExpression classExpression ) { _classExpression = classExpression; }
public static IObjectIntersectionOf Intersect( this IClassExpression lhs, IClassExpression rhs ) => new ObjectIntersectionOf(lhs, rhs);
public static IObjectUnionOf Union( this IClassExpression lhs, IClassExpression rhs ) => new ObjectUnionOf(lhs, rhs);
public static IObjectComplementOf Complement( this IClassExpression classExpression ) => new ObjectComplementOf(classExpression);