Skip to content

Commit 6555919

Browse files
committed
update tutorials
Signed-off-by: Stefan Bischof <[email protected]>
1 parent 705c555 commit 6555919

File tree

71 files changed

+442
-442
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+442
-442
lines changed

docs/cubeserver/tutorial/complex.school.md

Lines changed: 68 additions & 68 deletions
Large diffs are not rendered by default.

docs/cubeserver/tutorial/index.md

Lines changed: 69 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -15,146 +15,146 @@ A recommended reading order is provided below to help you build your understandi
1515

1616

1717

18-
[Database - Intro](./tutorial.database.intro.md)
18+
[Daanse Tutorial - Database Intro](./tutorial.database.intro.md)
1919

20-
[Database - ColumnTypes](./tutorial.database.column.md)
20+
[Daanse Tutorial - Database Column](./tutorial.database.column.md)
2121

22-
[Database - SQL Expression Column](./tutorial.database.expressioncolumn.md)
22+
[Daanse Tutorial - Database Expression Column](./tutorial.database.expressioncolumn.md)
2323

24-
[Database - Schema](./tutorial.database.schema.md)
24+
[Daanse Tutorial - Database Schema](./tutorial.database.schema.md)
2525

26-
[Database - Table](./tutorial.database.table.md)
26+
[Daanse Tutorial - Database Table](./tutorial.database.table.md)
2727

28-
[Database - SqlView](./tutorial.database.sqlview.md)
28+
[Daanse Tutorial - Database SQL View](./tutorial.database.sqlview.md)
2929

30-
[Database - InlineTable](./tutorial.database.inlinetable.md)
30+
[Daanse Tutorial - Database Inline Table](./tutorial.database.inlinetable.md)
3131

32-
[Cube - Minimal](./tutorial.cube.minimal.md)
32+
[Daanse Tutorial - Cube Minimal](./tutorial.cube.minimal.md)
3333

34-
[Minimal Cube with DrillThroughAction](./tutorial.action.drillthrough.md)
34+
[Daanse Tutorial - Action Drillthrough](./tutorial.action.drillthrough.md)
3535

36-
[Minimal Cube With Measures CellFormatter](./tutorial.formatter.cell.md)
36+
[Daanse Tutorial - Formatter Cell](./tutorial.formatter.cell.md)
3737

38-
[Minimal Cube With SQLExpressionColumn](./tutorial.measure.expression.md)
38+
[Daanse Tutorial - Measure Expression](./tutorial.measure.expression.md)
3939

40-
[Cube with one measure with inline table](./tutorial.measure.inlinetable.md)
40+
[Daanse Tutorial - Measure Inline Table](./tutorial.measure.inlinetable.md)
4141

42-
[Cube with One Measure with Inline Table and with Levels with physical and inline tables](./tutorial.measure.inlinetablewithphysical.md)
42+
[Daanse Tutorial - Measure Inline Table With Physical](./tutorial.measure.inlinetablewithphysical.md)
4343

44-
[Minimal Cube with level with expressions](./tutorial.level.expressions.md)
44+
[Daanse Tutorial - Level Expressions](./tutorial.level.expressions.md)
4545

46-
[Minimal Cube with level with smallInt boolan type](./tutorial.level.smallintasbooleantype.md)
46+
[Daanse Tutorial - Level Small Int As Boolean Type](./tutorial.level.smallintasbooleantype.md)
4747

48-
[Minimal Cube Hidden Members with IfParentsName](./tutorial.level.ifparentsname.md)
48+
[Daanse Tutorial - Level If Parents Name](./tutorial.level.ifparentsname.md)
4949

50-
[Minimal Cube with Hidden Members with IfBlankName with multiple levels](./tutorial.level.ifblanknamemultiple.md)
50+
[Daanse Tutorial - Level If Blank Name Multiple](./tutorial.level.ifblanknamemultiple.md)
5151

52-
[Minimal Cube with Hidden Members with IfBlankName](./tutorial.level.ifblankname.md)
52+
[Daanse Tutorial - Level If Blank Name](./tutorial.level.ifblankname.md)
5353

