The best way to illustrate the relationship between CSN and OSN is through examples. Below are two type definitions, expressed in CSN, pertaining to towers, as defined in the National Topographic Database, 1:50 000 program. TowerFunctionType is an enumeration used as the domain for an attribute in Tower. Tower is defined as a subclass of Entity (in the NTDB50K schema), which itself is identified as a subclass of GeographicObject.
< Enumeration subclass: TowerFunctionType::NTDB50k values: clearance (1) communication (2) control (3) fire (4) lookout (5) comments: "A choice of tower functions." > < Entity::NTDB50k subclass: Tower::NTDB50k attributes: [towerFunction] TowerFunctionType::NTDB50k towerIdentifier Integer16 [heightOfTheTower] Integer16 defaults: heightOfTheTower:-1 restricted: position.geometry:^Point position.geometry*Coordinate:^Coordinate position.geometry:notNil position.spatialReferencing:notNil constraints: "Height only applies if higher than 30 metres. A height lower than 30 metres is represented by a value of zero. An unspecified height is indicated by a value of -1." comments: "A high structure built to provide clearance above the surrounding objects." >
A particular instance of class Tower would be expressed in OSN as follows:
Tower ( position: SpatialObject ( geometry: Point ( position: CoordXYZ ( x: 477377 y: 5360468 z: 150 ) ) // Note that the spatialReferencing should be specified in this example, as it is restricted // above to be notNil; however, in the interests of brevity, it is not provided here. ) towerFunction: control towerIdentifier: 40 )
The type definitions given earlier can themselves be described in OSN as instances of the SAIF classes TupleDefinition and EnumerationDefinition (both of which are subclasses of TypeDefinition). The definitions of TowerType and Tower are expressed in OSN below.
EnumerationDefinition ( class: TypeIdentifier ( typeName: TowerFunctionType schema: SchemaIdentifier ( schemaName: NTDB version: v.2.0 ) ) enumerates: List { EnumerationValueDef ( description: clearance value: 1 ) EnumerationValueDef ( description: communication value: 2 ) EnumerationValueDef ( description: control value: 3 ) EnumerationValueDef ( description: fire value: 4 ) EnumerationValueDef ( description: lookout value: 5 ) } comments: "A choice of tower functions" ) TupleDefinition ( type: TypeIdentifier ( typeName: Tower schema: SchemaIdentifier ( schemaName: NTDB version: v.2.0 ) ) superclass: TypeIdentifer ( typeName: GeographicObject ) attributes: List { SimpleAttributeDef ( attributeName: towerFunction attributeDomain: TypeIdentifer ( typeName: TowerFunctionType schema: SchemaIdentifier ( schemaName: NTDB version: v.2.0 ) ) optional: true ) SimpleAttributeDef ( attributeName: towerIdentifer attributeDomain: TypeIdentifer ( typeName: Integer16 ) optional: false ) SimpleAttributeDef ( attributeName: heightOfTheTower attributeDomain: TypeIdentifer ( typeName: Integer16 ) optional: true ) } defaults: List { RestrictedValue ( attributeName: heightOfTheTower attributeValue: -1 ) } restricted: List { RestrictedDomain ( attributePathName: position.geometry attributeDomain: TypeIdentifer ( typeName: Point ) ) RestrictedDomain ( attributePathName: position.geometry*Coordinate attributeDomain: TypeIdentifer ( typeName: Coordinate ) ) RestrictedOptionality ( attributePathName: position.geometry attributeOptionality: neverNil ) RestrictedOptionality ( attributePathName: position.spatialReferencing attributeOptionality: neverNil ) } constraints: "Height only applies if higher than 30 metres. A height lower than 30 metres is represented by a value of zero. An unspecified height is indicated by a value of -1. " comments: "A high structure built to provide clearance above the surrounding objects." )
As one can see, the OSN notation is much more verbose for class definitions than the equivalent CSN notation. The conversion between the two notations is mechanical, and could be done by appropriate software. For the purpose of encoding class definitions for archive or interchange, class definitions in CSN may be converted to TypeDefinition objects, if required by the encoding scheme. When decoded, these would be in OSN, and could be converted to CSN by software.