Source : ISO 10303-46
SCHEMA presentation_organization_schema;
         REFERENCE FROM 
         geometry_schema   -- ISO 10303-42
  (axis2_placement,
           
         axis2_placement_2d,
           
         axis2_placement_3d,
           
         cartesian_point,
           
         curve,
           
         direction,
           
         dot_product,
           
         geometric_representation_context,
           
         geometric_representation_item,
           
         placement,
           
         plane);
         
         REFERENCE FROM 
         measure_schema   -- ISO 10303-41
  (length_measure,
           
         positive_ratio_measure,
           
         positive_plane_angle_measure);
         
         REFERENCE FROM 
         presentation_appearance_schema   -- ISO 10303-46
  (styled_item);
         
         REFERENCE FROM 
         presentation_definition_schema   -- ISO 10303-46
  (annotation_occurrence,
           
         symbol_representation,
           
         symbol_representation_relationship);
         
         REFERENCE FROM 
         presentation_resource_schema   -- ISO 10303-46
  (colour,
           
         planar_box,
           
         planar_extent,
           
         presentation_scaled_placement);
         
         REFERENCE FROM 
         representation_schema   -- ISO 10303-43
  (founded_item,
           
         item_defined_transformation,
           
         item_in_context,
           
         mapped_item,
           
         representation,
           
         representation_item,
           
         representation_map,
           
         representation_relationship,
           
         representation_relationship_with_transformation,
           
         using_representations);
         
         REFERENCE FROM 
         support_resource_schema   -- ISO 10303-41
  (bag_to_set,
           
         identifier,
           
         label,
           
         text);
         
TYPE annotation_representation_select =
         
         EXTENSIBLE
         
         
         SELECT
            (area_dependent_annotation_representation, 
    presentation_area, 
    presentation_view, 
    symbol_representation, 
    view_dependent_annotation_representation);
         END_TYPE; 
         
TYPE area_dependent_annotation_representation_item =
         
         
         SELECT
            (annotation_occurrence, 
    axis2_placement);
         END_TYPE; 
         
TYPE area_or_view =
         
         
         SELECT
            (presentation_area, 
    presentation_view);
         END_TYPE; 
         
TYPE camera_model_d3_multi_clipping_intersection_select =
         
         
         SELECT
            (camera_model_d3_multi_clipping_union, 
    plane);
         END_TYPE; 
         
TYPE camera_model_d3_multi_clipping_union_select =
         
         
         SELECT
            (camera_model_d3_multi_clipping_intersection, 
    plane);
         END_TYPE; 
         
TYPE central_or_parallel =
         
         ENUMERATION
         
         OF
         
            
         (central,
    parallel);
         END_TYPE; 
         
TYPE layered_item =
         
         
         SELECT
            (presentation_representation, 
    representation_item);
         END_TYPE; 
         
TYPE presentation_representation_select =
         
         
         SELECT
            (presentation_representation, 
    presentation_set);
         END_TYPE; 
         
TYPE presentation_size_assignment_select =
         
         
         SELECT
            (presentation_view, 
    presentation_area, 
    area_in_set);
         END_TYPE; 
         
TYPE product_data_representation_view_item =
         
         
         SELECT
            (camera_image, 
    axis2_placement);
         END_TYPE; 
         
TYPE view_dependent_annotation_representation_item =
         
         
         SELECT
            (annotation_occurrence, 
    axis2_placement);
         END_TYPE; 
         
ENTITY area_dependent_annotation_representation
           SUBTYPE OF (presentation_representation);
           SELF\representation.items : SET[1:?] OF area_dependent_annotation_representation_item;