54-
[Minimal Virtual Cubes With Measures](./tutorial.virtualcube.min.md)
54+
[Daanse Tutorial - Virtual Cube Minimal](./tutorial.virtualcube.min.md)
5555

56-
[Cube with virtual cube with dimension references from other cubes](./tutorial.virtualcube.dimensions.md)
56+
[Daanse Tutorial - Virtual Cube Dimensions](./tutorial.virtualcube.dimensions.md)
5757

58-
[Cube with virtual cube with calculatedMember](./tutorial.virtualcube.calculatedmember.md)
58+
[Daanse Tutorial - Virtual Cube Calculated Member](./tutorial.virtualcube.calculatedmember.md)
5959

60-
[Cube with virtual cube with un visible reference cubes](./tutorial.virtualcube.unvisiblereferencecubes.md)
60+
[Daanse Tutorial - Virtual Cube Unvisible Reference Cubes](./tutorial.virtualcube.unvisiblereferencecubes.md)
6161

62-
[Cube with dimension with hierarchy with inner table](./tutorial.hierarchy.inlinetable.md)
62+
[Daanse Tutorial - Hierarchy Inline Table](./tutorial.hierarchy.inlinetable.md)
6363

64-
[Cube with dimension with hierarchy with SQL view reference](./tutorial.hierarchy.view.md)
64+
[Daanse Tutorial - Hierarchy View](./tutorial.hierarchy.view.md)
6565

66-
[Minimal Cube with hierarchy with functional dependency optimizations](./tutorial.hierarchy.uniquekeylevelname.md)
66+
[Daanse Tutorial - Hierarchy Unique Key Level Name](./tutorial.hierarchy.uniquekeylevelname.md)
6767

68-
[Minimal Parent Child Hierarchy](./tutorial.parentchild.minimal.md)
68+
[Daanse Tutorial - Parent Child Minimal](./tutorial.parentchild.minimal.md)
6969

70-
[Minimal Cube with Parent Child Hierarchy with null parent value.](./tutorial.parentchild.nullparent.md)
70+
[Daanse Tutorial - Parent Child Null Parent](./tutorial.parentchild.nullparent.md)
7171

72-
[Minimal Cube with ParentChildHierarchy with ParentChildLink](./tutorial.parentchild.link.md)
72+
[Daanse Tutorial - Parent Child Link](./tutorial.parentchild.link.md)
7373

74-
[Minimal Cube with Parent Child Hierarchy with parentAsLeafEnable.](./tutorial.parentchild.parentasleaf.md)
74+
[Daanse Tutorial - Parent Child Parent As Leaf](./tutorial.parentchild.parentasleaf.md)
7575

76-
[Measure - Basic Aggregators](./tutorial.cube.measure.aggregator.base.md)
76+
[Daanse Tutorial - Cube Measure Aggregator Base](./tutorial.cube.measure.aggregator.base.md)
7777

78-
[Measure - Multiple Measures](./tutorial.cube.measure.multiple.md)
78+
[Daanse Tutorial - Cube Measure Multiple](./tutorial.cube.measure.multiple.md)
7979

80-
[Measure - Datatypes](./tutorial.cube.measure.datatype.md)
80+
[Daanse Tutorial - Cube Measure Datatype](./tutorial.cube.measure.datatype.md)
8181

82-
[Measure - Formats](./tutorial.cube.measure.format.md)
82+
[Daanse Tutorial - Cube Measure Format](./tutorial.cube.measure.format.md)
8383

84-
[Measure - MeasureGroups](./tutorial.cube.measure.group.md)
84+
[Daanse Tutorial - Cube Measure Group](./tutorial.cube.measure.group.md)
8585

86-
[Measure - Bit Aggragators](./tutorial.cube.measure.aggregator.bit.md)
86+
[Daanse Tutorial - Cube Measure Aggregator Bit](./tutorial.cube.measure.aggregator.bit.md)
8787

88-
[Measure - Percentile Aggragator](./tutorial.cube.measure.aggregator.percentile.md)
88+
[Daanse Tutorial - Cube Measure Aggregator Percentile](./tutorial.cube.measure.aggregator.percentile.md)
8989

