--- /dev/null
+L0 = <http://www.simantics.org/Layer0-1.1>
+DIA = <http://www.simantics.org/Diagram-2.2>
+DNR = <http://www.simantics.org/DistrictNetworkRoutes-1.0>
+REG = <http://www.simantics.org/DistrictDiagramRegions-1.0>
+
+ES = <http://www.simantics.org/ElementSelection-1.0> : L0.Ontology
+ @L0.new
+ L0.Ontology.global true
+ L0.HasResourceClass "org.simantics.district.selection.ElementSelectionResource"
+
+ES.Selection <T L0.Entity
+ >-- ES.Selection.HasGenerator --> ES.Generator <R L0.HasProperty : L0.FunctionalRelation
+ >-- ES.Selection.HasCondition --> ES.Condition <R L0.HasProperty : L0.FunctionalRelation
+ >-- ES.Selection.HasSelector --> ES.Selector <R L0.HasProperty : L0.FunctionalRelation
+ @L0.singleProperty ES.Selection.HasGenerator
+ @L0.singleProperty ES.Selection.HasCondition
+ @L0.singleProperty ES.Selection.HasSelector
+
+ES.Generator <T L0.Entity
+ES.Condition <T L0.Entity
+ES.Selector <T L0.Entity
+
+ES.Generator.Explicit <T ES.Generator
+ >-- ES.Generator.HasSelectedElement --> DIA.Element <R L0.HasProperty : L0.Relation
+ @L0.property ES.Generator.HasSelectedElement
+
+ES.Generator.Model <T ES.Generator
+ES.Generator.Diagram <T ES.Generator
+ >-- ES.Generator.HasDiagram --> DIA.Diagram <R L0.HasProperty : L0.Relation
+ @L0.property ES.Generator.HasDiagram
+
+ES.Selector.All <T ES.Selector
+
+ES.PropertySelector <T ES.Selector
+ >-- ES.PropertySelector.HasSelectionPropertyName --> L0.String <R L0.HasProperty : L0.TotalFunction
+ >-- ES.PropertySelector.HasResultCount --> L0.Integer <R L0.HasProperty : L0.FunctionalRelation
+ @L0.singleProperty ES.PropertySelector.HasSelectionPropertyName
+ @L0.singleProperty ES.PropertySelector.HasResultCount
+
+ES.Selector.NLowest <T ES.PropertySelector
+ES.Selector.NHighest <T ES.PropertySelector
+
+ES.Condition
+ >-- ES.Condition.IsInverse --> ES.Condition <R L0.HasProperty : L0.Tag
+
+ES.AggregateCondition <T ES.Condition
+ >-- ES.HasSubcondition --> ES.Selector <R L0.IsComposedOf : L0.Relation
+ @L0.property ES.HasSubcondition
+
+// Logical and
+ES.Conjunction <T ES.AggregateCondition
+// Logical or
+ES.Disjunction <T ES.AggregateCondition
+// Logical nor
+ES.Negation <T ES.AggregateCondition
+
+ES.ElementaryCondition <T ES.Condition
+
+ES.PropertyCondition <T ES.ElementaryCondition
+ >-- ES.PropertyCondition.HasPropertyName --> L0.String <R L0.HasProperty : L0.TotalFunction
+ >-- ES.PropertyCondition.HasLowerLimit --> L0.Double <R L0.HasProperty : L0.FunctionalRelation
+ >-- ES.PropertyCondition.HasUpperLimit --> L0.Double <R L0.HasProperty : L0.FunctionalRelation
+ @L0.singleProperty ES.PropertyCondition.HasPropertyName
+ @L0.optionalProperty ES.PropertyCondition.HasLowerLimit
+ @L0.optionalProperty ES.PropertyCondition.HasUpperLimit
+
+ES.RouteCondition <T ES.ElementaryCondition
+ >-- ES.RouteCondition.HasRoute --> DNR.Route <R L0.HasProperty : L0.TotalFunction
+ @L0.singleProperty ES.RouteCondition.HasRoute
+ES.RegionCondition <T ES.ElementaryCondition
+ >-- ES.RegionCondition.HasRegion --> REG.Region <R L0.HasProperty : L0.TotalFunction
+ @L0.singleProperty ES.RouteCondition.HasRoute