WHERE
           WR1: SIZEOF (QUERY (item <* SELF\representation.items |
            ('PRESENTATION_DEFINITION_SCHEMA.ANNOTATION_OCCURRENCE' IN
            TYPEOF (item))
            )) >= 1;
           WR2: (SIZEOF (QUERY (prr <* USEDIN (SELF, 'REPRESENTATION_SCHEMA.' +
            'REPRESENTATION_RELATIONSHIP.REP_2') |
            'PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_AREA' IN
            TYPEOF (prr\representation_relationship.rep_1))) > 0)
            OR
            (SIZEOF(QUERY( rm <* USEDIN(SELF, 'REPRESENTATION_SCHEMA.'+
            'REPRESENTATION_MAP.'+
            'MAPPED_REPRESENTATION') |
            SIZEOF(QUERY( mi <* USEDIN(rm, 'REPRESENTATION_SCHEMA.'+
            'MAPPED_ITEM.'+
            'MAPPING_SOURCE') |
            SIZEOF(QUERY( rep <* using_representations (mi) |
            'PRESENTATION_ORGANIZATION_SCHEMA.'+
            'PRESENTATION_AREA' IN
            TYPEOF (rep))) > 0
            )) > 0))
            > 0);
           WR3: (SIZEOF (QUERY (prr <* USEDIN (SELF, 'REPRESENTATION_SCHEMA.' +
            'REPRESENTATION_RELATIONSHIP.REP_2') |
            NOT('PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_AREA' IN
            TYPEOF (prr\representation_relationship.rep_1)))) = 0)
            AND
            (SIZEOF(QUERY( rm <* USEDIN(SELF, 'REPRESENTATION_SCHEMA.'+
            'REPRESENTATION_MAP.'+
            'MAPPED_REPRESENTATION') |
            SIZEOF(QUERY( mi <* USEDIN(rm, 'REPRESENTATION_SCHEMA.'+
            'MAPPED_ITEM.'+
            'MAPPING_SOURCE') |
            SIZEOF(QUERY( rep <* using_representations (mi) |
            NOT('PRESENTATION_ORGANIZATION_SCHEMA.'+
            'PRESENTATION_AREA' IN
            TYPEOF (rep)))) > 0
            )) > 0))
            = 0);
         
         END_ENTITY;
ENTITY area_in_set;
           area : presentation_area;
           in_set : presentation_set;
         
         END_ENTITY;
ENTITY background_colour
           SUBTYPE OF (colour);
           presentation : area_or_view;
UNIQUE
           UR1: presentation;
         
         END_ENTITY;
ENTITY camera_image
           SUPERTYPE OF 
         (ONEOF (camera_image_2d_with_scale,
                       camera_image_3d_with_scale))
           SUBTYPE OF (mapped_item);
           SELF\mapped_item.mapping_source : camera_usage;
           SELF\mapped_item.mapping_target : planar_box;
WHERE
           WR1: 'GEOMETRY_SCHEMA.GEOMETRIC_REPRESENTATION_ITEM'
            IN TYPEOF (SELF);
         
         END_ENTITY;
ENTITY camera_image_2d_with_scale
           SUBTYPE OF (camera_image);
DERIVE
           scale : positive_ratio_measure := (SELF\mapped_item.mapping_target\planar_extent.size_in_x)/
         (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d2.view_window\planar_extent.size_in_x);
WHERE
           WR1: ('PRESENTATION_ORGANIZATION_SCHEMA.CAMERA_MODEL_D2' IN TYPEOF(SELF\mapped_item.mapping_source.mapping_origin));
           WR2: aspect_ratio (SELF\mapped_item.mapping_target) = aspect_ratio (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d2.view_window);
           WR3: SELF\mapped_item.mapping_source.mapping_origin\camera_model_d2.view_window_clipping;
         
         END_ENTITY;
ENTITY camera_image_3d_with_scale
           SUBTYPE OF (camera_image);
DERIVE
           scale : positive_ratio_measure := ((SELF\mapped_item.mapping_target\
         planar_extent.size_in_x) / (SELF\mapped_item.mapping_source.
         mapping_origin\camera_model_d3.perspective_of_volume.view_window.
         size_in_x));