90-
[Measure - NTH value Aggragator](./tutorial.cube.measure.aggregator.nth.md)
90+
[Daanse Tutorial - Cube Measure Aggregator Nth](./tutorial.cube.measure.aggregator.nth.md)
9191

92-
[Measure - Text Aggregator](./tutorial.cube.measure.aggregator.textagg.md)
92+
[Daanse Tutorial - Cube Measure Aggregator Text Agg](./tutorial.cube.measure.aggregator.textagg.md)
9393

94-
[Dimension - Introduction](./tutorial.cube.dimension.intro.md)
94+
[Daanse Tutorial - Cube Dimension Intro](./tutorial.cube.dimension.intro.md)
9595

96-
[Hierarchy - Query - seperate Tables, Fact and Dimension](./tutorial.cube.hierarchy.query.table.base.md)
96+
[Daanse Tutorial - Cube Hierarchy Query Table Base](./tutorial.cube.hierarchy.query.table.base.md)
9797

98-
[Hierarchy - Query - 1 Table, 2 Levels](./tutorial.cube.hierarchy.query.table.multilevel.multitable.md)
98+
[Daanse Tutorial - Cube Hierarchy Query Table Multilevel Multitable](./tutorial.cube.hierarchy.query.table.multilevel.multitable.md)
9999

100-
[Hierarchy - Query - all in 1 Table](./tutorial.cube.hierarchy.query.table.multilevel.singletable.md)
100+
[Daanse Tutorial - Cube Hierarchy Query Table Multilevel Singletable](./tutorial.cube.hierarchy.query.table.multilevel.singletable.md)
101101

102-
[Hierarchy - Query - 1 Join](./tutorial.cube.hierarchy.query.join.base.md)
102+
[Daanse Tutorial - Cube Hierarchy Query Join Base](./tutorial.cube.hierarchy.query.join.base.md)
103103

104-
[Hierarchy - Query - 2 Joins, 3 Levels](./tutorial.cube.hierarchy.query.join.multi.md)
104+
[Daanse Tutorial - Cube Hierarchy Query Join Multi](./tutorial.cube.hierarchy.query.join.multi.md)
105105

106-
[Hierarchy - HasAll-Level](./tutorial.cube.hierarchy.hasall.md)
106+
[Daanse Tutorial - Cube Hierarchy Has All](./tutorial.cube.hierarchy.hasall.md)
107107

108-
[Level - MemberProperties Intro](./tutorial.cube.level.member.property.intro.md)
108+
[Daanse Tutorial - Cube Level Member Property Intro](./tutorial.cube.level.member.property.intro.md)
109109

110-
[Cube - logic functions](./tutorial.function.logic.md)
110+
[Daanse Tutorial - Function Logic](./tutorial.function.logic.md)
111111

112-
[Cube - CalculatedMembers Intro](./tutorial.cube.calculatedmember.intro.md)
112+
[Daanse Tutorial - Cube Calculated Member Intro](./tutorial.cube.calculatedmember.intro.md)
113113

114-
[Cube - CalculatedMembers with different colors](./tutorial.cube.calculatedmember.color.md)
114+
[Daanse Tutorial - Cube Calculated Member Color](./tutorial.cube.calculatedmember.color.md)
115115

116-
[Cube with roles access database schema](./tutorial.access.databaseschemagrand.md)
116+
[Daanse Tutorial - Access Database Schema Grant](./tutorial.access.databaseschemagrand.md)
117117

118-
[Cube with roles access table](./tutorial.access.tablegrand.md)
118+
[Daanse Tutorial - Access Table Grant](./tutorial.access.tablegrand.md)
119119

120-
[Cube with roles access column](./tutorial.access.columngrand.md)
120+
[Daanse Tutorial - Access Column Grant](./tutorial.access.columngrand.md)
121121

122-
[Cube with roles access catalog](./tutorial.access.cataloggrand.md)
122+
[Daanse Tutorial - Access Catalog Grant](./tutorial.access.cataloggrand.md)
123123

