import datatypes; entity(feature){ entity(metamodel){ entity(FeatureModel){ relation(configured,FeatureModel,FeatureModel); relation(constraint,FeatureModel,Constraint); isAggregation(constraint,true); relation(tree,FeatureModel,FeatureTree); isAggregation(tree,true); } entity(Feature){ relation(name,Feature,String); relation(abstractFeatureRelation,Feature,Feature); isAggregation(abstractFeatureRelation,true); relation(selected,Feature,Feature); supertypeOf(Feature.abstractFeatureRelation,selected); } entity(FeatureTree){ relation(violated,FeatureTree,FeatureTree); relation(root,FeatureTree,Feature); isAggregation(root,true); } entity(Xor){ relation(xor,Xor,Feature); supertypeOf(Feature.abstractFeatureRelation,xor); } supertypeOf(Feature,Xor); entity(Or){ relation(orFeature,Or,Feature); supertypeOf(Feature.abstractFeatureRelation,orFeature); } supertypeOf(Feature,Or); entity(MandOpt){ relation(mandatory,MandOpt,Feature); supertypeOf(Feature.abstractFeatureRelation,mandatory); relation(optional,MandOpt,Feature); supertypeOf(Feature.abstractFeatureRelation,optional); } supertypeOf(Feature,MandOpt); entity(Constraint){ relation(feature,Constraint,Feature); relation(violated,Constraint,Constraint); } entity(Requires); supertypeOf(Constraint,Requires); entity(Excludes); supertypeOf(Constraint,Excludes); } entity(models); }