WHERE
           WR1: ('PRESENTATION_ORGANIZATION_SCHEMA.CAMERA_MODEL_D3'
            IN TYPEOF (SELF\mapped_item.mapping_source.mapping_origin));
           WR2: aspect_ratio(SELF\mapped_item.mapping_target) =
            aspect_ratio(SELF\mapped_item.mapping_source.mapping_origin\
            camera_model_d3.perspective_of_volume.view_window);
           WR3: SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.
            perspective_of_volume.front_plane_clipping
            AND
            SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.
            perspective_of_volume.view_volume_sides_clipping;
           WR4: (SELF\mapped_item.mapping_target\planar_extent.size_in_x > 0)
            AND
            (SELF\mapped_item.mapping_target\planar_extent.size_in_y > 0);
           WR5: (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.
            perspective_of_volume.view_window.size_in_x > 0)
            AND
            (SELF\mapped_item.mapping_source.mapping_origin\camera_model_d3.
            perspective_of_volume.view_window.size_in_y > 0);
           WR6: ('GEOMETRY_SCHEMA.' +
            'AXIS2_PLACEMENT_2D' IN TYPEOF (SELF\mapped_item.
            mapping_target\planar_box.placement))
            AND NOT ('GEOMETRY_SCHEMA.' +
            'AXIS2_PLACEMENT_3D' IN TYPEOF (SELF\mapped_item.
            mapping_target\planar_box.placement));
         
         END_ENTITY;
ENTITY camera_model
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (camera_model_d2,
                                camera_model_d3))
           SUBTYPE OF (geometric_representation_item);
WHERE
           WR1: (SIZEOF (USEDIN (SELF, 'REPRESENTATION_SCHEMA.' +
            'ITEM_DEFINED_TRANSFORMATION.' +
            'TRANSFORM_ITEM_1')) +
            SIZEOF (USEDIN (SELF, 'REPRESENTATION_SCHEMA.' +
            'REPRESENTATION_MAP.MAPPING_ORIGIN'))
            ) > 0;
           WR2: SIZEOF(USEDIN(SELF,'PRESENTATION_APPEARANCE_SCHEMA.'+
            'STYLED_ITEM.ITEM')) = 0;
         
         END_ENTITY;
ENTITY camera_model_d2
           SUBTYPE OF (camera_model);
           view_window : planar_box;
           view_window_clipping : BOOLEAN;
WHERE
           WR1: SELF\geometric_representation_item.dim = 2;
         
         END_ENTITY;
ENTITY camera_model_d2_shape_clipping
           SUBTYPE OF (camera_model_d2);
           shape_clipping : curve;
         
         END_ENTITY;
ENTITY camera_model_d3
           SUBTYPE OF (camera_model);
           view_reference_system : axis2_placement_3d;
           perspective_of_volume : view_volume;
WHERE
           WR1: SELF\geometric_representation_item.dim = 3;
         
         END_ENTITY;
ENTITY camera_model_d3_multi_clipping
           SUBTYPE OF (camera_model_d3);
           shape_clipping : SET[1:?] OF camera_model_d3_multi_clipping_intersection_select;
         
         END_ENTITY;
ENTITY camera_model_d3_multi_clipping_intersection
           SUBTYPE OF (geometric_representation_item);
           shape_clipping : SET[2:?] OF camera_model_d3_multi_clipping_intersection_select;
         
         END_ENTITY;
ENTITY camera_model_d3_multi_clipping_union
           SUBTYPE OF (geometric_representation_item);
           shape_clipping : SET[2:?] OF camera_model_d3_multi_clipping_union_select;
         
         END_ENTITY;
ENTITY camera_model_d3_with_hlhsr
           SUBTYPE OF (camera_model_d3);
           hidden_line_surface_removal : BOOLEAN;
         
         END_ENTITY;
ENTITY camera_model_with_light_sources
           SUBTYPE OF (camera_model_d3);
           sources : SET[1:?] OF light_source;
         
         END_ENTITY;
ENTITY camera_usage
           SUBTYPE OF (representation_map);
           SELF\representation_map.mapping_origin : camera_model;
WHERE
           WR1: NOT ('PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_REPRESENTATION'
            IN TYPEOF(SELF\representation_map.mapped_representation));
         
         END_ENTITY;
ENTITY graphical_transformation
           SUBTYPE OF (item_defined_transformation);
           SELF\item_defined_transformation.transform_item_1 : axis2_placement_2d;
           SELF\item_defined_transformation.transform_item_2 : presentation_scaled_placement;
         
         END_ENTITY;