124-
[Cube with role CubeGrant](./tutorial.access.cubegrand.md)
124+
[Daanse Tutorial - Access Cube Grant](./tutorial.access.cubegrand.md)
125125

126-
[Cube with role access DimensionGrant](./tutorial.access.dimensiongrand.md)
126+
[Daanse Tutorial - Access Dimension Grant](./tutorial.access.dimensiongrand.md)
127127

128-
[Cube with HierarchyGrant](./tutorial.access.hierarchygrand.md)
128+
[Daanse Tutorial - Access Hierarchy Grant](./tutorial.access.hierarchygrand.md)
129129

130-
[Cube with access all dimension_cube1 access to A only](./tutorial.access.membergrand.md)
130+
[Daanse Tutorial - Access Member Grant](./tutorial.access.membergrand.md)
131131

132-
[Catalog with cube with different member identifiers](./tutorial.member.identifier.md)
132+
[Daanse Tutorial - Member Identifier](./tutorial.member.identifier.md)
133133

134-
[Kpi - Introduction](./tutorial.kpi.intro.md)
134+
[Daanse Tutorial - KPI Intro](./tutorial.kpi.intro.md)
135135

136-
[Minimal Cube with KPI with all properties](./tutorial.kpi.all.md)
136+
[Daanse Tutorial - KPI All](./tutorial.kpi.all.md)
137137

138-
[Kpi - parent ring](./tutorial.kpi.parent.ring.md)
138+
[Daanse Tutorial - KPI Parent Ring](./tutorial.kpi.parent.ring.md)
139139

140-
[Cube with virtual cube with kpi](./tutorial.kpi.virtualcube.md)
140+
[Daanse Tutorial - KPI Virtual Cube](./tutorial.kpi.virtualcube.md)
141141

142-
[Cube with NamedSets](./tutorial.namedset.md)
142+
[Daanse Tutorial - Namedset All](./tutorial.namedset.md)
143143

144-
[Cube with table reference with AggExclude](./tutorial.aggregation.aggexclude.md)
144+
[Daanse Tutorial - Aggregation Agg Exclude](./tutorial.aggregation.aggexclude.md)
145145

146-
[Cube with aggregate tables](./tutorial.aggregation.aggregatetables.md)
146+
[Daanse Tutorial - Aggregation Aggregate Tables](./tutorial.aggregation.aggregatetables.md)
147147

148-
[Minimal Cube with Time_Dimension](./tutorial.dimension.timedimension.md)
148+
[Daanse Tutorial - Dimension Time Dimension](./tutorial.dimension.timedimension.md)
149149

150-
[Minimal Cube with cube with two dimension connectors with level attribute](./tutorial.dimension.optimisationwithlevelattribute.md)
150+
[Daanse Tutorial - Dimension Optimisation With Level Attribute](./tutorial.dimension.optimisationwithlevelattribute.md)
151151

152-
[Schulwesen](./complex.school.md)
152+
[Daanse Example - Schulwesen](./complex.school.md)
153153

154154
[Writeback_without_dimension](./tutorial.writebackwithoutdimension.md)
155155

156156
[tutorial_for_writeback_with_fact_view](./tutorial.writebackview.md)
157157

158158
[tutorial_for_writeback](./tutorial.writebacktable.md)
159159

160-
[tutorial_for_writeback_with_fact_InlineTable](./tutorial.writebackinlinetable.md)
160+
[tutorial_for_writeback_with_fact_InlineTable](./tutorial.writebackinlinetable.md)

