--- /dev/null
+L0 = <http://www.simantics.org/Layer0-1.1>
+STR = <http://www.simantics.org/Structural-1.2>
+DOC = <http://www.simantics.org/Documentation-1.2>
+RELATIONS = <http://www.simantics.org/Documentation-1.2/Relations>
+PROPERTIES = <http://www.simantics.org/Documentation-1.2/Properties>
+FUNCTIONS = <http://www.simantics.org/Documentation-1.2/Functions>
+
+COMPONENTS = DOC.Components : L0.Library
+
+attribute = COMPONENTS.attribute : L0.Template
+ @template %subject %relation %default
+ %subject
+ >-- %relation
+ L0.Asserts _ : L0.Assertion
+ L0.HasPredicate %relation
+ L0.HasObject %default
+
+connectionPoint = COMPONENTS.connectionPoint : L0.Template
+ @template %subject %relation
+ %subject
+ >-- %relation
+
+sclAttribute = COMPONENTS.sclAttribute : L0.Template
+ @template %subject %relation %command
+ %subject
+ >-- %relation
+ L0.Asserts _ : L0.Assertion
+ L0.HasPredicate %relation
+ L0.HasObject _ : DOC.SCLValue
+ L0.HasValueType "String"
+ L0.SCLValue.expression %command
+ L0.default false
+
+DOC.SCL : L0.SCLModule
+ L0.SCLModule.definition _ : L0.String
+ @L0.loadString "scl/Code.scl"
+
+DOC.scl : L0.Template
+ @template %subject %property %expression %valueType
+ %subject
+ %property _ : DOC.SCLValue
+ L0.SCLValue.expression %expression
+ L0.HasValueType %valueType
+
+DOC.sclValue : L0.Template
+ @template %subject %expression %valueType
+ %subject : DOC.SCLValue
+ L0.SCLValue.expression %expression
+ L0.HasValueType %valueType
+
+DOC.SCLValue <T L0.SCLValue
+ @L0.assert L0.ConvertsToValueWith
+ DOC.Functions.sclValue : L0.ExternalValue
+
+/* Basic component types */
+COMPONENTS.Component <T STR.Component
+ >-- COMPONENTS.Component.manualOrdinal --> L0.Integer <R L0.HasProperty
+ @attribute PROPERTIES.input FUNCTIONS.input
+ @attribute PROPERTIES.session FUNCTIONS.session
+ @attribute PROPERTIES.state FUNCTIONS.state
+ @attribute PROPERTIES.icstate FUNCTIONS.icstate
+ @sclAttribute PROPERTIES.commands "commandList self"
+
+COMPONENTS.PrimitiveComponent <T COMPONENTS.Component
+
+COMPONENTS.ParentlessComponent <T COMPONENTS.PrimitiveComponent /* Component without a parent, e.g. Root, DialogBox */
+
+COMPONENTS.Composite <T STR.Composite <T COMPONENTS.Component
+
+COMPONENTS.DummyContainer <T COMPONENTS.Component /* Dummy single component container which is not instantiated */
+ @attribute PROPERTIES.exists true
+ @attribute PROPERTIES.pathExists FUNCTIONS.pathExists
+
+/* Root */
+COMPONENTS.Root <T COMPONENTS.ParentlessComponent
+ @connectionPoint RELATIONS.part1
+
+COMPONENTS.Event <T COMPONENTS.ParentlessComponent
+ @connectionPoint RELATIONS.event
+
+COMPONENTS.CommandEvent <T COMPONENTS.Event
+ @connectionPoint RELATIONS.data1
+ @sclAttribute PROPERTIES.dataDefinitions "dataDefinitions self"
+ @sclAttribute PROPERTIES.SCLFunction "emptyOnClick ()"
+
+DOC.commandEvent : L0.Template
+ @template %instance %expression %valueType
+ %instance : COMPONENTS.CommandEvent
+ PROPERTIES.SCLFunction _ : %valueType
+ L0.HasValueType "EventHandler"
+ L0.SCLValue.expression %expression
+
+COMPONENTS.DefVar <T COMPONENTS.ParentlessComponent
+ @connectionPoint RELATIONS.dataDefinition
+ @connectionPoint RELATIONS.dataIn
+ @attribute PROPERTIES.target ""
+ @attribute PROPERTIES.source ""
+
+COMPONENTS.DefVars <T COMPONENTS.ParentlessComponent
+ @connectionPoint RELATIONS.dataDefinition
+ @connectionPoint RELATIONS.dataIn
+ @attribute PROPERTIES.targets
+ [] : L0.StringArray
+ @attribute PROPERTIES.sources
+ [] : L0.StringArray