ENTITY light_source
           SUPERTYPE OF 
         (ONEOF (light_source_ambient,
                       light_source_directional,
                       light_source_positional,
                       light_source_spot))
           SUBTYPE OF (geometric_representation_item);
           light_colour : colour;
WHERE
           WR1: SIZEOF(USEDIN(SELF,'PRESENTATION_APPEARANCE_SCHEMA.'+
            'STYLED_ITEM.ITEM')) = 0;
         
         END_ENTITY;
ENTITY light_source_ambient
           SUBTYPE OF (light_source);
         
         END_ENTITY;
ENTITY light_source_directional
           SUBTYPE OF (light_source);
           orientation : direction;
         
         END_ENTITY;
ENTITY light_source_positional
           SUBTYPE OF (light_source);
           position : cartesian_point;
           constant_attenuation : REAL;
           distance_attenuation : REAL;
         
         END_ENTITY;
ENTITY light_source_spot
           SUBTYPE OF (light_source);
           position : cartesian_point;
           orientation : direction;
           concentration_exponent : REAL;
           constant_attenuation : REAL;
           distance_attenuation : REAL;
           spread_angle : positive_plane_angle_measure;
         
         END_ENTITY;
ENTITY presentation_area
           SUBTYPE OF (presentation_representation);
WHERE
           WR1: ((SIZEOF (QUERY (ais <* USEDIN (SELF, 'PRESENTATION_ORGANIZATION_SCHEMA.' +
            'AREA_IN_SET.AREA') |
            SIZEOF (USEDIN (ais, 'PRESENTATION_ORGANIZATION_SCHEMA.' +
            'PRESENTATION_SIZE.UNIT')) =1)) > 0) OR
            (SIZEOF (USEDIN (SELF, 'PRESENTATION_ORGANIZATION_SCHEMA.' +
            'PRESENTATION_SIZE.UNIT')) =1));
         
         END_ENTITY;
ENTITY presentation_layer_assignment;
           name : label;
           description : text;
           assigned_items : SET[1:?] OF layered_item;
         
         END_ENTITY;
ENTITY presentation_layer_usage;
           assignment : presentation_layer_assignment;
           presentation : presentation_representation;
UNIQUE
           UR1: assignment, presentation;
         
         END_ENTITY;
ENTITY presentation_representation
           SUPERTYPE OF 
         (ONEOF (area_dependent_annotation_representation,
                       presentation_area,
                       presentation_view,
                       product_data_representation_view,
                       view_dependent_annotation_representation))
           SUBTYPE OF (representation);
           SELF\representation.context_of_items : geometric_representation_context;
WHERE
           WR1: SELF\representation.
            context_of_items\geometric_representation_context.
            coordinate_space_dimension = 2;
           WR2: ('PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_AREA' IN TYPEOF (SELF))
            OR
            (SIZEOF (QUERY (prr <* USEDIN (SELF, 'REPRESENTATION_SCHEMA.' +
            'REPRESENTATION_RELATIONSHIP.REP_2') |
            'PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_REPRESENTATION' IN
            TYPEOF (prr\representation_relationship.rep_1))) > 0)
            OR
            (SIZEOF(QUERY( rm <* USEDIN(SELF, 'REPRESENTATION_SCHEMA.'+
            'REPRESENTATION_MAP.'+
            'MAPPED_REPRESENTATION') |
            SIZEOF(QUERY( mi <* USEDIN(rm, 'REPRESENTATION_SCHEMA.'+
            'MAPPED_ITEM.'+
            'MAPPING_SOURCE') |
            SIZEOF(QUERY( rep <* using_representations (mi) |
            'PRESENTATION_ORGANIZATION_SCHEMA.'+
            'PRESENTATION_REPRESENTATION' IN
            TYPEOF (rep))) > 0
            )) > 0))
            > 0);
         
         END_ENTITY;