docs/cubeserver/tutorial/tutorial.access.cataloggrand.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
---
2-
title: Cube with roles access catalog
2+
title: Daanse Tutorial - Access Catalog Grant
33
group: Access
44
kind: TUTORIAL
55
number: 2.4.4
66
---
7-
Cube with with CatalogGrant.
7+
# Cube1
8+
9+
Cube with with CatalogGrant.
810
roleAll role : use CatalogGrant access all; (access cube1)
911
roleNone role : use CatalogGrant access none; (no access cube1)
1012
roleAllDimWithCubeGrand role : use CatalogGrant access all_dimensions; CubeGrant cube1 access all; cube2 access none (access cube1)
@@ -153,7 +155,7 @@ This files represent the complete definition of the catalog.
153155
<?xml version="1.0" encoding="UTF-8"?>
154156
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:roma="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping">
155157
<roma:ExplicitHierarchy id="_hierarchy_main" name="Hierarchy1" hasAll="false" primaryKey="_column_fact_key" query="_query_fact" levels="_level_key"/>
156-
<roma:Catalog description="Schema with roles access catalog" name="Cube with roles access catalog" cubes="_cube_main" accessRoles="_accessRole_all _accessRole_none _accessRole_allDimWithCubeGrand _accessRole_allDimWithoutCubeGrand" dbschemas="_databaseSchema_CatalogGrand"/>
158+
<roma:Catalog description="Demonstrates access control with catalog grants and roles" name="Daanse Tutorial - Access Catalog Grant" cubes="_cube_main" accessRoles="_accessRole_all _accessRole_none _accessRole_allDimWithCubeGrand _accessRole_allDimWithoutCubeGrand" dbschemas="_databaseSchema_CatalogGrand"/>
157159
<roma:DatabaseSchema id="_databaseSchema_CatalogGrand">
158160
<tables xsi:type="roma:PhysicalTable" id="_table_fact" name="Fact">
159161
<columns xsi:type="roma:PhysicalColumn" id="_column_fact_key" name="KEY"/>
@@ -170,21 +172,21 @@ This files represent the complete definition of the catalog.
170172
<measures xsi:type="roma:SumMeasure" id="_measure_sum" name="Measure1" column="_column_fact_value"/>
171173
</measureGroups>
172174
</roma:PhysicalCube>
175+
<roma:AccessRole id="_accessRole_none" name="roleNone">
176+
<accessCatalogGrants/>
177+
</roma:AccessRole>
173178
<roma:AccessRole id="_accessRole_allDimWithoutCubeGrand" name="roleAllDimWithoutCubeGrand">
174179
<accessCatalogGrants catalogAccess="all_dimensions">
175180
<databaseSchemaGrants databaseSchemaAccess="all" databaseSchema="_databaseSchema_CatalogGrand"/>
176181
</accessCatalogGrants>
177182
</roma:AccessRole>
178-
<roma:AccessRole id="_accessRole_all" name="roleAll">
179-
<accessCatalogGrants catalogAccess="all"/>
180-
</roma:AccessRole>
181183
<roma:AccessRole id="_accessRole_allDimWithCubeGrand" name="roleAllDimWithCubeGrand">
182184
<accessCatalogGrants catalogAccess="all_dimensions">
183185
<cubeGrants cubeAccess="all" cube="_cube_main"/>
184186
</accessCatalogGrants>
185187
</roma:AccessRole>
186-
<roma:AccessRole id="_accessRole_none" name="roleNone">
187-
<accessCatalogGrants/>
188+
<roma:AccessRole id="_accessRole_all" name="roleAll">
189+
<accessCatalogGrants catalogAccess="all"/>
188190
</roma:AccessRole>
189191
</xmi:XMI>
190192

