--- /dev/null
+L0 = <http://www.simantics.org/Layer0-1.1>
+STR = <http://www.simantics.org/Structural-1.2>
+SHEET = <http://www.simantics.org/Spreadsheet-1.2>
+DATATYPES = <http://www.simantics.org/Datatypes-1.1>
+SEL = <http://www.simantics.org/SelectionView-1.2>
+DATA = <http://www.simantics.org/Datatypes-1.1>
+
+FUNCTIONS = SHEET.Functions
+
+SHEET.Element <T L0.Entity
+ >-- SHEET.Element.immutable ==> "Boolean" <R L0.HasProperty : L0.FunctionalRelation
+
+SHEET.Range <T SHEET.Element
+ >-- SHEET.Range.location --> L0.String <R L0.HasProperty : L0.FunctionalRelation
+ >-- SHEET.Range.widthBound --> L0.Integer <R L0.HasProperty : L0.FunctionalRelation
+ >-- SHEET.Range.heightBound --> L0.Integer <R L0.HasProperty : L0.FunctionalRelation
+ @L0.assert SHEET.Range.location "A1"
+ @L0.assert SHEET.Range.widthBound -1
+ @L0.assert SHEET.Range.heightBound -1
+
+SHEET.Lines <T STR.Composite <T DATA.BTree
+ @L0.assert L0.domainChildren FUNCTIONS.spreadsheetLinesChildren
+
+SHEET.LineContent <T L0.Literal
+ @L0.assert L0.HasDataType ${
+ cells : { content : Variant, styleID : Integer }[]
+ }
+
+SHEET.Line <T STR.Component
+ >-- SHEET.Line.content --> SHEET.LineContent <R L0.HasProperty : L0.TotalFunction : STR.SynchronizedRelation
+ @L0.assert SHEET.Line.content FUNCTIONS.defaultLineCells
+
+SHEET.LineNode <T DATA.BTreeNode <T STR.Composite
+ >-- SHEET.LineNode.keys ==> "IntegerArray" <R L0.HasProperty : L0.TotalFunction : STR.SynchronizedRelation
+ @L0.assert SHEET.LineNode.keys FUNCTIONS.lineNodeKeys
+
+SHEET.Style <T SHEET.Cell <T STR.Component
+ >-- SHEET.Style.id --> L0.Integer <R L0.HasProperty : SHEET.Attribute : STR.SynchronizedRelation
+ >-- SHEET.Cell.border --> L0.Integer <R L0.HasProperty : SHEET.Attribute : STR.SynchronizedRelation
+ >-- SHEET.Cell.align --> L0.Integer <R L0.HasProperty : SHEET.Attribute : STR.SynchronizedRelation
+ >-- SHEET.Cell.locked --> L0.Boolean <R L0.HasProperty : SHEET.Attribute : STR.SynchronizedRelation
+ >-- SHEET.Cell.columnSpan --> L0.Integer <R L0.HasProperty : SHEET.Attribute : STR.SynchronizedRelation
+ >-- SHEET.Cell.rowSpan --> L0.Integer <R L0.HasProperty : SHEET.Attribute : STR.SynchronizedRelation
+ @L0.assert SHEET.Cell.border 0
+ @L0.assert SHEET.Cell.align 8
+ @L0.assert SHEET.Cell.locked false
+ @L0.assert SHEET.Cell.rowSpan 1
+ @L0.assert SHEET.Cell.columnSpan 1
+ >-- SHEET.Cell.background --> DATATYPES.RGB.Integer <R L0.HasProperty : SHEET.Attribute : STR.SynchronizedRelation
+ >-- SHEET.Cell.foreground --> DATATYPES.RGB.Integer <R L0.HasProperty : SHEET.Attribute : STR.SynchronizedRelation
+ >-- SHEET.Cell.font --> DATATYPES.Font <R L0.HasProperty : SHEET.Attribute : STR.SynchronizedRelation
+ >-- SHEET.Cell.formatString --> L0.String <R L0.HasProperty : SHEET.Attribute : STR.SynchronizedRelation
+ >-- SHEET.Cell.formatIndex --> L0.Integer <R L0.HasProperty : SHEET.Attribute : STR.SynchronizedRelation
+
+SHEET.session <R L0.HasProperty : L0.FunctionalRelation
+ ==> "Variable"
+
+SHEET.Cell <T SHEET.Element
+ @L0.assert L0.HasLabel
+ _ : L0.Value
+ L0.ConvertsToValueWith FUNCTIONS.cellLabel : L0.ExternalValue
+ L0.HasValueType "String"
+ >-- SHEET.Cell.label --> L0.String <R L0.HasProperty : SHEET.Attribute
+ >-- SHEET.Cell.content --> L0.Value <R L0.HasProperty : SHEET.Attribute
+ ==> "Variant"
+ L0.HasDefaultLiteralType L0.Variant
+ L0.valueAccessor FUNCTIONS.contentValueAccessor
+ SEL.HasDisplayValue
+ _ : L0.Value
+ SEL.HasDisplayColumn "HasDisplayValue"
+ L0.HasValueType "String"
+ L0.valueAccessor FUNCTIONS.contentDisplayValueAccessor
+ @L0.assert SHEET.session FUNCTIONS.spreadsheetSession
+ @L0.assert STR.input FUNCTIONS.spreadsheetInput
+ >-- SHEET.Cell.HasStyle --> SHEET.Style <R L0.DependsOn : L0.FunctionalRelation
+ L0.InverseOf SHEET.Cell.StyleOf
+ >-- SHEET.Cell.style --> L0.Value <R L0.HasProperty : SHEET.Attribute
+ //@L0.assert APROS.AprosModule.hasType
+ // APROS.Functions.moduleTypeName : L0.Function
+ // L0.HasValueType "String"
+ >-- SHEET.Cell.editable --> L0.Value <R L0.HasProperty : SHEET.Attribute
+
+SHEET.Headers <T SHEET.Cell
+ >-- SHEET.Headers.rowHeights --> L0.IntegerArray <R L0.HasProperty : SHEET.Attribute
+ >-- SHEET.Headers.rowLabels --> L0.StringArray <R L0.HasProperty : SHEET.Attribute
+ >-- SHEET.Headers.columnWidths --> L0.IntegerArray <R L0.HasProperty : SHEET.Attribute
+ >-- SHEET.Headers.columnLabels --> L0.StringArray <R L0.HasProperty : SHEET.Attribute
+ @L0.assert SHEET.cellEditor FUNCTIONS.variableCellEditor
+ @L0.assert SHEET.Headers.columnWidths
+ [] : L0.IntegerArray
+ @L0.assert SHEET.Headers.rowHeights
+ [] : L0.IntegerArray
+
+SHEET.Dimensions <T SHEET.Cell
+ >-- SHEET.Dimensions.fitColumns --> L0.Boolean <R L0.HasProperty : SHEET.Attribute
+ >-- SHEET.Dimensions.fitRows --> L0.Boolean <R L0.HasProperty : SHEET.Attribute
+ >-- SHEET.Dimensions.rowCount --> L0.Integer <R L0.HasProperty : SHEET.Attribute
+ >-- SHEET.Dimensions.columnCount --> L0.Integer <R L0.HasProperty : SHEET.Attribute
+ @L0.assert SHEET.cellEditor FUNCTIONS.variableCellEditor
+
+SHEET.ExpressionRange <T SHEET.Range
+ >-- SHEET.ExpressionRange.cells ==> "[TableCell]" <R L0.HasProperty : L0.FunctionalRelation
+ @L0.assert L0.domainChildren FUNCTIONS.queryRangeChildren
+
+SHEET.StringArrayRange <T SHEET.Range
+ >-- SHEET.StringArrayRange.array --> L0.StringArray <R L0.HasProperty : L0.FunctionalRelation
+ @L0.assert L0.domainChildren FUNCTIONS.stringArrayChildren
+ @L0.assert SHEET.Element.immutable true
+
+SHEET.DoubleArrayRange <T SHEET.Range
+ >-- SHEET.DoubleArrayRange.array --> L0.StringArray <R L0.HasProperty : L0.FunctionalRelation
+ @L0.assert L0.domainChildren FUNCTIONS.doubleArrayChildren
+ @L0.assert SHEET.Element.immutable true
+
+SHEET.TextCell <T SHEET.Cell
+ @L0.assert SHEET.cellEditor FUNCTIONS.textCellEditor
+ @L0.assert SHEET.Cell.content
+ ("" : String) : L0.Variant
+
+SHEET.ExcelCell <T SHEET.Cell
+ @L0.assert SHEET.cellEditor FUNCTIONS.textCellEditor
+
+
\ No newline at end of file