ENTITY presentation_representation_relationship
           SUBTYPE OF (representation_relationship_with_transformation);
           SELF\representation_relationship.rep_1 : presentation_representation;
           SELF\representation_relationship.rep_2 : presentation_representation;
           SELF\representation_relationship_with_transformation.transformation_operator : graphical_transformation;
WHERE
           WR1: acyclic_presentation_representation_relationship (SELF,
            [SELF\representation_relationship.rep_2]);
           WR2: NOT (('PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_AREA' IN
            TYPEOF (SELF\representation_relationship.rep_1))
            AND
            NOT (SIZEOF (['PRESENTATION_ORGANIZATION_SCHEMA.' +
            'PRODUCT_DATA_REPRESENTATION_VIEW',
            'PRESENTATION_ORGANIZATION_SCHEMA.' +
            'VIEW_DEPENDENT_ANNOTATION_REPRESENTATION'] *
            TYPEOF (SELF\representation_relationship.rep_2)) = 0));
           WR3: NOT (('PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_VIEW'
            IN TYPEOF (SELF\representation_relationship.rep_1))
            AND
            NOT (SIZEOF (['PRESENTATION_ORGANIZATION_SCHEMA.' +
            'PRESENTATION_AREA',
            'PRESENTATION_ORGANIZATION_SCHEMA.' +
            'PRESENTATION_VIEW',
            'PRESENTATION_ORGANIZATION_SCHEMA.' +
            'AREA_DEPENDENT_ANNOTATION_REPRESENTATION'] *
            TYPEOF (SELF\representation_relationship.rep_2))=0));
           WR4: (NOT ('PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_VIEW' IN
            TYPEOF(SELF\representation_relationship.rep_2)))
            XOR
            ('PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_AREA'IN
            TYPEOF(SELF\representation_relationship.rep_1));
           WR5: (NOT ('PRESENTATION_ORGANIZATION_SCHEMA.' +
            'PRODUCT_DATA_REPRESENTATION_VIEW' IN
            (TYPEOF(SELF\representation_relationship.rep_1) +
            TYPEOF(SELF\representation_relationship.rep_2))))
            XOR
            ('PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_VIEW' IN
            TYPEOF(SELF\representation_relationship.rep_1))
            AND
            ('PRESENTATION_ORGANIZATION_SCHEMA.PRODUCT_DATA_REPRESENTATION_VIEW' IN
            TYPEOF(SELF\representation_relationship.rep_2));
         
         END_ENTITY;
ENTITY presentation_set;
INVERSE
           areas : SET[1:?] OF area_in_set FOR in_set;
         
         END_ENTITY;
ENTITY presentation_size;
           unit : presentation_size_assignment_select;
           size : planar_box;
UNIQUE
           UR1: unit;
WHERE
           WR1: (('PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_REPRESENTATION'
            IN TYPEOF (unit)) AND
            item_in_context (size,
            unit\representation.context_of_items)
            )
            OR
            (('PRESENTATION_ORGANIZATION_SCHEMA.AREA_IN_SET'
            IN TYPEOF (unit)) AND
            (SIZEOF (QUERY ( ais <* unit\area_in_set.in_set.areas |
            NOT item_in_context (size, ais.area\representation.
            context_of_items) )) = 0));
         
         END_ENTITY;
ENTITY presentation_view
           SUBTYPE OF (presentation_representation);
         
         END_ENTITY;
ENTITY presented_item
           ABSTRACT SUPERTYPE
         ;
         
         END_ENTITY;
ENTITY presented_item_representation;
           presentation : presentation_representation_select;
           item : presented_item;
         
         END_ENTITY;
ENTITY product_data_representation_view
           SUBTYPE OF (presentation_representation);
           SELF\representation.items : SET[1:?] OF product_data_representation_view_item;