docs/cubeserver/tutorial/tutorial.access.columngrand.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
---
2-
title: Cube with roles access column
2+
title: Daanse Tutorial - Access Column Grant
33
group: Access
44
kind: TUTORIAL
55
number: 2.4.3
66
---
7-
Cube with examples of roles with TableGrant
7+
Cube with examples of roles with TableGrant
88
roleAll role: use TableGrant access all; (access all database all tables)
99
roleNone role: use TableGrant access none; (no access to database tables)
1010
roleCustom role: use TableGrant access custom; (access to database table Fact)
@@ -104,7 +104,7 @@ This files represent the complete definition of the catalog.
104104
```xml
105105
<?xml version="1.0" encoding="UTF-8"?>
106106
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:roma="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping">
107-
<roma:Catalog description="Schema with roles access column" name="Cube with roles access column" cubes="_cube_main" accessRoles="_accessRole_all _accessRole_none" dbschemas="_databaseSchema_ColumnGrand"/>
107+
<roma:Catalog description="Demonstrates access control with column-level grants" name="Daanse Tutorial - Access Column Grant" cubes="_cube_main" accessRoles="_accessRole_all _accessRole_none" dbschemas="_databaseSchema_ColumnGrand"/>
108108
<roma:DatabaseSchema id="_databaseSchema_ColumnGrand">
109109
<tables xsi:type="roma:PhysicalTable" id="_table_fact" name="Fact">
110110
<columns xsi:type="roma:PhysicalColumn" id="_column_fact_key" name="KEY"/>
@@ -117,23 +117,23 @@ This files represent the complete definition of the catalog.
117117
<measures xsi:type="roma:SumMeasure" id="_measure_sum" name="Measure1" column="_column_fact_value"/>
118118
</measureGroups>
119119
</roma:PhysicalCube>
120-
<roma:AccessRole id="_accessRole_all" name="roleAll">
120+
<roma:AccessRole id="_accessRole_none" name="roleNone">
121121
<accessCatalogGrants catalogAccess="all">
122122
<cubeGrants cubeAccess="all" cube="_cube_main"/>
123123
<databaseSchemaGrants databaseSchemaAccess="custom" databaseSchema="_databaseSchema_ColumnGrand">
124124
<tableGrants tableAccess="custom" table="_table_fact">
125-
<columnGrants columnAccess="all" column="_column_fact_value"/>
126-
<columnGrants columnAccess="all" column="_column_fact_key"/>
125+
<columnGrants column="_column_fact_value"/>
127126
</tableGrants>
128127
</databaseSchemaGrants>
129128
</accessCatalogGrants>
130129
</roma:AccessRole>
131-
<roma:AccessRole id="_accessRole_none" name="roleNone">
130+
<roma:AccessRole id="_accessRole_all" name="roleAll">
132131
<accessCatalogGrants catalogAccess="all">
133132
<cubeGrants cubeAccess="all" cube="_cube_main"/>
134133
<databaseSchemaGrants databaseSchemaAccess="custom" databaseSchema="_databaseSchema_ColumnGrand">
135134
<tableGrants tableAccess="custom" table="_table_fact">
136-
<columnGrants column="_column_fact_value"/>
135+
<columnGrants columnAccess="all" column="_column_fact_value"/>
136+
<columnGrants columnAccess="all" column="_column_fact_key"/>
137137
</tableGrants>
138138
</databaseSchemaGrants>
139139
</accessCatalogGrants>

docs/cubeserver/tutorial/tutorial.access.cubegrand.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Cube with role CubeGrant
2+
title: Daanse Tutorial - Access Cube Grant
33
group: Access
44
kind: TUTORIAL
55
number: 2.4.5
@@ -126,7 +126,7 @@ This files represent the complete definition of the catalog.
126126
<?xml version="1.0" encoding="UTF-8"?>
127127
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:roma="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping">
128128
<roma:ExplicitHierarchy id="_hierarchy_Hierarchy1" name="Hierarchy1" hasAll="false" primaryKey="_column_fact_key" query="_query_factQuery" levels="_level_Level1"/>
129-
<roma:Catalog description="Schema with CubeGrant with cube1 access only" name="Cube with role CubeGrant" cubes="_cube_Cube1 _cube_Cube2" accessRoles="_accessRole_role1" dbschemas="_databaseSchema_CubeGrand"/>
129+
<roma:Catalog description="Access control with cube-level grants" name="Daanse Tutorial - Access Cube Grant" cubes="_cube_Cube1 _cube_Cube2" accessRoles="_accessRole_role1" dbschemas="_databaseSchema_CubeGrand"/>
130130
<roma:DatabaseSchema id="_databaseSchema_CubeGrand">
131131
<tables xsi:type="roma:PhysicalTable" id="_table_fact" name="Fact">
132132
<columns xsi:type="roma:PhysicalColumn" id="_column_fact_key" name="KEY"/>

0 commit comments

Comments
 (0)