WHERE
           WR1: SIZEOF (QUERY (item <* SELF\representation.items |
            ('PRESENTATION_ORGANIZATION_SCHEMA.CAMERA_IMAGE' IN
            TYPEOF (item))
            )) >= 1;
           WR2: (SIZEOF (QUERY (prr <* USEDIN (SELF, 'REPRESENTATION_SCHEMA.' +
            'REPRESENTATION_RELATIONSHIP.REP_2') |
            'PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_VIEW' IN
            TYPEOF (prr\representation_relationship.rep_1))) > 0)
            OR
            (SIZEOF(QUERY( rm <* USEDIN(SELF, 'REPRESENTATION_SCHEMA.'+
            'REPRESENTATION_MAP.'+
            'MAPPED_REPRESENTATION') |
            SIZEOF(QUERY( mi <* USEDIN(rm, 'REPRESENTATION_SCHEMA.'+
            'MAPPED_ITEM.'+
            'MAPPING_SOURCE') |
            SIZEOF(QUERY( rep <* using_representations (mi) |
            'PRESENTATION_ORGANIZATION_SCHEMA.'+
            'PRESENTATION_VIEW' IN
            TYPEOF (rep))) > 0
            )) > 0))
            > 0);
           WR3: (SIZEOF (QUERY (prr <* USEDIN (SELF, 'REPRESENTATION_SCHEMA.' +
            'REPRESENTATION_RELATIONSHIP.REP_2') |
            NOT('PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_VIEW' IN
            TYPEOF (prr\representation_relationship.rep_1)))) = 0)
            AND
            (SIZEOF(QUERY( rm <* USEDIN(SELF, 'REPRESENTATION_SCHEMA.'+
            'REPRESENTATION_MAP.'+
            'MAPPED_REPRESENTATION') |
            SIZEOF(QUERY( mi <* USEDIN(rm, 'REPRESENTATION_SCHEMA.'+
            'MAPPED_ITEM.'+
            'MAPPING_SOURCE') |
            SIZEOF(QUERY( rep <* using_representations (mi) |
            NOT('PRESENTATION_ORGANIZATION_SCHEMA.'+
            'PRESENTATION_VIEW' IN
            TYPEOF (rep)))) > 0
            )) > 0))
            = 0);
         
         END_ENTITY;
ENTITY representation_item_dependent_layer_assignment
           SUBTYPE OF (presentation_layer_assignment);
           item_context : representation_item;
         
         END_ENTITY;
ENTITY view_dependent_annotation_representation
           SUBTYPE OF (presentation_representation);
           SELF\representation.items : SET[1:?] OF view_dependent_annotation_representation_item;
WHERE
           WR1: SIZEOF (QUERY (item <* SELF\representation.items |
            ('PRESENTATION_DEFINITION_SCHEMA.ANNOTATION_OCCURRENCE' IN
            TYPEOF (item))
            )) >= 1;
           WR2: (SIZEOF (QUERY (prr <* USEDIN (SELF, 'REPRESENTATION_SCHEMA.' +
            'REPRESENTATION_RELATIONSHIP.REP_2') |
            'PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_VIEW' IN
            TYPEOF (prr\representation_relationship.rep_1))) > 0)
            OR
            (SIZEOF(QUERY( rm <* USEDIN(SELF, 'REPRESENTATION_SCHEMA.'+
            'REPRESENTATION_MAP.'+
            'MAPPED_REPRESENTATION') |
            SIZEOF(QUERY( mi <* USEDIN(rm, 'REPRESENTATION_SCHEMA.'+
            'MAPPED_ITEM.'+
            'MAPPING_SOURCE') |
            SIZEOF(QUERY( rep <* using_representations (mi) |
            'PRESENTATION_ORGANIZATION_SCHEMA.'+
            'PRESENTATION_VIEW' IN
            TYPEOF (rep))) > 0
            )) > 0))
            > 0);
           WR3: (SIZEOF (QUERY (prr <* USEDIN (SELF, 'REPRESENTATION_SCHEMA.' +
            'REPRESENTATION_RELATIONSHIP.REP_2') |
            NOT('PRESENTATION_ORGANIZATION_SCHEMA.PRESENTATION_VIEW' IN
            TYPEOF (prr\representation_relationship.rep_1)))) = 0)
            AND
            (SIZEOF(QUERY( rm <* USEDIN(SELF, 'REPRESENTATION_SCHEMA.'+
            'REPRESENTATION_MAP.'+
            'MAPPED_REPRESENTATION') |
            SIZEOF(QUERY( mi <* USEDIN(rm, 'REPRESENTATION_SCHEMA.'+
            'MAPPED_ITEM.'+
            'MAPPING_SOURCE') |
            SIZEOF(QUERY( rep <* using_representations (mi) |
            NOT('PRESENTATION_ORGANIZATION_SCHEMA.'+
            'PRESENTATION_VIEW' IN
            TYPEOF (rep)))) > 0
            )) > 0))
            = 0);
         
         END_ENTITY;
ENTITY view_volume
           SUBTYPE OF (founded_item);
           projection_type : central_or_parallel;
           projection_point : cartesian_point;
           view_plane_distance : length_measure;
           front_plane_distance : length_measure;
           front_plane_clipping : BOOLEAN;
           back_plane_distance : length_measure;
           back_plane_clipping : BOOLEAN;
           view_volume_sides_clipping : BOOLEAN;
           view_window : planar_box;
INVERSE
           camera_usages : SET[1:?] OF camera_model_d3 FOR perspective_of_volume;
WHERE
           WR1: ('GEOMETRY_SCHEMA.AXIS2_PLACEMENT_2D' IN TYPEOF(SELF\view_volume.view_window.placement)) OR
            (dot_product ((representation_item(' ') || geometric_representation_item() || direction([0.0,0.0,1.0])),
            view_window\planar_box.placement\axis2_placement_3d.p[3] ) = 1.0);
           WR2: view_plane_distance = view_window.placement\placement.location.coordinates[3];
         
         END_ENTITY;
SUBTYPE_CONSTRAINT pos_geometric_representation_item_subtypes FOR geometric_representation_item;
           ONEOF (camera_model,
         camera_model_d3_multi_clipping_intersection,
         camera_model_d3_multi_clipping_union,
         curve,
         direction,
         light_source);
      
         END_SUBTYPE_CONSTRAINT;
RULE symbol_representation_rule FOR 
         (presentation_representation_relationship);
WHERE
           WR1: SIZEOF(QUERY(each_1 <* presentation_representation_relationship  |
            NOT ('PRESENTATION_DEFINITION_SCHEMA.'+
            'SYMBOL_REPRESENTATION_RELATIONSHIP' IN TYPEOF(each_1)) AND
            (SIZEOF(QUERY(each_2 <* [each_1\representation_relationship.rep_1,
            each_1\representation_relationship.rep_2] |
            'PRESENTATION_DEFINITION_SCHEMA.SYMBOL_REPRESENTATION' IN TYPEOF(each_2)
            )) > 0)
            )) = 0;
         END_RULE;
         
FUNCTION acyclic_presentation_representation_relationship
 (relation : presentation_representation_relationship; children : SET[0:?] OF presentation_representation) : BOOLEAN;
         LOCAL
      x : SET OF presentation_representation_relationship;
      local_children : SET OF presentation_representation;
    END_LOCAL;
    REPEAT i:=1 TO HIINDEX(children);
      IF relation\representation_relationship.rep_1 :=: children[i] THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
    x := bag_to_set (USEDIN ( relation\representation_relationship.rep_1,
                  'REPRESENTATION_SCHEMA.'+
                  'REPRESENTATION_RELATIONSHIP.REP_2'));
    local_children := children + relation\representation_relationship.rep_1;
    IF SIZEOF (x) > 0 THEN
      REPEAT i:=1 TO HIINDEX (x);
        IF NOT acyclic_presentation_representation_relationship
          (x[i] , local_children) THEN
          RETURN (FALSE);
        END_IF;
      END_REPEAT;
    END_IF;
    RETURN (TRUE);
         END_FUNCTION;
         
FUNCTION aspect_ratio
 (p : planar_box) : positive_ratio_measure;
         IF (p.size_in_x > 0.) AND (p.size_in_y > 0.) THEN
      RETURN (p.size_in_x / p.size_in_y);
    ELSE
      RETURN (?);
    END_IF;
         END_FUNCTION;
         
         END_SCHEMA;  -- presentation_organization_schema