SCHEMA explicit_draughting; TYPE approved_item = SELECT (drawing_revision, drawing_sheet_revision); END_TYPE; -- approved_item TYPE area_or_view = SELECT (presentation_area, presentation_view); END_TYPE; -- area_or_view TYPE axis2_placement = SELECT (axis2_placement_2d); END_TYPE; -- axis2_placement TYPE b_spline_curve_form = ENUMERATION OF (elliptic_arc, polyline_form, parabolic_arc, circular_arc, unspecified, hyperbolic_arc); END_TYPE; -- b_spline_curve_form TYPE box_characteristic_select = SELECT (box_height, box_width, box_slant_angle, box_rotate_angle); END_TYPE; -- box_characteristic_select TYPE box_height = positive_ratio_measure; END_TYPE; -- box_height TYPE box_rotate_angle = plane_angle_measure; END_TYPE; -- box_rotate_angle TYPE box_slant_angle = plane_angle_measure; END_TYPE; -- box_slant_angle TYPE box_width = positive_ratio_measure; END_TYPE; -- box_width TYPE character_spacing_select = SELECT (length_measure, ratio_measure, measure_with_unit); END_TYPE; -- character_spacing_select TYPE character_style_select = SELECT (text_style_for_defined_font); END_TYPE; -- character_style_select TYPE characterized_definition = SELECT (characterized_product_definition, shape_definition); END_TYPE; -- characterized_definition TYPE characterized_product_definition = SELECT (product_definition); END_TYPE; -- characterized_product_definition TYPE classified_item = SELECT (drawing_revision, drawing_sheet_revision); END_TYPE; -- classified_item TYPE contracted_item = SELECT (drawing_revision); END_TYPE; -- contracted_item TYPE curve_font_or_scaled_curve_font_select = SELECT (curve_style_font_select); END_TYPE; -- curve_font_or_scaled_curve_font_select TYPE curve_or_annotation_curve_occurrence = SELECT (curve, annotation_curve_occurrence); END_TYPE; -- curve_or_annotation_curve_occurrence TYPE curve_or_render = SELECT (curve_style); END_TYPE; -- curve_or_render TYPE curve_style_font_select = SELECT (curve_style_font, pre_defined_curve_font, externally_defined_curve_font); END_TYPE; -- curve_style_font_select TYPE date_time_select = SELECT (date); END_TYPE; -- date_time_select TYPE day_in_month_number = INTEGER; END_TYPE; -- day_in_month_number TYPE defined_symbol_select = SELECT (pre_defined_symbol, externally_defined_symbol); END_TYPE; -- defined_symbol_select TYPE dimension_count = INTEGER; WHERE wr1: SELF > 0; END_TYPE; -- dimension_count TYPE dimension_extent_usage = ENUMERATION OF (origin, target); END_TYPE; -- dimension_extent_usage TYPE draughting_callout_element = SELECT (annotation_text_occurrence, annotation_symbol_occurrence, annotation_curve_occurrence); END_TYPE; -- draughting_callout_element TYPE draughting_grouped_item = SELECT (annotation_occurrence, geometric_set_select); END_TYPE; -- draughting_grouped_item TYPE draughting_organization_item = SELECT (product_definition_formation, drawing_revision, drawing_sheet_revision); END_TYPE; -- draughting_organization_item TYPE draughting_presented_item_select = SELECT (product_definition_formation); END_TYPE; -- draughting_presented_item_select TYPE draughting_titled_item = SELECT (drawing_revision, drawing_sheet_revision); END_TYPE; -- draughting_titled_item TYPE fill_area_style_tile_shape_select = SELECT (fill_area_style_tile_symbol_with_style); END_TYPE; -- fill_area_style_tile_shape_select TYPE fill_style_select = SELECT (fill_area_style_colour, externally_defined_tile_style, fill_area_style_tiles, externally_defined_hatch_style, fill_area_style_hatching); END_TYPE; -- fill_style_select TYPE font_select = SELECT (pre_defined_text_font, externally_defined_text_font); END_TYPE; -- font_select TYPE geometric_set_select = SELECT (point, curve); END_TYPE; -- geometric_set_select TYPE hiding_or_blanking_select = SELECT (presentation_area, presentation_view, annotation_fill_area); END_TYPE; -- hiding_or_blanking_select TYPE identifier = STRING; END_TYPE; -- identifier TYPE invisibility_context = SELECT (presentation_layer_usage, presentation_representation, presentation_set); END_TYPE; -- invisibility_context TYPE invisible_item = SELECT (styled_item, presentation_layer_assignment, presentation_representation); END_TYPE; -- invisible_item TYPE knot_type = ENUMERATION OF (uniform_knots, quasi_uniform_knots, piecewise_bezier_knots, unspecified); END_TYPE; -- knot_type TYPE label = STRING; END_TYPE; -- label TYPE layered_item = SELECT (presentation_representation, representation_item); END_TYPE; -- layered_item TYPE length_measure = REAL; END_TYPE; -- length_measure TYPE measure_value = SELECT (length_measure, plane_angle_measure, ratio_measure, parameter_value, positive_length_measure, positive_ratio_measure); END_TYPE; -- measure_value TYPE month_in_year_number = INTEGER; WHERE wr1: (1 <= SELF) AND (SELF <= 12); END_TYPE; -- month_in_year_number TYPE null_style = ENUMERATION OF (null); END_TYPE; -- null_style TYPE parameter_value = REAL; END_TYPE; -- parameter_value TYPE person_organization_select = SELECT (person, organization, person_and_organization); END_TYPE; -- person_organization_select TYPE plane_angle_measure = REAL; END_TYPE; -- plane_angle_measure TYPE positive_length_measure = length_measure; WHERE wr1: SELF > 0; END_TYPE; -- positive_length_measure TYPE positive_ratio_measure = ratio_measure; WHERE wr1: SELF > 0; END_TYPE; -- positive_ratio_measure TYPE presentable_text = STRING; END_TYPE; -- presentable_text TYPE presentation_representation_select = SELECT (presentation_representation, presentation_set); END_TYPE; -- presentation_representation_select TYPE presentation_size_assignment_select = SELECT (presentation_view, presentation_area, area_in_set); END_TYPE; -- presentation_size_assignment_select TYPE presentation_style_select = SELECT (curve_style, symbol_style, fill_area_style, text_style, null_style); END_TYPE; -- presentation_style_select TYPE ratio_measure = REAL; END_TYPE; -- ratio_measure TYPE shape_definition = SELECT (product_definition_shape); END_TYPE; -- shape_definition TYPE si_prefix = ENUMERATION OF (exa, pico, mega, femto, atto, centi, nano, hecto, micro, tera, giga, milli, peta, deci, kilo, deca); END_TYPE; -- si_prefix TYPE si_unit_name = ENUMERATION OF (hertz, degree_celsius, siemens, sievert, lux, watt, ohm, second, becquerel, pascal, henry, tesla, volt, joule, kelvin, ampere, gram, steradian, mole, lumen, gray, candela, farad, radian, newton, metre, weber, coulomb); END_TYPE; -- si_unit_name TYPE size_select = SELECT (positive_length_measure, measure_with_unit); END_TYPE; -- size_select TYPE source_item = SELECT (identifier); END_TYPE; -- source_item TYPE specified_item = SELECT (drawing_revision); END_TYPE; -- specified_item TYPE style_context_select = SELECT (representation, representation_item, presentation_set); END_TYPE; -- style_context_select TYPE symbol_style_select = SELECT (symbol_colour); END_TYPE; -- symbol_style_select TYPE text = STRING; END_TYPE; -- text TYPE text_alignment = label; END_TYPE; -- text_alignment TYPE text_delineation = label; END_TYPE; -- text_delineation TYPE text_or_character = SELECT (annotation_text, composite_text, text_literal); END_TYPE; -- text_or_character TYPE text_path = ENUMERATION OF (up, right, down, left); END_TYPE; -- text_path TYPE transition_code = ENUMERATION OF (discontinuous, cont_same_gradient_same_curvature, cont_same_gradient, continuous); END_TYPE; -- transition_code TYPE trimming_preference = ENUMERATION OF (parameter, unspecified, cartesian); END_TYPE; -- trimming_preference TYPE trimming_select = SELECT (cartesian_point, parameter_value); END_TYPE; -- trimming_select TYPE unit = SELECT (named_unit); END_TYPE; -- unit TYPE vector_or_direction = SELECT (vector, direction); END_TYPE; -- vector_or_direction TYPE year_number = INTEGER; END_TYPE; -- year_number ENTITY address; internal_location : OPTIONAL label; street_number : OPTIONAL label; street : OPTIONAL label; postal_box : OPTIONAL label; town : OPTIONAL label; region : OPTIONAL label; postal_code : OPTIONAL label; country : OPTIONAL label; facsimile_number : OPTIONAL label; telephone_number : OPTIONAL label; electronic_mail_address : OPTIONAL label; telex_number : OPTIONAL label; WHERE wr1: EXISTS(internal_location) OR EXISTS(street_number) OR EXISTS( street) OR EXISTS(postal_box) OR EXISTS(town) OR EXISTS( region) OR EXISTS(postal_code) OR EXISTS(country) OR EXISTS( facsimile_number) OR EXISTS(telephone_number) OR EXISTS( electronic_mail_address) OR EXISTS(telex_number); END_ENTITY; -- address ENTITY angular_dimension SUBTYPE OF (dimension_curve_directed_callout); END_ENTITY; -- angular_dimension ENTITY annotation_curve_occurrence SUBTYPE OF (annotation_occurrence); WHERE wr1: 'EXPLICIT_DRAUGHTING.CURVE' IN TYPEOF(SELF\styled_item.item); END_ENTITY; -- annotation_curve_occurrence ENTITY annotation_fill_area SUBTYPE OF (geometric_representation_item); boundaries : SET [1:?] OF curve; END_ENTITY; -- annotation_fill_area ENTITY annotation_fill_area_occurrence SUBTYPE OF (annotation_occurrence); fill_style_target : point; WHERE wr1: 'EXPLICIT_DRAUGHTING.ANNOTATION_FILL_AREA' IN TYPEOF(SELF.item); END_ENTITY; -- annotation_fill_area_occurrence ENTITY annotation_occurrence SUPERTYPE OF (ONEOF (annotation_curve_occurrence, annotation_fill_area_occurrence,annotation_text_occurrence, annotation_symbol_occurrence)) SUBTYPE OF (styled_item); WHERE wr1: 'EXPLICIT_DRAUGHTING.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF( SELF); END_ENTITY; -- annotation_occurrence ENTITY annotation_subfigure_occurrence SUBTYPE OF (annotation_symbol_occurrence); WHERE wr1: SIZEOF(QUERY ( sty <* SELF\styled_item.styles | (NOT (SIZEOF( sty.styles) = 1)) )) = 0; wr2: SIZEOF(QUERY ( sty <* SELF\styled_item.styles | (NOT ( 'EXPLICIT_DRAUGHTING.NULL_STYLE' IN TYPEOF(sty.styles[1]))) )) = 0; wr3: 'EXPLICIT_DRAUGHTING.ANNOTATION_SYMBOL' IN TYPEOF(SELF\ styled_item.item); wr4: 'EXPLICIT_DRAUGHTING.DRAUGHTING_SUBFIGURE_REPRESENTATION' IN TYPEOF(SELF\styled_item.item\mapped_item.mapping_source. mapped_representation); END_ENTITY; -- annotation_subfigure_occurrence ENTITY annotation_symbol SUBTYPE OF (mapped_item); WHERE wr1: 'EXPLICIT_DRAUGHTING.SYMBOL_REPRESENTATION_MAP' IN TYPEOF(SELF\ mapped_item.mapping_source); wr2: 'EXPLICIT_DRAUGHTING.SYMBOL_TARGET' IN TYPEOF(SELF\mapped_item. mapping_target); wr3: 'EXPLICIT_DRAUGHTING.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF( SELF); END_ENTITY; -- annotation_symbol ENTITY annotation_symbol_occurrence SUBTYPE OF (annotation_occurrence); WHERE wr1: SIZEOF(['EXPLICIT_DRAUGHTING.ANNOTATION_SYMBOL', 'EXPLICIT_DRAUGHTING.DEFINED_SYMBOL'] * TYPEOF(SELF\ styled_item.item)) > 0; END_ENTITY; -- annotation_symbol_occurrence ENTITY annotation_text SUBTYPE OF (mapped_item); WHERE wr1: 'EXPLICIT_DRAUGHTING.AXIS2_PLACEMENT' IN TYPEOF(SELF\ mapped_item.mapping_target); wr2: 'EXPLICIT_DRAUGHTING.TEXT_STRING_REPRESENTATION' IN TYPEOF(SELF \mapped_item.mapping_source.mapped_representation); wr3: 'EXPLICIT_DRAUGHTING.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF( SELF); END_ENTITY; -- annotation_text ENTITY annotation_text_occurrence SUBTYPE OF (annotation_occurrence); WHERE wr1: SIZEOF(['EXPLICIT_DRAUGHTING.TEXT_LITERAL', 'EXPLICIT_DRAUGHTING.ANNOTATION_TEXT', 'EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_CHARACTER', 'EXPLICIT_DRAUGHTING.DEFINED_CHARACTER_GLYPH', 'EXPLICIT_DRAUGHTING.COMPOSITE_TEXT'] * TYPEOF(SELF\ styled_item.item)) > 0; END_ENTITY; -- annotation_text_occurrence ENTITY application_context; application : text; INVERSE context_elements : SET [1:?] OF application_context_element FOR frame_of_reference; END_ENTITY; -- application_context ENTITY application_context_element SUPERTYPE OF (ONEOF (product_context,product_definition_context)); name : label; frame_of_reference : application_context; END_ENTITY; -- application_context_element ENTITY application_protocol_definition; status : label; application_interpreted_model_schema_name : label; application_protocol_year : year_number; application : application_context; END_ENTITY; -- application_protocol_definition ENTITY approval; status : approval_status; level : label; END_ENTITY; -- approval ENTITY approval_assignment ABSTRACT SUPERTYPE; assigned_approval : approval; END_ENTITY; -- approval_assignment ENTITY approval_date_time; date_time : date_time_select; dated_approval : approval; END_ENTITY; -- approval_date_time ENTITY approval_person_organization; person_organization : person_organization_select; authorized_approval : approval; role : approval_role; END_ENTITY; -- approval_person_organization ENTITY approval_role; role : label; END_ENTITY; -- approval_role ENTITY approval_status; name : label; END_ENTITY; -- approval_status ENTITY area_in_set; area : presentation_area; in_set : presentation_set; END_ENTITY; -- area_in_set ENTITY axis2_placement_2d SUBTYPE OF (placement); ref_direction : OPTIONAL direction; DERIVE p : LIST [2:2] OF direction := build_2axes(ref_direction); WHERE wr1: SELF\geometric_representation_item.dim = 2; END_ENTITY; -- axis2_placement_2d ENTITY b_spline_curve SUPERTYPE OF (ONEOF (uniform_curve,b_spline_curve_with_knots, quasi_uniform_curve,bezier_curve) ANDOR rational_b_spline_curve) SUBTYPE OF (bounded_curve); degree : INTEGER; control_points_list : LIST [2:?] OF cartesian_point; curve_form : b_spline_curve_form; closed_curve : LOGICAL; self_intersect : LOGICAL; DERIVE upper_index_on_control_points : INTEGER := SIZEOF( control_points_list) - 1; control_points : ARRAY [0: upper_index_on_control_points] OF cartesian_point := list_to_array( control_points_list,0, upper_index_on_control_points); WHERE wr1: ('EXPLICIT_DRAUGHTING.UNIFORM_CURVE' IN TYPEOF(SELF)) OR ( 'EXPLICIT_DRAUGHTING.QUASI_UNIFORM_CURVE' IN TYPEOF(SELF)) OR ('EXPLICIT_DRAUGHTING.BEZIER_CURVE' IN TYPEOF(SELF)) OR ( 'EXPLICIT_DRAUGHTING.B_SPLINE_CURVE_WITH_KNOTS' IN TYPEOF( SELF)); END_ENTITY; -- b_spline_curve ENTITY b_spline_curve_with_knots SUBTYPE OF (b_spline_curve); knot_multiplicities : LIST [2:?] OF INTEGER; knots : LIST [2:?] OF parameter_value; knot_spec : knot_type; DERIVE upper_index_on_knots : INTEGER := SIZEOF(knots); WHERE wr1: constraints_param_b_spline(degree,upper_index_on_knots, upper_index_on_control_points,knot_multiplicities,knots); wr2: SIZEOF(knot_multiplicities) = upper_index_on_knots; END_ENTITY; -- b_spline_curve_with_knots ENTITY bezier_curve SUBTYPE OF (b_spline_curve); END_ENTITY; -- bezier_curve ENTITY bounded_curve SUPERTYPE OF (ONEOF (polyline,b_spline_curve,trimmed_curve, composite_curve)) SUBTYPE OF (curve); END_ENTITY; -- bounded_curve ENTITY calendar_date SUBTYPE OF (date); day_component : day_in_month_number; month_component : month_in_year_number; WHERE wr1: valid_calendar_date(SELF); END_ENTITY; -- calendar_date ENTITY camera_image SUBTYPE OF (mapped_item); WHERE wr1: 'EXPLICIT_DRAUGHTING.CAMERA_USAGE' IN TYPEOF(SELF\mapped_item. mapping_source); wr2: 'EXPLICIT_DRAUGHTING.PLANAR_BOX' IN TYPEOF(SELF\mapped_item. mapping_target); wr3: 'EXPLICIT_DRAUGHTING.GEOMETRIC_REPRESENTATION_ITEM' IN TYPEOF( SELF); END_ENTITY; -- camera_image 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.size_in_x; WHERE wr1: 'EXPLICIT_DRAUGHTING.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; -- camera_image_2d_with_scale ENTITY camera_model SUPERTYPE OF (camera_model_d2) SUBTYPE OF (geometric_representation_item); WHERE wr1: (SIZEOF(USEDIN(SELF,'EXPLICIT_DRAUGHTING.' + 'ITEM_DEFINED_TRANSFORMATION.' + 'TRANSFORM_ITEM_1')) + SIZEOF(USEDIN(SELF,'EXPLICIT_DRAUGHTING.' + 'REPRESENTATION_MAP.MAPPING_ORIGIN'))) > 0; wr2: SIZEOF(USEDIN(SELF,'EXPLICIT_DRAUGHTING.' + 'STYLED_ITEM.ITEM')) = 0; END_ENTITY; -- camera_model 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; -- camera_model_d2 ENTITY camera_usage SUBTYPE OF (representation_map); WHERE wr1: NOT ('EXPLICIT_DRAUGHTING.PRESENTATION_REPRESENTATION' IN TYPEOF(SELF\representation_map.mapped_representation)); wr2: 'EXPLICIT_DRAUGHTING.CAMERA_MODEL' IN TYPEOF(SELF\ representation_map.mapping_origin); END_ENTITY; -- camera_usage ENTITY cartesian_point SUBTYPE OF (point); coordinates : LIST [1:3] OF length_measure; END_ENTITY; -- cartesian_point ENTITY circle SUBTYPE OF (conic); radius : positive_length_measure; END_ENTITY; -- circle ENTITY colour; END_ENTITY; -- colour ENTITY colour_rgb SUBTYPE OF (colour_specification); red : REAL; green : REAL; blue : REAL; WHERE wr1: (0 <= red) AND (red <= 1); wr2: (0 <= green) AND (green <= 1); wr3: (0 <= blue) AND (blue <= 1); END_ENTITY; -- colour_rgb ENTITY colour_specification SUBTYPE OF (colour); name : colour; END_ENTITY; -- colour_specification ENTITY composite_curve SUBTYPE OF (bounded_curve); segments : LIST [1:?] OF composite_curve_segment; self_intersect : LOGICAL; DERIVE n_segments : INTEGER := SIZEOF(segments); closed_curve : LOGICAL := segments[n_segments].transition <> discontinuous; WHERE wr1: ((NOT closed_curve) AND (SIZEOF(QUERY ( temp <* segments | ( temp.transition = discontinuous) )) = 1)) OR (closed_curve AND (SIZEOF(QUERY ( temp <* segments | (temp.transition = discontinuous) )) = 0)); END_ENTITY; -- composite_curve ENTITY composite_curve_segment; transition : transition_code; same_sense : BOOLEAN; parent_curve : curve; INVERSE using_curves : BAG [1:?] OF composite_curve FOR segments; WHERE wr1: 'EXPLICIT_DRAUGHTING.BOUNDED_CURVE' IN TYPEOF(parent_curve); END_ENTITY; -- composite_curve_segment ENTITY composite_text SUBTYPE OF (geometric_representation_item); collected_text : SET [2:?] OF text_or_character; WHERE wr1: acyclic_composite_text(SELF,SELF.collected_text); END_ENTITY; -- composite_text ENTITY composite_text_with_associated_curves SUBTYPE OF (composite_text); associated_curves : SET [1:?] OF curve; END_ENTITY; -- composite_text_with_associated_curves ENTITY composite_text_with_blanking_box SUBTYPE OF (composite_text); blanking : planar_box; END_ENTITY; -- composite_text_with_blanking_box ENTITY composite_text_with_extent SUBTYPE OF (composite_text); extent : planar_extent; END_ENTITY; -- composite_text_with_extent ENTITY conic SUPERTYPE OF (ONEOF (circle,ellipse,hyperbola,parabola)) SUBTYPE OF (curve); position : axis2_placement; END_ENTITY; -- conic ENTITY context_dependent_invisibility SUBTYPE OF (invisibility); presentation_context : invisibility_context; END_ENTITY; -- context_dependent_invisibility ENTITY contract; name : label; purpose : text; kind : contract_type; END_ENTITY; -- contract ENTITY contract_assignment ABSTRACT SUPERTYPE; assigned_contract : contract; END_ENTITY; -- contract_assignment ENTITY contract_type; description : label; END_ENTITY; -- contract_type ENTITY conversion_based_unit SUBTYPE OF (named_unit); name : label; conversion_factor : measure_with_unit; END_ENTITY; -- conversion_based_unit ENTITY curve SUPERTYPE OF (ONEOF (line,conic,offset_curve_2d)) SUBTYPE OF (geometric_representation_item); END_ENTITY; -- curve ENTITY curve_dimension SUBTYPE OF (dimension_curve_directed_callout); END_ENTITY; -- curve_dimension ENTITY curve_style; name : label; curve_font : curve_font_or_scaled_curve_font_select; curve_width : size_select; curve_colour : colour; END_ENTITY; -- curve_style ENTITY curve_style_font; name : label; pattern_list : LIST [1:?] OF curve_style_font_pattern; END_ENTITY; -- curve_style_font ENTITY curve_style_font_pattern; visible_segment_length : positive_length_measure; invisible_segment_length : positive_length_measure; END_ENTITY; -- curve_style_font_pattern ENTITY date SUPERTYPE OF (calendar_date); year_component : year_number; END_ENTITY; -- date ENTITY datum_feature_callout SUBTYPE OF (draughting_callout); END_ENTITY; -- datum_feature_callout ENTITY datum_target_callout SUBTYPE OF (draughting_callout); END_ENTITY; -- datum_target_callout ENTITY defined_symbol SUBTYPE OF (geometric_representation_item); definition : defined_symbol_select; target : symbol_target; END_ENTITY; -- defined_symbol ENTITY diameter_dimension SUBTYPE OF (dimension_curve_directed_callout); END_ENTITY; -- diameter_dimension ENTITY dimension_callout_component_relationship SUBTYPE OF (draughting_callout_relationship); WHERE wr1: SELF.name IN ['prefix','suffix']; wr2: 'EXPLICIT_DRAUGHTING.STRUCTURED_DIMENSION_CALLOUT' IN TYPEOF( SELF.relating_draughting_callout); wr3: SIZEOF(TYPEOF(SELF.related_draughting_callout) * [ 'EXPLICIT_DRAUGHTING.LEADER_DIRECTED_CALLOUT', 'EXPLICIT_DRAUGHTING.PROJECTION_DIRECTED_CALLOUT', 'EXPLICIT_DRAUGHTING.DIMENSION_CURVE_DIRECTED_CALLOUT', 'EXPLICIT_DRAUGHTING.STRUCTURED_DIMENSION_CALLOUT']) = 0; wr4: (SELF.related_draughting_callout.contents * SELF. relating_draughting_callout.contents) = SELF. related_draughting_callout.contents; END_ENTITY; -- dimension_callout_component_relationship ENTITY dimension_callout_relationship SUBTYPE OF (draughting_callout_relationship); WHERE wr1: SELF.name IN ['primary','secondary']; wr2: SIZEOF(TYPEOF(SELF.relating_draughting_callout) * [ 'EXPLICIT_DRAUGHTING.ANGULAR_DIMENSION', 'EXPLICIT_DRAUGHTING.CURVE_DIMENSION', 'EXPLICIT_DRAUGHTING.DIAMETER_DIMENSION', 'EXPLICIT_DRAUGHTING.LEADER_DIRECTED_DIMENSION', 'EXPLICIT_DRAUGHTING.LINEAR_DIMENSION', 'EXPLICIT_DRAUGHTING.ORDINATE_DIMENSION', 'EXPLICIT_DRAUGHTING.RADIUS_DIMENSION']) = 1; wr3: SIZEOF(TYPEOF(SELF.related_draughting_callout) * [ 'EXPLICIT_DRAUGHTING.DIMENSION_CURVE_DIRECTED_CALLOUT', 'EXPLICIT_DRAUGHTING.PROJECTION_DIRECTED_CALLOUT', 'EXPLICIT_DRAUGHTING.LEADER_DIRECTED_CALLOUT']) = 0; wr4: (SELF.related_draughting_callout.contents * SELF. relating_draughting_callout.contents) = SELF. related_draughting_callout.contents; END_ENTITY; -- dimension_callout_relationship ENTITY dimension_curve SUBTYPE OF (annotation_curve_occurrence); WHERE wr1: SIZEOF(USEDIN(SELF,'EXPLICIT_DRAUGHTING.' + 'DIMENSION_CURVE_TERMINATOR.ANNOTATED_DIMENSION_' + 'CURVE')) <= 2; wr2: SIZEOF(USEDIN(SELF,'EXPLICIT_DRAUGHTING.' + 'DIMENSION_CURVE_DIRECTED_CALLOUT.CONTENTS')) >= 1; wr3: (SIZEOF(QUERY ( dct_1 <* USEDIN(SELF,'DRAUGHTING_ELEMENT_' + 'SCHEMA.DIMENSION_CURVE_TERMINATOR.ANNOTATED_DIMENSION_' + 'CURVE') | (dct_1.role = origin) )) <= 1) AND (SIZEOF( QUERY ( dct_2 <* USEDIN(SELF,'DRAUGHTING_ELEMENT_' + 'SCHEMA.DIMENSION_CURVE_TERMINATOR.ANNOTATED_DIMENSION_' + 'CURVE') | (dct_2.role = target) )) <= 1); END_ENTITY; -- dimension_curve ENTITY dimension_curve_directed_callout SUBTYPE OF (draughting_callout); WHERE wr1: SIZEOF(QUERY ( d_c <* SELF\draughting_callout.contents | ( 'EXPLICIT_DRAUGHTING.DIMENSION_CURVE' IN TYPEOF(d_c)) )) = 1; wr2: SIZEOF(SELF\draughting_callout.contents) >= 2; END_ENTITY; -- dimension_curve_directed_callout ENTITY dimension_curve_terminator SUBTYPE OF (terminator_symbol); role : dimension_extent_usage; WHERE wr1: 'EXPLICIT_DRAUGHTING.DIMENSION_CURVE' IN TYPEOF(SELF\ terminator_symbol.annotated_curve); END_ENTITY; -- dimension_curve_terminator ENTITY dimension_pair SUBTYPE OF (draughting_callout_relationship); WHERE wr1: SELF.name IN ['chained','parallel']; wr2: SIZEOF(TYPEOF(SELF.relating_draughting_callout) * [ 'EXPLICIT_DRAUGHTING.ANGULAR_DIMENSION', 'EXPLICIT_DRAUGHTING.CURVE_DIMENSION', 'EXPLICIT_DRAUGHTING.DIAMETER_DIMENSION', 'EXPLICIT_DRAUGHTING.LINEAR_DIMENSION', 'EXPLICIT_DRAUGHTING.ORDINATE_DIMENSION', 'EXPLICIT_DRAUGHTING.RADIUS_DIMENSION']) = 1; wr3: SIZEOF(TYPEOF(SELF.related_draughting_callout) * [ 'EXPLICIT_DRAUGHTING.ANGULAR_DIMENSION', 'EXPLICIT_DRAUGHTING.CURVE_DIMENSION', 'EXPLICIT_DRAUGHTING.DIAMETER_DIMENSION', 'EXPLICIT_DRAUGHTING.LINEAR_DIMENSION', 'EXPLICIT_DRAUGHTING.ORDINATE_DIMENSION', 'EXPLICIT_DRAUGHTING.RADIUS_DIMENSION']) = 1; END_ENTITY; -- dimension_pair ENTITY dimensional_exponents; length_exponent : REAL; mass_exponent : REAL; time_exponent : REAL; electric_current_exponent : REAL; thermodynamic_temperature_exponent : REAL; amount_of_substance_exponent : REAL; luminous_intensity_exponent : REAL; END_ENTITY; -- dimensional_exponents ENTITY direction SUBTYPE OF (geometric_representation_item); direction_ratios : LIST [2:3] OF REAL; WHERE wr1: SIZEOF(QUERY ( tmp <* direction_ratios | (tmp <> 0) )) > 0; END_ENTITY; -- direction ENTITY document; id : identifier; name : label; description : text; kind : document_type; UNIQUE ur1 : id; END_ENTITY; -- document ENTITY document_reference ABSTRACT SUPERTYPE; assigned_document : document; source : label; END_ENTITY; -- document_reference ENTITY document_type; product_data_type : label; END_ENTITY; -- document_type ENTITY draughting_annotation_occurrence SUBTYPE OF (annotation_occurrence); WHERE curve_has_curve_style : (NOT ('EXPLICIT_DRAUGHTING.ANNOTATION_CURVE_OCCURRENCE' IN TYPEOF(SELF))) OR (SIZEOF( QUERY ( sty <* SELF\ styled_item.styles | (NOT (( SIZEOF(sty.styles) = 1) AND ('EXPLICIT_DRAUGHTING.CURVE_STYLE' IN TYPEOF(sty.styles[1])))) )) = 0); fill_area_has_fill_style : (NOT ('EXPLICIT_DRAUGHTING.ANNOTATION_FILL_AREA_OCCURRENCE' IN TYPEOF(SELF))) OR (SIZEOF( QUERY ( sty <* SELF\ styled_item.styles | (NOT (( SIZEOF(sty.styles) = 1) AND ('EXPLICIT_DRAUGHTING.FILL_AREA_STYLE' IN TYPEOF(sty.styles[1])))) )) = 0); styled_fill_boundaries : (NOT ('EXPLICIT_DRAUGHTING.ANNOTATION_FILL_AREA_OCCURRENCE' IN TYPEOF(SELF))) OR (SIZEOF( QUERY ( bound <* SELF\ styled_item.item\ annotation_fill_area. boundaries | (NOT (SIZEOF( QUERY ( si <* USEDIN(bound, 'EXPLICIT_DRAUGHTING.' + 'STYLED_ITEM.ITEM') | ('EXPLICIT_DRAUGHTING.ANNOTATION_CURVE_OCCURRENCE' IN TYPEOF(si)) )) > 0)) )) = 0); symbol_has_symbol_style : (NOT ('EXPLICIT_DRAUGHTING.ANNOTATION_SYMBOL_OCCURRENCE' IN TYPEOF(SELF))) OR (SIZEOF( QUERY ( sty <* SELF\ styled_item.styles | (NOT (( SIZEOF(sty.styles) = 1) AND ( SIZEOF(TYPEOF(sty.styles[1]) * ['EXPLICIT_DRAUGHTING.SYMBOL_STYLE','EXPLICIT_DRAUGHTING.NULL_STYLE']) = 1))) )) = 0); allowable_symbol_representations : (NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_SYMBOL_OCCURRENCE' IN TYPEOF(SELF)) AND ('EXPLICIT_DRAUGHTING.ANNOTATION_SYMBOL' IN TYPEOF(SELF\styled_item. item)))) OR (SIZEOF([ 'EXPLICIT_DRAUGHTING.' + 'DRAUGHTING_SYMBOL_REPRESENTATION', 'EXPLICIT_DRAUGHTING.' + 'DRAUGHTING_SUBFIGURE_REPRESENTATION'] * TYPEOF(SELF\styled_item. item\mapped_item. mapping_source. mapped_representation)) = 1); text_has_text_style : (NOT ('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF))) OR (SIZEOF( QUERY ( sty <* SELF\ styled_item.styles | (NOT (( SIZEOF(sty.styles) = 1) AND ('EXPLICIT_DRAUGHTING.TEXT_STYLE' IN TYPEOF(sty.styles[1])))) )) = 0); text_not_nested : (NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('EXPLICIT_DRAUGHTING.COMPOSITE_TEXT' IN TYPEOF(SELF\styled_item. item)))) OR (SIZEOF( QUERY ( text <* SELF\ styled_item.item\ composite_text.collected_text | (NOT ('EXPLICIT_DRAUGHTING.TEXT_LITERAL' IN TYPEOF(text))) )) = 0); allowable_text : NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND (SIZEOF( TYPEOF(SELF\styled_item.item) * ['EXPLICIT_DRAUGHTING.COMPOSITE_TEXT','EXPLICIT_DRAUGHTING.TEXT_LITERAL']) = 1)); text_alignment_literals : (NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('EXPLICIT_DRAUGHTING.TEXT_LITERAL' IN TYPEOF(SELF\styled_item. item)))) OR (SELF\styled_item .item\text_literal.alignment IN ['baseline left', 'baseline centre', 'baseline right']); text_alignment_composites : (NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('EXPLICIT_DRAUGHTING.COMPOSITE_TEXT' IN TYPEOF(SELF\styled_item. item)))) OR (SIZEOF( QUERY ( literal <* QUERY ( text <* SELF\ styled_item.item\ composite_text.collected_text | ('EXPLICIT_DRAUGHTING.TEXT_LITERAL' IN TYPEOF(text)) ) | (NOT ( literal.alignment IN [ 'baseline left', 'baseline centre', 'baseline right'])) )) = 0); text_literal_not_rotated : NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('EXPLICIT_DRAUGHTING.TEXT_LITERAL' IN TYPEOF(SELF\styled_item. item)) AND EXISTS(SELF\ styled_item.item\text_literal .placement\axis2_placement_2d .ref_direction)); literals_in_composites_not_rotated: (NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('EXPLICIT_DRAUGHTING.COMPOSITE_TEXT' IN TYPEOF(SELF\styled_item. item)))) OR (SIZEOF( QUERY ( literal <* QUERY ( text <* SELF\ styled_item.item\ composite_text.collected_text | ('EXPLICIT_DRAUGHTING.TEXT_LITERAL' IN TYPEOF(text)) ) | EXISTS( literal.placement\ axis2_placement_2d. ref_direction) )) = 0); single_text_alignment : (NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('EXPLICIT_DRAUGHTING.COMPOSITE_TEXT' IN TYPEOF(SELF\styled_item. item)))) OR check_text_alignment(SELF\ styled_item.item); single_text_font : (NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('EXPLICIT_DRAUGHTING.COMPOSITE_TEXT' IN TYPEOF(SELF\styled_item. item)))) OR check_text_font( SELF\styled_item.item); allowable_text_literals : (NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('EXPLICIT_DRAUGHTING.COMPOSITE_TEXT' IN TYPEOF(SELF\styled_item. item)))) OR (SIZEOF( QUERY ( literal <* QUERY ( text <* SELF\ styled_item.item\ composite_text.collected_text | ('EXPLICIT_DRAUGHTING.TEXT_LITERAL' IN TYPEOF(text)) ) | (NOT ( SIZEOF(TYPEOF(literal) * [ 'EXPLICIT_DRAUGHTING.' + 'TEXT_LITERAL_WITH_BLANKING_BOX', 'EXPLICIT_DRAUGHTING.' + 'TEXT_LITERAL_WITH_ASSOCIATED_CURVES']) = 0)) )) = 0); styled_text_literal_curves : (NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('EXPLICIT_DRAUGHTING.TEXT_LITERAL_WITH_ASSOCIATED_CURVES' IN TYPEOF(SELF\styled_item. item)))) OR (SIZEOF( QUERY ( crv <* SELF\ styled_item.item\text_literal_with_associated_curves .associated_curves | (NOT ( SIZEOF(QUERY ( si <* USEDIN( crv,'EXPLICIT_DRAUGHTING.' + 'STYLED_ITEM.ITEM') | ('EXPLICIT_DRAUGHTING.ANNOTATION_CURVE_OCCURRENCE' IN TYPEOF(si)) )) > 0)) )) = 0); styled_composite_text_curves : (NOT (('EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF(SELF)) AND ('EXPLICIT_DRAUGHTING.COMPOSITE_TEXT_WITH_ASSOCIATED_CURVES' IN TYPEOF(SELF\styled_item. item)))) OR (SIZEOF( QUERY ( crv <* SELF\ styled_item.item\composite_text_with_associated_curves .associated_curves | (NOT ( SIZEOF(QUERY ( si <* USEDIN( crv,'EXPLICIT_DRAUGHTING.' + 'STYLED_ITEM.ITEM') | ('EXPLICIT_DRAUGHTING.ANNOTATION_CURVE_OCCURRENCE' IN TYPEOF(si)) )) > 0)) )) = 0); curve_style_has_width : SIZEOF(QUERY ( cs <* QUERY ( sty <* SELF\ styled_item.styles | ('EXPLICIT_DRAUGHTING.CURVE_STYLE' IN TYPEOF(sty.styles[1])) ) | (NOT (('EXPLICIT_DRAUGHTING.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(cs.styles[1]\ curve_style.curve_width)) AND ('EXPLICIT_DRAUGHTING.POSITIVE_LENGTH_MEASURE' IN TYPEOF(cs.styles[1]\ curve_style.curve_width. value_component)))) )) = 0; tiling_constraints : SIZEOF(QUERY ( fas <* QUERY ( sty <* SELF\ styled_item.styles | ('EXPLICIT_DRAUGHTING.FILL_AREA_STYLE' IN TYPEOF(sty.styles[1])) ) | (NOT ((SIZEOF( QUERY ( fs <* fas.styles[1]\ fill_area_style.fill_styles | ('EXPLICIT_DRAUGHTING.FILL_AREA_STYLE_TILES' IN TYPEOF(fs)) )) <= 1) AND ( SIZEOF(QUERY ( fst <* QUERY ( fs <* fas.styles[1]\ fill_area_style.fill_styles | ('EXPLICIT_DRAUGHTING.FILL_AREA_STYLE_TILES' IN TYPEOF(fs)) ) | (NOT ( SIZEOF(fst.tiles) = 1)) )) = 0))) )) = 0; hatching_constraints : SIZEOF(QUERY ( fas <* QUERY ( sty <* SELF\ styled_item.styles | ('EXPLICIT_DRAUGHTING.FILL_AREA_STYLE' IN TYPEOF(sty.styles[1])) ) | (NOT (SIZEOF( QUERY ( fst <* QUERY ( fs <* fas.styles[1]\fill_area_style .fill_styles | ('EXPLICIT_DRAUGHTING.FILL_AREA_STYLE_HATCHING' IN TYPEOF(fs)) ) | (NOT (fst.point_of_reference_hatch_line :=: fst.pattern_start)) )) = 0)) )) = 0; text_style_constraint : SIZEOF(QUERY ( ts <* QUERY ( sty <* SELF\ styled_item.styles | ('EXPLICIT_DRAUGHTING.TEXT_STYLE' IN TYPEOF(sty.styles[1])) ) | (NOT ('EXPLICIT_DRAUGHTING.TEXT_STYLE_WITH_BOX_CHARACTERISTICS' IN TYPEOF(ts.styles[1]))) )) = 0; text_style_characteristics : SIZEOF(QUERY ( ts <* QUERY ( sty <* SELF\ styled_item.styles | (( 'EXPLICIT_DRAUGHTING.' + 'TEXT_STYLE_WITH_BOX_CHARACTERISTICS') IN TYPEOF(sty.styles[1])) ) | (NOT (SIZEOF(ts.styles[1]\text_style_with_box_characteristics .characteristics) = 4)) )) = 0; END_ENTITY; -- draughting_annotation_occurrence ENTITY draughting_approval_assignment SUBTYPE OF (approval_assignment); approved_items : SET [1:?] OF approved_item; WHERE wr1: SIZEOF(QUERY ( item <* approved_items | ( 'EXPLICIT_DRAUGHTING.DRAWING_REVISION' IN TYPEOF(item)) )) <= 1; END_ENTITY; -- draughting_approval_assignment ENTITY draughting_callout SUBTYPE OF (geometric_representation_item); contents : SET [1:?] OF draughting_callout_element; END_ENTITY; -- draughting_callout ENTITY draughting_callout_relationship; name : label; description : text; relating_draughting_callout : draughting_callout; related_draughting_callout : draughting_callout; END_ENTITY; -- draughting_callout_relationship ENTITY draughting_contract_assignment SUBTYPE OF (contract_assignment); items : SET [1:?] OF contracted_item; END_ENTITY; -- draughting_contract_assignment ENTITY draughting_drawing_revision SUBTYPE OF (drawing_revision); WHERE drawing_requires_sheets : (SIZEOF(USEDIN(SELF,'EXPLICIT_DRAUGHTING.AREA_IN_SET.IN_SET')) >= 1) AND (SIZEOF( QUERY ( ais <* USEDIN(SELF, 'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | (NOT ('EXPLICIT_DRAUGHTING.DRAWING_SHEET_REVISION' IN TYPEOF(ais.area))) )) = 0); drawing_approval_has_date : SIZEOF(QUERY ( app_ass <* USEDIN(SELF, 'EXPLICIT_DRAUGHTING.' + 'DRAUGHTING_APPROVAL_ASSIGNMENT.APPROVED_ITEMS') | (NOT (SIZEOF(USEDIN( app_ass.assigned_approval,'EXPLICIT_DRAUGHTING.APPROVAL_DATE_TIME.DATED_APPROVAL')) = 1)) )) = 0; sheet_approval_has_date : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF( QUERY ( app_ass <* USEDIN(ais .area,'EXPLICIT_DRAUGHTING.' + 'DRAUGHTING_APPROVAL_ASSIGNMENT.APPROVED_ITEMS') | (NOT (SIZEOF(USEDIN( app_ass.assigned_approval,'EXPLICIT_DRAUGHTING.APPROVAL_DATE_TIME.DATED_APPROVAL')) = 1)) )) = 0)) )) = 0; drawing_approval_has_authorization: SIZEOF(QUERY ( app_ass <* USEDIN(SELF, 'EXPLICIT_DRAUGHTING.' + 'DRAUGHTING_APPROVAL_ASSIGNMENT.APPROVED_ITEMS') | (NOT (SIZEOF(USEDIN( app_ass.assigned_approval, 'EXPLICIT_DRAUGHTING.' + 'APPROVAL_PERSON_ORGANIZATION.AUTHORIZED_APPROVAL')) >= 1)) )) = 0; sheet_approval_has_authorization : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF( QUERY ( app_ass <* USEDIN(ais .area,'EXPLICIT_DRAUGHTING.' + 'DRAUGHTING_APPROVAL_ASSIGNMENT.APPROVED_ITEMS') | (NOT (SIZEOF(USEDIN( app_ass.assigned_approval, 'EXPLICIT_DRAUGHTING.' + 'APPROVAL_PERSON_ORGANIZATION.AUTHORIZED_APPROVAL')) >= 1)) )) = 0)) )) = 0; drawing_title : SIZEOF(USEDIN(SELF,'EXPLICIT_DRAUGHTING.DRAUGHTING_TITLE.ITEMS')) <= 1; sheet_title : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF(USEDIN(ais.area, 'EXPLICIT_DRAUGHTING.' + 'DRAUGHTING_TITLE.ITEMS')) <= 1)) )) = 0; allowable_items_of_sheet : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF(QUERY ( item <* ais.area\representation.items | (NOT (SIZEOF(['EXPLICIT_DRAUGHTING.ANNOTATION_OCCURRENCE','EXPLICIT_DRAUGHTING.MAPPED_ITEM','EXPLICIT_DRAUGHTING.AXIS2_PLACEMENT','EXPLICIT_DRAUGHTING.PLANAR_BOX'] * TYPEOF(item)) = 1)) )) = 0)) )) = 0; sheet_contains_view_or_annotation : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF(QUERY ( item <* ais.area\representation.items | (SIZEOF(['EXPLICIT_DRAUGHTING.ANNOTATION_OCCURRENCE','EXPLICIT_DRAUGHTING.MAPPED_ITEM'] * TYPEOF(item)) = 1) )) > 0)) )) = 0; planar_box_in_sheet : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF(QUERY ( p_b <* QUERY ( item <* ais.area\ representation.items | ('EXPLICIT_DRAUGHTING.PLANAR_BOX' IN TYPEOF(item)) ) | (NOT ( SIZEOF(USEDIN(p_b, 'EXPLICIT_DRAUGHTING.' + 'PRESENTATION_SIZE.SIZE')) = 1)) )) = 0)) )) = 0; sheets_contain_views : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF(QUERY ( mi <* QUERY ( item <* ais.area\ representation.items | ('EXPLICIT_DRAUGHTING.MAPPED_ITEM' IN TYPEOF(item)) ) | (NOT ('EXPLICIT_DRAUGHTING.PRESENTATION_VIEW' IN TYPEOF(mi.mapping_source. mapped_representation))) )) = 0)) )) = 0; sheets_contain_placements : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF(QUERY ( a2p <* QUERY ( item <* ais.area\ representation.items | ('EXPLICIT_DRAUGHTING.AXIS2_PLACEMENT' IN TYPEOF(item)) ) | (NOT ( SIZEOF(USEDIN(a2p, 'EXPLICIT_DRAUGHTING.' + 'MAPPED_ITEM.MAPPING_TARGET')) > 0)) )) = 0)) )) = 0; sheets_have_unique_context : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.AREA_IN_SET.IN_SET') | (NOT (SIZEOF(ais.area\ representation. context_of_items. representations_in_context) = 1)) )) = 0; views_presented_once : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF(QUERY ( mi <* QUERY ( item <* ais.area\ representation.items | ('EXPLICIT_DRAUGHTING.MAPPED_ITEM' IN TYPEOF(item)) ) | (NOT ( SIZEOF(USEDIN(mi. mapping_source. mapped_representation,'EXPLICIT_DRAUGHTING.REPRESENTATION_MAP.' + 'MAPPED_REPRESENTATION')) = 1)) )) = 0)) )) = 0; allowable_items_of_view : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF(QUERY ( mi <* QUERY ( item <* ais.area\ representation.items | ('EXPLICIT_DRAUGHTING.MAPPED_ITEM' IN TYPEOF(item)) ) | (NOT ( SIZEOF(QUERY ( pv_item <* mi. mapping_source. mapped_representation\ representation.items | (NOT ( SIZEOF(['EXPLICIT_DRAUGHTING.ANNOTATION_OCCURRENCE','EXPLICIT_DRAUGHTING.CAMERA_IMAGE','EXPLICIT_DRAUGHTING.AXIS2_PLACEMENT'] * TYPEOF(pv_item)) = 1)) )) = 0)) )) = 0)) )) = 0; views_contain_one_projection : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF(QUERY ( mi <* QUERY ( item <* ais.area\ representation.items | ('EXPLICIT_DRAUGHTING.MAPPED_ITEM' IN TYPEOF(item)) ) | (NOT ( SIZEOF(QUERY ( pv_item <* mi. mapping_source. mapped_representation\ representation.items | ('EXPLICIT_DRAUGHTING.CAMERA_IMAGE' IN TYPEOF(pv_item)) )) = 1)) )) = 0)) )) = 0; views_contain_one_placement : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.IN_SET') | ( NOT (SIZEOF(QUERY ( mi <* QUERY ( item <* ais.area\ representation.items | ('EXPLICIT_DRAUGHTING.MAPPED_ITEM' IN TYPEOF(item)) ) | (NOT ( SIZEOF(QUERY ( a2p <* QUERY ( pv_item <* mi. mapping_source. mapped_representation\ representation.items | ('EXPLICIT_DRAUGHTING.AXIS2_PLACEMENT' IN TYPEOF(pv_item)) ) | ('EXPLICIT_DRAUGHTING.MAPPING_SOURCE.MAPPING_ORIGIN' IN ROLESOF(a2p)) )) = 1)) )) = 0)) )) = 0; views_have_unique_context : SIZEOF(QUERY ( ais <* USEDIN( SELF,'EXPLICIT_DRAUGHTING.AREA_IN_SET.IN_SET') | (NOT (SIZEOF( QUERY ( mi <* QUERY ( item <* ais.area\ representation.items | ('EXPLICIT_DRAUGHTING.MAPPED_ITEM' IN TYPEOF(item)) ) | (NOT ( SIZEOF(mi.mapping_source. mapped_representation\ representation. context_of_items. representations_in_context) = 1)) )) = 0)) )) = 0; END_ENTITY; -- draughting_drawing_revision ENTITY draughting_elements SUBTYPE OF (draughting_callout); WHERE wr1: SIZEOF(QUERY ( l_c <* QUERY ( con <* SELF.contents | ( 'EXPLICIT_DRAUGHTING.LEADER_CURVE' IN TYPEOF(con)) ) | (NOT (SIZEOF(QUERY ( ldc <* USEDIN(l_c,'EXPLICIT_DRAUGHTING.' + 'DRAUGHTING_CALLOUT.CONTENTS') | ( 'EXPLICIT_DRAUGHTING.LEADER_DIRECTED_CALLOUT' IN TYPEOF(ldc)) )) <= 1)) )) = 0; wr2: (NOT ('EXPLICIT_DRAUGHTING.DIMENSION_CURVE_DIRECTED_CALLOUT' IN TYPEOF(SELF))) OR (SIZEOF(QUERY ( con <* SELF.contents | ( 'EXPLICIT_DRAUGHTING.PROJECTION_CURVE' IN TYPEOF(con)) )) <= 2); wr3: SIZEOF(QUERY ( rc <* USEDIN(SELF, 'EXPLICIT_DRAUGHTING.DIMENSION_CALLOUT_' + 'RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | (rc.name = 'primary') )) <= 1; wr4: SIZEOF(QUERY ( rc <* USEDIN(SELF, 'EXPLICIT_DRAUGHTING.DIMENSION_CALLOUT_' + 'RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | (rc.name = 'secondary') )) <= 1; wr5: SIZEOF(QUERY ( sec <* QUERY ( rc <* USEDIN(SELF, 'EXPLICIT_DRAUGHTING.DIMENSION_CALLOUT_' + 'RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | (rc.name = 'secondary') ) | (NOT (SIZEOF(QUERY ( prim <* USEDIN(SELF, 'EXPLICIT_DRAUGHTING.DIMENSION_CALLOUT_' + 'RELATIONSHIP.RELATING_DRAUGHTING_CALLOUT') | (prim.name = 'primary') )) = 1)) )) = 0; END_ENTITY; -- draughting_elements ENTITY draughting_group_assignment SUBTYPE OF (group_assignment); items : SET [1:?] OF draughting_grouped_item; END_ENTITY; -- draughting_group_assignment ENTITY draughting_model SUBTYPE OF (representation); UNIQUE ur1 : name; WHERE wr1: SIZEOF(QUERY ( it <* SELF.items | (NOT (SIZEOF([ 'EXPLICIT_DRAUGHTING.MAPPED_ITEM', 'EXPLICIT_DRAUGHTING.STYLED_ITEM', 'EXPLICIT_DRAUGHTING.AXIS2_PLACEMENT'] * TYPEOF(it)) = 1)) )) = 0; wr2: SIZEOF(QUERY ( mi <* QUERY ( it <* SELF.items | ( 'EXPLICIT_DRAUGHTING.MAPPED_ITEM' IN TYPEOF(it)) ) | (NOT ( SIZEOF(['EXPLICIT_DRAUGHTING.SHAPE_REPRESENTATION', 'EXPLICIT_DRAUGHTING.DRAUGHTING_MODEL'] * TYPEOF(mi\ mapped_item.mapping_source.mapped_representation)) = 1)) )) = 0; wr3: SIZEOF(QUERY ( smi <* QUERY ( si <* QUERY ( it <* SELF.items | ('EXPLICIT_DRAUGHTING.STYLED_ITEM' IN TYPEOF(it)) ) | ( 'EXPLICIT_DRAUGHTING.MAPPED_ITEM' IN TYPEOF(si\styled_item. item)) ) | (NOT (('EXPLICIT_DRAUGHTING.SHAPE_REPRESENTATION' IN TYPEOF(smi\styled_item.item\mapped_item.mapping_source. mapped_representation)) AND (SIZEOF(QUERY ( sty <* smi\ styled_item.styles | (NOT (SIZEOF(QUERY ( psa <* sty.styles | (NOT ('EXPLICIT_DRAUGHTING.CURVE_STYLE' IN TYPEOF(psa))) )) = 1)) )) = 1))) )) = 0; END_ENTITY; -- draughting_model ENTITY draughting_organization_assignment SUBTYPE OF (organization_assignment); assigned_items : SET [1:?] OF draughting_organization_item; END_ENTITY; -- draughting_organization_assignment ENTITY draughting_person_and_organization_assignment SUBTYPE OF (person_and_organization_assignment); assigned_items : SET [1:?] OF draughting_organization_item; END_ENTITY; -- draughting_person_and_organization_assignment ENTITY draughting_person_assignment SUBTYPE OF (person_assignment); assigned_items : SET [1:?] OF draughting_organization_item; END_ENTITY; -- draughting_person_assignment ENTITY draughting_pre_defined_colour SUBTYPE OF (pre_defined_colour); WHERE wr1: SELF.name IN ['red','green','blue','yellow','magenta','cyan', 'black','white']; END_ENTITY; -- draughting_pre_defined_colour ENTITY draughting_pre_defined_curve_font SUBTYPE OF (pre_defined_curve_font); WHERE wr1: SELF.name IN ['continuous','chain','chain double dash','dashed', 'dotted']; END_ENTITY; -- draughting_pre_defined_curve_font ENTITY draughting_pre_defined_text_font SUBTYPE OF (pre_defined_text_font); WHERE wr1: SELF.name IN ['ISO 3098-1 font A','ISO 3098-1 font B']; END_ENTITY; -- draughting_pre_defined_text_font ENTITY draughting_presented_item SUBTYPE OF (presented_item); items : SET [1:?] OF draughting_presented_item_select; WHERE presented_item_presentation: SIZEOF(QUERY ( pir <* USEDIN(SELF, 'EXPLICIT_DRAUGHTING.' + 'PRESENTED_ITEM_REPRESENTATION.ITEM') | (NOT ('EXPLICIT_DRAUGHTING.DRAWING_REVISION' IN TYPEOF(pir.presentation))) )) = 0; END_ENTITY; -- draughting_presented_item ENTITY draughting_security_classification_assignment SUBTYPE OF (security_classification_assignment); assigned_items : SET [1:?] OF classified_item; END_ENTITY; -- draughting_security_classification_assignment ENTITY draughting_specification_reference SUBTYPE OF (document_reference); specified_items : SET [1:?] OF specified_item; WHERE wr1: SELF.assigned_document.kind.product_data_type = 'draughting specification'; END_ENTITY; -- draughting_specification_reference ENTITY draughting_subfigure_representation SUBTYPE OF (symbol_representation); WHERE wr1: SIZEOF(QUERY ( item <* SELF\representation.items | (NOT ( SIZEOF(['EXPLICIT_DRAUGHTING.ANNOTATION_OCCURRENCE', 'EXPLICIT_DRAUGHTING.DRAUGHTING_CALLOUT', 'EXPLICIT_DRAUGHTING.AXIS2_PLACEMENT'] * TYPEOF(item)) = 1)) )) = 0; wr2: SIZEOF(QUERY ( item <* SELF\representation.items | (SIZEOF([ 'EXPLICIT_DRAUGHTING.ANNOTATION_OCCURRENCE', 'EXPLICIT_DRAUGHTING.DRAUGHTING_CALLOUT'] * TYPEOF(item)) = 1) )) >= 1; wr3: SIZEOF(QUERY ( srm <* QUERY ( rm <* USEDIN(SELF, 'EXPLICIT_DRAUGHTING.' + 'REPRESENTATION_MAP.' + 'MAPPED_REPRESENTATION') | ( 'EXPLICIT_DRAUGHTING.SYMBOL_REPRESENTATION_MAP' IN TYPEOF(rm)) ) | (NOT (SIZEOF(QUERY ( a_s <* QUERY ( mi <* srm.map_usage | ('EXPLICIT_DRAUGHTING.ANNOTATION_SYMBOL' IN TYPEOF(mi)) ) | (NOT (SIZEOF(QUERY ( aso <* USEDIN(a_s, 'EXPLICIT_DRAUGHTING.' + 'STYLED_ITEM.ITEM') | (NOT (( 'EXPLICIT_DRAUGHTING.' + 'ANNOTATION_SUBFIGURE_OCCURRENCE') IN TYPEOF(aso))) )) = 0)) )) = 0)) )) > 0; wr4: NOT acyclic_mapped_item_usage(SELF); wr5: SIZEOF(SELF.context_of_items.representations_in_context) = 1; END_ENTITY; -- draughting_subfigure_representation ENTITY draughting_symbol_representation SUBTYPE OF (symbol_representation); UNIQUE ur1 : name; WHERE wr1: SIZEOF(QUERY ( item <* SELF\representation.items | (NOT ( SIZEOF(['EXPLICIT_DRAUGHTING.' + 'ANNOTATION_CURVE_OCCURRENCE','EXPLICIT_DRAUGHTING.' + 'ANNOTATION_SYMBOL_OCCURRENCE','EXPLICIT_DRAUGHTING.' + 'ANNOTATION_FILL_AREA_OCCURRENCE','EXPLICIT_DRAUGHTING.' + 'ANNOTATION_TEXT_OCCURRENCE','EXPLICIT_DRAUGHTING.' + 'AXIS2_PLACEMENT'] * TYPEOF(item)) = 1)) )) = 0; wr2: SIZEOF(QUERY ( item <* SELF\representation.items | (SIZEOF([ 'EXPLICIT_DRAUGHTING.' + 'ANNOTATION_CURVE_OCCURRENCE', 'EXPLICIT_DRAUGHTING.' + 'ANNOTATION_SYMBOL_OCCURRENCE', 'EXPLICIT_DRAUGHTING.' + 'ANNOTATION_FILL_AREA_OCCURRENCE', 'EXPLICIT_DRAUGHTING.' + 'ANNOTATION_TEXT_OCCURRENCE'] * TYPEOF(item)) = 1) )) >= 1; wr3: SIZEOF(QUERY ( item <* SELF\representation.items | ( 'EXPLICIT_DRAUGHTING.ANNOTATION_SUBFIGURE_OCCURRENCE' IN TYPEOF(item)) )) = 0; wr4: SIZEOF(QUERY ( srm <* QUERY ( rm <* USEDIN(SELF, 'EXPLICIT_DRAUGHTING.' + 'REPRESENTATION_MAP.' + 'MAPPED_REPRESENTATION') | ( 'EXPLICIT_DRAUGHTING.SYMBOL_REPRESENTATION_MAP' IN TYPEOF(rm)) ) | (NOT (SIZEOF(QUERY ( a_s <* QUERY ( mi <* srm.map_usage | ('EXPLICIT_DRAUGHTING.ANNOTATION_SYMBOL' IN TYPEOF(mi)) ) | (NOT (SIZEOF(QUERY ( aso <* USEDIN(a_s, 'EXPLICIT_DRAUGHTING.' + 'STYLED_ITEM.ITEM') | (NOT (( 'EXPLICIT_DRAUGHTING.' + 'ANNOTATION_SYMBOL_OCCURRENCE') IN TYPEOF(aso))) )) = 0)) )) = 0)) )) > 0; wr5: NOT acyclic_mapped_item_usage(SELF); wr6: SIZEOF(SELF.context_of_items.representations_in_context) = 1; END_ENTITY; -- draughting_symbol_representation ENTITY draughting_text_literal_with_delineation SUBTYPE OF (text_literal_with_delineation); WHERE wr1: SELF\text_literal_with_delineation.delineation IN ['underline', 'overline']; END_ENTITY; -- draughting_text_literal_with_delineation ENTITY draughting_title; items : SET [1:?] OF draughting_titled_item; language : label; contents : text; END_ENTITY; -- draughting_title ENTITY drawing_definition; drawing_number : identifier; drawing_type : OPTIONAL label; END_ENTITY; -- drawing_definition ENTITY drawing_revision SUBTYPE OF (presentation_set); revision_identifier : identifier; drawing_identifier : drawing_definition; intended_scale : OPTIONAL text; UNIQUE ur1 : revision_identifier, drawing_identifier; END_ENTITY; -- drawing_revision ENTITY drawing_sheet_layout SUBTYPE OF (draughting_symbol_representation); END_ENTITY; -- drawing_sheet_layout ENTITY drawing_sheet_revision SUBTYPE OF (presentation_area); revision_identifier : identifier; WHERE wr1: SIZEOF(QUERY ( item <* SELF\representation.items | (( 'EXPLICIT_DRAUGHTING.MAPPED_ITEM' IN TYPEOF(item)) AND ( 'EXPLICIT_DRAUGHTING.DRAWING_SHEET_REVISION' IN TYPEOF(item\ mapped_item.mapping_source.mapped_representation))) )) = 0; END_ENTITY; -- drawing_sheet_revision ENTITY drawing_sheet_revision_usage SUBTYPE OF (area_in_set); sheet_number : identifier; UNIQUE ur1 : sheet_number, in_set; WHERE wr1: ('EXPLICIT_DRAUGHTING.DRAWING_SHEET_REVISION' IN TYPEOF(SELF\ area_in_set.area)) AND ( 'EXPLICIT_DRAUGHTING.DRAWING_REVISION' IN TYPEOF(SELF\ area_in_set.in_set)); END_ENTITY; -- drawing_sheet_revision_usage ENTITY ellipse SUBTYPE OF (conic); semi_axis_1 : positive_length_measure; semi_axis_2 : positive_length_measure; END_ENTITY; -- ellipse ENTITY external_source; source_id : source_item; END_ENTITY; -- external_source ENTITY externally_defined_curve_font SUBTYPE OF (externally_defined_item); END_ENTITY; -- externally_defined_curve_font ENTITY externally_defined_hatch_style SUBTYPE OF (externally_defined_item, geometric_representation_item); END_ENTITY; -- externally_defined_hatch_style ENTITY externally_defined_item; item_id : source_item; source : external_source; END_ENTITY; -- externally_defined_item ENTITY externally_defined_symbol SUBTYPE OF (externally_defined_item); END_ENTITY; -- externally_defined_symbol ENTITY externally_defined_text_font SUBTYPE OF (externally_defined_item); END_ENTITY; -- externally_defined_text_font ENTITY externally_defined_tile_style SUBTYPE OF (externally_defined_item, geometric_representation_item); END_ENTITY; -- externally_defined_tile_style ENTITY fill_area_style; name : label; fill_styles : SET [1:?] OF fill_style_select; WHERE wr1: SIZEOF(QUERY ( fill_style <* SELF.fill_styles | (( 'EXPLICIT_DRAUGHTING.' + 'FILL_AREA_STYLE_COLOUR') IN TYPEOF(fill_style)) )) <= 1; END_ENTITY; -- fill_area_style ENTITY fill_area_style_colour; name : label; fill_colour : colour; END_ENTITY; -- fill_area_style_colour ENTITY fill_area_style_hatching SUBTYPE OF (geometric_representation_item); hatch_line_appearance : curve_style; start_of_next_hatch_line : one_direction_repeat_factor; point_of_reference_hatch_line : cartesian_point; pattern_start : cartesian_point; hatch_line_angle : plane_angle_measure; END_ENTITY; -- fill_area_style_hatching ENTITY fill_area_style_tile_symbol_with_style SUBTYPE OF (geometric_representation_item); symbol : annotation_symbol_occurrence; END_ENTITY; -- fill_area_style_tile_symbol_with_style ENTITY fill_area_style_tiles SUBTYPE OF (geometric_representation_item); tiling_pattern : two_direction_repeat_factor; tiles : SET [1:?] OF fill_area_style_tile_shape_select; tiling_scale : positive_ratio_measure; END_ENTITY; -- fill_area_style_tiles ENTITY geometric_curve_set SUBTYPE OF (geometric_set); WHERE wr1: SIZEOF(QUERY ( temp <* SELF\geometric_set.elements | ( 'EXPLICIT_DRAUGHTING.SURFACE' IN TYPEOF(temp)) )) = 0; END_ENTITY; -- geometric_curve_set ENTITY geometric_representation_context SUBTYPE OF (representation_context); coordinate_space_dimension : dimension_count; END_ENTITY; -- geometric_representation_context ENTITY geometric_representation_item SUPERTYPE OF (ONEOF (point,direction,vector,placement,curve, geometric_set)) SUBTYPE OF (representation_item); DERIVE dim : dimension_count := dimension_of(SELF); WHERE wr1: SIZEOF(QUERY ( using_rep <* using_representations(SELF) | (NOT ('EXPLICIT_DRAUGHTING.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(using_rep.context_of_items))) )) = 0; END_ENTITY; -- geometric_representation_item ENTITY geometric_set SUPERTYPE OF (geometric_curve_set) SUBTYPE OF (geometric_representation_item); elements : SET [1:?] OF geometric_set_select; END_ENTITY; -- geometric_set ENTITY geometrical_tolerance_callout SUBTYPE OF (draughting_callout); END_ENTITY; -- geometrical_tolerance_callout ENTITY geometrically_bounded_2d_wireframe_representation SUBTYPE OF (shape_representation); WHERE wr1: SELF.context_of_items\geometric_representation_context. coordinate_space_dimension = 2; wr2: SIZEOF(QUERY ( item <* SELF\representation.items | (NOT ( SIZEOF(TYPEOF(item) * [ 'EXPLICIT_DRAUGHTING.GEOMETRIC_CURVE_SET', 'EXPLICIT_DRAUGHTING.AXIS2_PLACEMENT_2D', 'EXPLICIT_DRAUGHTING.MAPPED_ITEM']) = 1)) )) = 0; wr3: SIZEOF(QUERY ( gcs <* QUERY ( item <* SELF\representation.items | ('EXPLICIT_DRAUGHTING.GEOMETRIC_CURVE_SET' IN TYPEOF(item)) ) | (NOT (SIZEOF(QUERY ( elem <* gcs\geometric_set.elements | (NOT (SIZEOF(TYPEOF(elem) * ['EXPLICIT_DRAUGHTING.LINE', 'EXPLICIT_DRAUGHTING.HYPERBOLA', 'EXPLICIT_DRAUGHTING.PARABOLA']) = 0)) )) = 0)) )) = 0; wr4: SIZEOF(QUERY ( mi <* QUERY ( item <* SELF\representation.items | ('EXPLICIT_DRAUGHTING.MAPPED_ITEM' IN TYPEOF(item)) ) | ( NOT ('EXPLICIT_DRAUGHTING.GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION' IN TYPEOF(mi\mapped_item.mapping_source. mapped_representation))) )) = 0; wr5: SIZEOF(QUERY ( gcs <* QUERY ( item <* SELF\representation.items | ('EXPLICIT_DRAUGHTING.GEOMETRIC_CURVE_SET' IN TYPEOF(item)) ) | (NOT (SIZEOF(QUERY ( pl <* QUERY ( elem <* gcs\ geometric_set.elements | ('EXPLICIT_DRAUGHTING.POLYLINE' IN TYPEOF(elem)) ) | (NOT (SIZEOF(pl\polyline.points) > 2)) )) = 0)) )) = 0; wr6: SIZEOF(QUERY ( item <* SELF\representation.items | (SIZEOF( TYPEOF(item) * ['EXPLICIT_DRAUGHTING.GEOMETRIC_CURVE_SET', 'EXPLICIT_DRAUGHTING.MAPPED_ITEM']) = 1) )) >= 1; wr7: SIZEOF(QUERY ( gcs <* QUERY ( item <* SELF.items | ( 'EXPLICIT_DRAUGHTING.GEOMETRIC_CURVE_SET' IN TYPEOF(item)) ) | (NOT (SIZEOF(QUERY ( pnt <* QUERY ( elem <* gcs\ geometric_set.elements | ('EXPLICIT_DRAUGHTING.POINT' IN TYPEOF(elem)) ) | (NOT (SIZEOF(TYPEOF(pnt) * [ 'EXPLICIT_DRAUGHTING.CARTESIAN_POINT', 'EXPLICIT_DRAUGHTING.POINT_ON_CURVE']) = 1)) )) = 0)) )) = 0; END_ENTITY; -- geometrically_bounded_2d_wireframe_representation ENTITY global_unit_assigned_context SUBTYPE OF (representation_context); units : SET [1:?] OF unit; END_ENTITY; -- global_unit_assigned_context ENTITY group; name : label; description : text; END_ENTITY; -- group ENTITY group_assignment ABSTRACT SUPERTYPE; assigned_group : group; END_ENTITY; -- group_assignment ENTITY group_relationship; name : label; description : text; relating_group : group; related_group : group; END_ENTITY; -- group_relationship ENTITY hyperbola SUBTYPE OF (conic); semi_axis : positive_length_measure; semi_imag_axis : positive_length_measure; END_ENTITY; -- hyperbola ENTITY invisibility; invisible_items : SET [1:?] OF invisible_item; END_ENTITY; -- invisibility ENTITY leader_curve SUBTYPE OF (annotation_curve_occurrence); WHERE wr1: SIZEOF(USEDIN(SELF,'EXPLICIT_DRAUGHTING.' + 'LEADER_DIRECTED_CALLOUT.CONTENTS')) >= 1; END_ENTITY; -- leader_curve ENTITY leader_directed_callout SUBTYPE OF (draughting_callout); WHERE wr1: SIZEOF(QUERY ( l_1 <* SELF\draughting_callout.contents | ( 'EXPLICIT_DRAUGHTING.LEADER_CURVE' IN TYPEOF(l_1)) )) >= 1; wr2: SIZEOF(SELF\draughting_callout.contents) >= 2; END_ENTITY; -- leader_directed_callout ENTITY leader_directed_dimension SUBTYPE OF (leader_directed_callout); WHERE wr1: SIZEOF(QUERY ( con <* SELF.contents | ( 'EXPLICIT_DRAUGHTING.LEADER_CURVE' IN TYPEOF(con)) )) = 1; END_ENTITY; -- leader_directed_dimension ENTITY leader_terminator SUBTYPE OF (terminator_symbol); WHERE wr1: 'EXPLICIT_DRAUGHTING.LEADER_CURVE' IN TYPEOF(SELF\ terminator_symbol.annotated_curve); END_ENTITY; -- leader_terminator ENTITY length_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1: 'EXPLICIT_DRAUGHTING.LENGTH_UNIT' IN TYPEOF(SELF\ measure_with_unit.unit_component); END_ENTITY; -- length_measure_with_unit ENTITY length_unit SUBTYPE OF (named_unit); WHERE wr1: (SELF\named_unit.dimensions.length_exponent = 1) AND (SELF\ named_unit.dimensions.mass_exponent = 0) AND (SELF\ named_unit.dimensions.time_exponent = 0) AND (SELF\ named_unit.dimensions.electric_current_exponent = 0) AND ( SELF\named_unit.dimensions. thermodynamic_temperature_exponent = 0) AND (SELF\named_unit .dimensions.amount_of_substance_exponent = 0) AND (SELF\ named_unit.dimensions.luminous_intensity_exponent = 0); END_ENTITY; -- length_unit ENTITY line SUBTYPE OF (curve); pnt : cartesian_point; dir : vector; WHERE wr1: dir.dim = pnt.dim; END_ENTITY; -- line ENTITY linear_dimension SUBTYPE OF (dimension_curve_directed_callout); END_ENTITY; -- linear_dimension ENTITY mapped_item SUBTYPE OF (representation_item); mapping_source : representation_map; mapping_target : representation_item; WHERE wr1: acyclic_mapped_representation(using_representations(SELF),[SELF]); END_ENTITY; -- mapped_item ENTITY measure_with_unit SUPERTYPE OF (ONEOF (length_measure_with_unit, plane_angle_measure_with_unit)); value_component : measure_value; unit_component : unit; WHERE wr1: valid_units(SELF); END_ENTITY; -- measure_with_unit ENTITY named_unit SUPERTYPE OF (ONEOF (si_unit,conversion_based_unit) ANDOR ONEOF ( length_unit,plane_angle_unit)); dimensions : dimensional_exponents; END_ENTITY; -- named_unit ENTITY offset_curve_2d SUBTYPE OF (curve); basis_curve : curve; distance : length_measure; self_intersect : LOGICAL; WHERE wr1: basis_curve.dim = 2; END_ENTITY; -- offset_curve_2d ENTITY one_direction_repeat_factor SUBTYPE OF (geometric_representation_item); repeat_factor : vector; END_ENTITY; -- one_direction_repeat_factor ENTITY ordinate_dimension SUBTYPE OF (projection_directed_callout); END_ENTITY; -- ordinate_dimension ENTITY organization; id : OPTIONAL identifier; name : label; description : text; END_ENTITY; -- organization ENTITY organization_assignment ABSTRACT SUPERTYPE; assigned_organization : organization; role : organization_role; END_ENTITY; -- organization_assignment ENTITY organization_role; name : label; END_ENTITY; -- organization_role ENTITY organizational_address SUBTYPE OF (address); organizations : SET [1:?] OF organization; description : text; END_ENTITY; -- organizational_address ENTITY parabola SUBTYPE OF (conic); focal_dist : length_measure; WHERE wr1: focal_dist <> 0; END_ENTITY; -- parabola ENTITY person; id : identifier; last_name : OPTIONAL label; first_name : OPTIONAL label; middle_names : OPTIONAL LIST [1:?] OF label; prefix_titles : OPTIONAL LIST [1:?] OF label; suffix_titles : OPTIONAL LIST [1:?] OF label; UNIQUE ur1 : id; WHERE wr1: EXISTS(last_name) OR EXISTS(first_name); END_ENTITY; -- person ENTITY person_and_organization; the_person : person; the_organization : organization; END_ENTITY; -- person_and_organization ENTITY person_and_organization_assignment ABSTRACT SUPERTYPE; assigned_person_and_organization : person_and_organization; role : person_and_organization_role; END_ENTITY; -- person_and_organization_assignment ENTITY person_and_organization_role; name : label; END_ENTITY; -- person_and_organization_role ENTITY person_assignment ABSTRACT SUPERTYPE; assigned_person : person; role : person_role; END_ENTITY; -- person_assignment ENTITY person_role; name : label; END_ENTITY; -- person_role ENTITY personal_address SUBTYPE OF (address); people : SET [1:?] OF person; description : text; END_ENTITY; -- personal_address ENTITY placement SUPERTYPE OF (axis2_placement_2d) SUBTYPE OF (geometric_representation_item); location : cartesian_point; END_ENTITY; -- placement ENTITY planar_box SUBTYPE OF (planar_extent); placement : axis2_placement; END_ENTITY; -- planar_box ENTITY planar_extent SUBTYPE OF (geometric_representation_item); size_in_x : length_measure; size_in_y : length_measure; END_ENTITY; -- planar_extent ENTITY plane_angle_measure_with_unit SUBTYPE OF (measure_with_unit); WHERE wr1: 'EXPLICIT_DRAUGHTING.PLANE_ANGLE_UNIT' IN TYPEOF(SELF\ measure_with_unit.unit_component); END_ENTITY; -- plane_angle_measure_with_unit ENTITY plane_angle_unit SUBTYPE OF (named_unit); WHERE wr1: (SELF\named_unit.dimensions.length_exponent = 0) AND (SELF\ named_unit.dimensions.mass_exponent = 0) AND (SELF\ named_unit.dimensions.time_exponent = 0) AND (SELF\ named_unit.dimensions.electric_current_exponent = 0) AND ( SELF\named_unit.dimensions. thermodynamic_temperature_exponent = 0) AND (SELF\named_unit .dimensions.amount_of_substance_exponent = 0) AND (SELF\ named_unit.dimensions.luminous_intensity_exponent = 0); END_ENTITY; -- plane_angle_unit ENTITY point SUPERTYPE OF (ONEOF (cartesian_point,point_on_curve)) SUBTYPE OF (geometric_representation_item); END_ENTITY; -- point ENTITY point_on_curve SUBTYPE OF (point); basis_curve : curve; point_parameter : parameter_value; END_ENTITY; -- point_on_curve ENTITY polyline SUBTYPE OF (bounded_curve); points : LIST [2:?] OF cartesian_point; END_ENTITY; -- polyline ENTITY pre_defined_colour SUBTYPE OF (pre_defined_item, colour); END_ENTITY; -- pre_defined_colour ENTITY pre_defined_curve_font SUBTYPE OF (pre_defined_item); END_ENTITY; -- pre_defined_curve_font ENTITY pre_defined_dimension_symbol SUBTYPE OF (pre_defined_symbol); WHERE wr1: SELF.name IN ['arc length','conical taper','counterbore', 'countersink','depth','diameter','plus minus','radius', 'slope','spherical diameter','spherical radius','square']; END_ENTITY; -- pre_defined_dimension_symbol ENTITY pre_defined_geometrical_tolerance_symbol SUBTYPE OF (pre_defined_symbol); WHERE wr1: SELF.name IN ['angularity','circular runout','circularity', 'concentricity','cylindricity','diameter','flatness', 'least material condition','maximum material condition', 'parallelism','perpendicularity','position', 'profile of a line','profile of a surface', 'projected tolerance zone','regardless of feature size', 'straightness','symmetry','target point','total runout']; END_ENTITY; -- pre_defined_geometrical_tolerance_symbol ENTITY pre_defined_item; name : label; END_ENTITY; -- pre_defined_item ENTITY pre_defined_point_marker_symbol SUBTYPE OF (pre_defined_symbol); WHERE wr1: SELF.name IN ['asterisk','circle','dot','plus','square', 'triangle','x']; END_ENTITY; -- pre_defined_point_marker_symbol ENTITY pre_defined_symbol SUBTYPE OF (pre_defined_item); END_ENTITY; -- pre_defined_symbol ENTITY pre_defined_terminator_symbol SUBTYPE OF (pre_defined_symbol); WHERE wr1: SELF.name IN ['blanked arrow','blanked box','blanked dot', 'dimension origin','filled arrow','filled box','filled dot', 'integral symbol','open arrow','slash','unfilled arrow']; END_ENTITY; -- pre_defined_terminator_symbol ENTITY pre_defined_text_font SUBTYPE OF (pre_defined_item); END_ENTITY; -- pre_defined_text_font ENTITY presentation_area SUBTYPE OF (presentation_representation); WHERE wr1: (SIZEOF(QUERY ( ais <* USEDIN(SELF,'EXPLICIT_DRAUGHTING.' + 'AREA_IN_SET.AREA') | (SIZEOF(USEDIN(ais, 'EXPLICIT_DRAUGHTING.' + 'PRESENTATION_SIZE.UNIT')) = 1) )) > 0) OR (SIZEOF(USEDIN(SELF,'EXPLICIT_DRAUGHTING.' + 'PRESENTATION_SIZE.UNIT')) = 1); END_ENTITY; -- presentation_area ENTITY presentation_layer_assignment; name : label; description : text; assigned_items : SET [1:?] OF layered_item; END_ENTITY; -- presentation_layer_assignment ENTITY presentation_layer_usage; assignment : presentation_layer_assignment; presentation : presentation_representation; UNIQUE ur1 : assignment, presentation; END_ENTITY; -- presentation_layer_usage ENTITY presentation_representation SUBTYPE OF (representation); WHERE wr1: SELF\representation.context_of_items\ geometric_representation_context.coordinate_space_dimension = 2; wr2: 'EXPLICIT_DRAUGHTING.GEOMETRIC_REPRESENTATION_CONTEXT' IN TYPEOF(SELF\representation.context_of_items); END_ENTITY; -- presentation_representation ENTITY presentation_set; INVERSE areas : SET [1:?] OF area_in_set FOR in_set; END_ENTITY; -- presentation_set ENTITY presentation_size; unit : presentation_size_assignment_select; size : planar_box; WHERE wr1: (('EXPLICIT_DRAUGHTING.PRESENTATION_REPRESENTATION' IN TYPEOF( SELF.unit)) AND item_in_context(SELF.size,SELF.unit\ representation.context_of_items)) OR (( 'EXPLICIT_DRAUGHTING.AREA_IN_SET' IN TYPEOF(SELF.unit)) AND (SIZEOF(QUERY ( ais <* SELF.unit\area_in_set.in_set.areas | (NOT item_in_context(SELF.size,ais.area\representation. context_of_items)) )) = 0)); END_ENTITY; -- presentation_size ENTITY presentation_style_assignment; styles : SET [1:?] OF presentation_style_select; WHERE wr1: SIZEOF(QUERY ( style1 <* SELF.styles | (NOT (SIZEOF( QUERY ( style2 <* (SELF.styles - style1) | (NOT ((TYPEOF( style1) <> TYPEOF(style2)) OR (SIZEOF([ 'EXPLICIT_DRAUGHTING.' + 'SURFACE_STYLE_USAGE', 'EXPLICIT_DRAUGHTING.' + 'EXTERNALLY_DEFINED_STYLE'] * TYPEOF(style1)) = 1))) )) = 0)) )) = 0; wr2: SIZEOF(QUERY ( style1 <* SELF.styles | ( 'EXPLICIT_DRAUGHTING.SURFACE_STYLE_USAGE' IN TYPEOF(style1)) )) <= 2; END_ENTITY; -- presentation_style_assignment ENTITY presentation_style_by_context SUBTYPE OF (presentation_style_assignment); style_context : style_context_select; END_ENTITY; -- presentation_style_by_context ENTITY presentation_view SUBTYPE OF (presentation_representation); END_ENTITY; -- presentation_view ENTITY presented_item ABSTRACT SUPERTYPE; END_ENTITY; -- presented_item ENTITY presented_item_representation; presentation : presentation_representation_select; item : presented_item; END_ENTITY; -- presented_item_representation ENTITY product; id : identifier; name : label; description : text; frame_of_reference : SET [1:?] OF product_context; UNIQUE ur1 : id; END_ENTITY; -- product ENTITY product_context SUBTYPE OF (application_context_element); discipline_type : label; END_ENTITY; -- product_context ENTITY product_definition; id : identifier; description : text; formation : product_definition_formation; frame_of_reference : product_definition_context; END_ENTITY; -- product_definition ENTITY product_definition_context SUBTYPE OF (application_context_element); life_cycle_stage : label; END_ENTITY; -- product_definition_context ENTITY product_definition_formation; id : identifier; description : text; of_product : product; UNIQUE ur1 : id, of_product; END_ENTITY; -- product_definition_formation ENTITY product_definition_shape SUBTYPE OF (property_definition); UNIQUE ur1 : definition; WHERE wr1: 'EXPLICIT_DRAUGHTING.CHARACTERIZED_PRODUCT_DEFINITION' IN TYPEOF(SELF\property_definition.definition); END_ENTITY; -- product_definition_shape ENTITY projection_curve SUBTYPE OF (annotation_curve_occurrence); END_ENTITY; -- projection_curve ENTITY projection_directed_callout SUBTYPE OF (draughting_callout); WHERE wr1: SIZEOF(QUERY ( p_1 <* SELF\draughting_callout.contents | ( 'EXPLICIT_DRAUGHTING.PROJECTION_CURVE' IN TYPEOF(p_1)) )) = 1; wr2: SIZEOF(SELF\draughting_callout.contents) >= 2; END_ENTITY; -- projection_directed_callout ENTITY property_definition; name : label; description : text; definition : characterized_definition; END_ENTITY; -- property_definition ENTITY property_definition_representation; definition : property_definition; used_representation : representation; END_ENTITY; -- property_definition_representation ENTITY quasi_uniform_curve SUBTYPE OF (b_spline_curve); END_ENTITY; -- quasi_uniform_curve ENTITY radius_dimension SUBTYPE OF (dimension_curve_directed_callout); WHERE wr1: SIZEOF(QUERY ( con <* SELF.contents | ( 'EXPLICIT_DRAUGHTING.PROJECTION_CURVE' IN TYPEOF(con)) )) <= 1; END_ENTITY; -- radius_dimension ENTITY rational_b_spline_curve SUBTYPE OF (b_spline_curve); weights_data : LIST [2:?] OF REAL; DERIVE weights : ARRAY [0:upper_index_on_control_points] OF REAL := list_to_array(weights_data,0, upper_index_on_control_points); WHERE wr1: SIZEOF(weights_data) = SIZEOF(SELF\b_spline_curve. control_points_list); wr2: curve_weights_positive(SELF); END_ENTITY; -- rational_b_spline_curve ENTITY representation; name : label; items : SET [1:?] OF representation_item; context_of_items : representation_context; END_ENTITY; -- representation ENTITY representation_context; context_identifier : identifier; context_type : text; INVERSE representations_in_context : SET [1:?] OF representation FOR context_of_items; END_ENTITY; -- representation_context ENTITY representation_item; name : label; WHERE wr1: SIZEOF(using_representations(SELF)) > 0; END_ENTITY; -- representation_item ENTITY representation_map; mapping_origin : representation_item; mapped_representation : representation; INVERSE map_usage : SET [1:?] OF mapped_item FOR mapping_source; WHERE wr1: item_in_context(SELF.mapping_origin,SELF.mapped_representation. context_of_items); END_ENTITY; -- representation_map ENTITY security_classification; name : label; purpose : text; security_level : security_classification_level; END_ENTITY; -- security_classification ENTITY security_classification_assignment ABSTRACT SUPERTYPE; assigned_security_classification : security_classification; END_ENTITY; -- security_classification_assignment ENTITY security_classification_level; name : label; END_ENTITY; -- security_classification_level ENTITY shape_definition_representation SUBTYPE OF (property_definition_representation); WHERE wr1: ('EXPLICIT_DRAUGHTING.SHAPE_DEFINITION' IN TYPEOF(SELF. definition.definition)) OR ( 'EXPLICIT_DRAUGHTING.PRODUCT_DEFINITION_SHAPE' IN TYPEOF( SELF.definition)); wr2: 'EXPLICIT_DRAUGHTING.SHAPE_REPRESENTATION' IN TYPEOF(SELF. used_representation); END_ENTITY; -- shape_definition_representation ENTITY shape_representation SUBTYPE OF (representation); END_ENTITY; -- shape_representation ENTITY si_unit SUBTYPE OF (named_unit); prefix : OPTIONAL si_prefix; name : si_unit_name; DERIVE SELF\named_unit.dimensions : dimensional_exponents := dimensions_for_si_unit(SELF.name); END_ENTITY; -- si_unit ENTITY structured_dimension_callout SUBTYPE OF (draughting_callout); WHERE wr1: SIZEOF(TYPEOF(SELF) * [ 'EXPLICIT_DRAUGHTING.DATUM_FEATURE_CALLOUT', 'EXPLICIT_DRAUGHTING.DATUM_TARGET_CALLOUT', 'EXPLICIT_DRAUGHTING.GEOMETRICAL_TOLERANCE_CALLOUT', 'EXPLICIT_DRAUGHTING.LEADER_DIRECTED_CALLOUT', 'EXPLICIT_DRAUGHTING.PROJECTION_DIRECTED_CALLOUT', 'EXPLICIT_DRAUGHTING.DIMENSION_CURVE_DIRECTED_CALLOUT']) = 0; wr2: SIZEOF(QUERY ( ato <* QUERY ( con <* SELF.contents | ( 'EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF( con)) ) | (NOT (ato\representation_item.name IN [ 'dimension value','tolerance value','unit text'])) )) = 0; wr3: SIZEOF(QUERY ( ato <* QUERY ( con <* SELF.contents | ( 'EXPLICIT_DRAUGHTING.ANNOTATION_TEXT_OCCURRENCE' IN TYPEOF( con)) ) | (ato\representation_item.name = 'dimension value') )) >= 1; wr4: SIZEOF(QUERY ( dcr <* USEDIN(SELF,'EXPLICIT_DRAUGHTING.' + 'DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP.' + 'RELATING_DRAUGHTING_CALLOUT') | (dcr.name = 'prefix') )) <= 1; wr5: SIZEOF(QUERY ( dcr <* USEDIN(SELF,'EXPLICIT_DRAUGHTING.' + 'DIMENSION_CALLOUT_COMPONENT_RELATIONSHIP.' + 'RELATING_DRAUGHTING_CALLOUT') | (dcr.name = 'suffix') )) <= 1; END_ENTITY; -- structured_dimension_callout ENTITY styled_item SUBTYPE OF (representation_item); styles : SET [1:?] OF presentation_style_assignment; item : representation_item; WHERE wr1: (SIZEOF(SELF.styles) = 1) XOR (SIZEOF(QUERY ( pres_style <* SELF.styles | (NOT (('EXPLICIT_DRAUGHTING.' + 'PRESENTATION_STYLE_BY_CONTEXT') IN TYPEOF(pres_style))) )) = 0); END_ENTITY; -- styled_item ENTITY symbol_colour; colour_of_symbol : colour; END_ENTITY; -- symbol_colour ENTITY symbol_representation SUBTYPE OF (representation); END_ENTITY; -- symbol_representation ENTITY symbol_representation_map SUBTYPE OF (representation_map); WHERE wr1: 'EXPLICIT_DRAUGHTING.SYMBOL_REPRESENTATION' IN TYPEOF(SELF\ representation_map.mapped_representation); wr2: 'EXPLICIT_DRAUGHTING.AXIS2_PLACEMENT' IN TYPEOF(SELF\ representation_map.mapping_origin); END_ENTITY; -- symbol_representation_map ENTITY symbol_style; name : label; style_of_symbol : symbol_style_select; END_ENTITY; -- symbol_style ENTITY symbol_target SUBTYPE OF (geometric_representation_item); placement : axis2_placement; x_scale : positive_ratio_measure; y_scale : positive_ratio_measure; END_ENTITY; -- symbol_target ENTITY terminator_symbol SUBTYPE OF (annotation_symbol_occurrence); annotated_curve : annotation_curve_occurrence; END_ENTITY; -- terminator_symbol ENTITY text_literal SUBTYPE OF (geometric_representation_item); literal : presentable_text; placement : axis2_placement; alignment : text_alignment; path : text_path; font : font_select; END_ENTITY; -- text_literal ENTITY text_literal_with_associated_curves SUBTYPE OF (text_literal); associated_curves : SET [1:?] OF curve; END_ENTITY; -- text_literal_with_associated_curves ENTITY text_literal_with_blanking_box SUBTYPE OF (text_literal); blanking : planar_box; END_ENTITY; -- text_literal_with_blanking_box ENTITY text_literal_with_delineation SUBTYPE OF (text_literal); delineation : text_delineation; END_ENTITY; -- text_literal_with_delineation ENTITY text_literal_with_extent SUBTYPE OF (text_literal); extent : planar_extent; END_ENTITY; -- text_literal_with_extent ENTITY text_style; name : label; character_appearance : character_style_select; END_ENTITY; -- text_style ENTITY text_style_for_defined_font; text_colour : colour; END_ENTITY; -- text_style_for_defined_font ENTITY text_style_with_box_characteristics SUBTYPE OF (text_style); characteristics : SET [1:4] OF box_characteristic_select; WHERE wr1: SIZEOF(QUERY ( c1 <* SELF.characteristics | (SIZEOF( QUERY ( c2 <* (SELF.characteristics - c1) | (TYPEOF(c1) = TYPEOF(c2)) )) > 0) )) = 0; END_ENTITY; -- text_style_with_box_characteristics ENTITY text_style_with_mirror SUBTYPE OF (text_style); mirror_placement : axis2_placement; END_ENTITY; -- text_style_with_mirror ENTITY trimmed_curve SUBTYPE OF (bounded_curve); basis_curve : curve; trim_1 : SET [1:2] OF trimming_select; trim_2 : SET [1:2] OF trimming_select; sense_agreement : BOOLEAN; master_representation : trimming_preference; WHERE wr1: (HIINDEX(trim_1) = 1) XOR (TYPEOF(trim_1[1]) <> TYPEOF(trim_1[2])); wr2: (HIINDEX(trim_2) = 1) XOR (TYPEOF(trim_2[1]) <> TYPEOF(trim_2[2])); END_ENTITY; -- trimmed_curve ENTITY two_direction_repeat_factor SUBTYPE OF (one_direction_repeat_factor); second_repeat_factor : vector; END_ENTITY; -- two_direction_repeat_factor ENTITY uniform_curve SUBTYPE OF (b_spline_curve); END_ENTITY; -- uniform_curve ENTITY vector SUBTYPE OF (geometric_representation_item); orientation : direction; magnitude : length_measure; WHERE wr1: magnitude >= 0; END_ENTITY; -- vector RULE application_context_requires_ap_definition FOR (application_context, application_protocol_definition); WHERE WR1: SIZEOF (QUERY (ac <* application_context | NOT (SIZEOF (QUERY (apd <* application_protocol_definition | (ac :=: apd.application) AND (apd.application_interpreted_model_schema_name = 'EXPLICIT_DRAUGHTING') AND (ac.application = 'draughting'))) = 1 ))) = 0; END_RULE; -- application_context_requires_ap_definition RULE approvals_are_assigned FOR (approval); WHERE WR1: SIZEOF (QUERY (a <* approval | NOT (SIZEOF (USEDIN (a, 'EXPLICIT_DRAUGHTING.' + 'APPROVAL_ASSIGNMENT.' + 'ASSIGNED_APPROVAL')) >= 1 )))=0; END_RULE; -- approvals_are_assigned RULE calendar_date_instantiation FOR (calendar_date); WHERE WR1: SIZEOF (QUERY (each <* calendar_date | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; -- calendar_date_instantiation RULE camera_usage_mapped_representation FOR (camera_usage); WHERE WR1: SIZEOF (QUERY (cu <* camera_usage | NOT ('EXPLICIT_DRAUGHTING.DRAUGHTING_MODEL' IN TYPEOF (cu.mapped_representation))))=0; END_RULE; -- camera_usage_mapped_representation RULE colour_rgb_instantiation FOR (colour_rgb); WHERE WR1: SIZEOF (QUERY (each <* colour_rgb | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; -- colour_rgb_instantiation RULE compatible_dimension FOR (cartesian_point, direction, representation_context, geometric_representation_context); WHERE WR1: SIZEOF(QUERY(x <* cartesian_point| SIZEOF(QUERY (y <* geometric_representation_context | item_in_context(x,y) AND (HIINDEX(x.coordinates) <> y.coordinate_space_dimension))) > 0 )) =0; WR2: SIZEOF(QUERY(x <* direction | SIZEOF( QUERY (y <* geometric_representation_context | item_in_context(x,y) AND (HIINDEX(x.direction_ratios) <> y.coordinate_space_dimension))) > 0 )) = 0; END_RULE; -- compatible_dimension RULE curve_font_usage FOR (curve_style_font, pre_defined_curve_font, externally_defined_curve_font); WHERE WR1: SIZEOF (QUERY (csf <* curve_style_font | NOT (SIZEOF (USEDIN (csf, 'EXPLICIT_DRAUGHTING.' + 'CURVE_STYLE.CURVE_FONT'))>=1)))=0; WR2: SIZEOF (QUERY (pdcf <* pre_defined_curve_font | NOT (SIZEOF (USEDIN (pdcf, 'EXPLICIT_DRAUGHTING.' + 'CURVE_STYLE.CURVE_FONT'))>=1)))=0; WR3: SIZEOF (QUERY (edcf <* externally_defined_curve_font | NOT (SIZEOF (USEDIN (edcf, 'EXPLICIT_DRAUGHTING.' + 'CURVE_STYLE.CURVE_FONT'))>=1)))=0; END_RULE; -- curve_font_usage RULE curve_style_font_instantiation FOR (curve_style_font); WHERE WR1: SIZEOF (QUERY (each <* curve_style_font | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE curve_style_instantiation FOR (curve_style); WHERE WR1: SIZEOF (QUERY (each <* curve_style | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE dimensionality_is_two FOR (geometric_representation_context); WHERE WR1: SIZEOF (QUERY (g <* geometric_representation_context | NOT ((g.coordinate_space_dimension = 2) )))=0; END_RULE; RULE draughting_model_annotation_layers FOR (draughting_model); WHERE WR1: SIZEOF (QUERY (dm <* draughting_model | NOT (SIZEOF (QUERY (ao <* QUERY (it <* dm\representation.items | ('EXPLICIT_DRAUGHTING.ANNOTATION_OCCURRENCE' IN TYPEOF (it))) | NOT (SIZEOF (USEDIN (ao, 'EXPLICIT_DRAUGHTING.' + 'PRESENTATION_LAYER_ASSIGNMENT.' + 'ASSIGNED_ITEMS')) >= 1) ))=0) ))=0; END_RULE; RULE draughting_sub_model_mapped_item FOR (mapped_item); WHERE WR1: SIZEOF (QUERY (sr <* QUERY (mi <* mapped_item | ('EXPLICIT_DRAUGHTING.SHAPE_REPRESENTATION' IN TYPEOF (mi.mapping_source.mapped_representation))) | NOT (SIZEOF (USEDIN (sr, '')) = SIZEOF (QUERY (mr <* USEDIN (sr, 'EXPLICIT_DRAUGHTING.' + 'REPRESENTATION.ITEMS') | SIZEOF (['EXPLICIT_DRAUGHTING.DRAUGHTING_MODEL', 'EXPLICIT_DRAUGHTING.SHAPE_REPRESENTATION'] * TYPEOF (mr))= 1))) ))=0; END_RULE; RULE draughting_subfigure_representation_layers FOR (draughting_subfigure_representation); WHERE WR1: SIZEOF (QUERY (dsr <* draughting_subfigure_representation | NOT (SIZEOF (QUERY (item <* dsr\representation.items | ('EXPLICIT_DRAUGHTING.ANNOTATION_OCCURRENCE' IN TYPEOF (item)) AND (SIZEOF (USEDIN (item, 'EXPLICIT_DRAUGHTING.' + 'PRESENTATION_LAYER_ASSIGNMENT.' + 'ASSIGNED_ITEMS'))=0) ))=0) ))=0; END_RULE; RULE drawing_sheet_annotation_layers FOR (drawing_sheet_revision); WHERE WR1: SIZEOF (QUERY (dsr <* drawing_sheet_revision | NOT (SIZEOF (QUERY (ao <* QUERY (it <* dsr\representation.items | ('EXPLICIT_DRAUGHTING.ANNOTATION_OCCURRENCE' IN TYPEOF (it))) | NOT (SIZEOF (USEDIN (ao, 'EXPLICIT_DRAUGHTING.' + 'PRESENTATION_LAYER_ASSIGNMENT.' + 'ASSIGNED_ITEMS')) >= 1) ))=0) ))=0; END_RULE; RULE drawing_sheet_layout_usage FOR (mapped_item); WHERE WR1: SIZEOF (QUERY (dsl <* QUERY (mi <* mapped_item | ('EXPLICIT_DRAUGHTING.DRAWING_SHEET_LAYOUT' IN TYPEOF (mi.mapping_source.mapped_representation))) | NOT (SIZEOF (USEDIN (dsl, '')) = SIZEOF (QUERY (dsr <* USEDIN (dsl, 'EXPLICIT_DRAUGHTING.' + 'REPRESENTATION.ITEMS') | ('EXPLICIT_DRAUGHTING.DRAWING_SHEET_REVISION' IN TYPEOF(dsr))))) )) = 0; END_RULE; RULE drawing_view_annotation_layers FOR (presentation_view); WHERE WR1: SIZEOF (QUERY (pv <* presentation_view | NOT (SIZEOF (QUERY (ao <* QUERY (it <* pv\representation.items | ('EXPLICIT_DRAUGHTING.ANNOTATION_OCCURRENCE' IN TYPEOF (it))) | NOT (SIZEOF (USEDIN (ao, 'EXPLICIT_DRAUGHTING.' + 'PRESENTATION_LAYER_ASSIGNMENT.' + 'ASSIGNED_ITEMS')) >= 1) ))=0) ))=0; END_RULE; RULE externally_defined_curve_font_instantiation FOR (externally_defined_curve_font); WHERE WR1: SIZEOF (QUERY (each <* externally_defined_curve_font | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE externally_defined_symbol_instantiation FOR (externally_defined_symbol); WHERE WR1: SIZEOF (QUERY (each <* externally_defined_symbol | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE externally_defined_text_font_instantiation FOR (externally_defined_text_font); WHERE WR1: SIZEOF (QUERY (each <* externally_defined_text_font | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE fill_area_style_colour_instantiation FOR (fill_area_style_colour); WHERE WR1: SIZEOF (QUERY (each <* fill_area_style_colour | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE fill_area_style_instantiation FOR (fill_area_style); WHERE WR1: SIZEOF (QUERY (each <* fill_area_style | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE fill_area_style_tile_symbol_constraint FOR (fill_area_style_tile_symbol_with_style); WHERE WR1: SIZEOF (QUERY (fast <* fill_area_style_tile_symbol_with_style | (('EXPLICIT_DRAUGHTING.DEFINED_SYMBOL' IN TYPEOF(fast.symbol\styled_item.item)) AND NOT ('EXPLICIT_DRAUGHTING.EXTERNALLY_DEFINED_SYMBOL' IN TYPEOF (fast.symbol\styled_item. item\defined_symbol.definition))) )) = 0; END_RULE; RULE geometric_set_layers FOR (geometric_set); WHERE WR1: SIZEOF (QUERY (gs <* geometric_set | NOT (SIZEOF (QUERY (element <* gs.elements | NOT (SIZEOF (USEDIN (element, 'EXPLICIT_DRAUGHTING.' + 'PRESENTATION_LAYER_ASSIGNMENT.' + 'ASSIGNED_ITEMS')) >=1 )))=0 )))=0; END_RULE; RULE global_length_and_angle_units FOR (global_unit_assigned_context); WHERE WR1: SIZEOF (QUERY (guac <* global_unit_assigned_context | NOT (SIZEOF (guac.units)=2)))=0; WR2: SIZEOF (QUERY (guac <* global_unit_assigned_context | NOT ((SIZEOF (QUERY (x <* guac.units | 'EXPLICIT_DRAUGHTING.LENGTH_UNIT' IN TYPEOF (x)))=1) AND (SIZEOF (QUERY (x <* guac.units | 'EXPLICIT_DRAUGHTING.PLANE_ANGLE_UNIT' IN TYPEOF (x)))=1) )))=0; END_RULE; RULE group_usage_constraint FOR (group, group_assignment); WHERE WR1: SIZEOF (QUERY (g <* group | NOT (SIZEOF (QUERY (ga <* group_assignment | g :=: ga.assigned_group )) = 1 ))) = 0; END_RULE; RULE measure_with_unit_instantiation FOR (measure_with_unit); WHERE WR1: SIZEOF (QUERY (m <* measure_with_unit | NOT (SIZEOF (USEDIN (m, '')) >= 1 ))) = 0; WR2: SIZEOF (QUERY (m <* measure_with_unit | NOT (SIZEOF (TYPEOF (m) * ['EXPLICIT_DRAUGHTING.LENGTH_MEASURE_WITH_UNIT', 'EXPLICIT_DRAUGHTING.PLANE_ANGLE_MEASURE_WITH_UNIT']) = 1 ))) = 0; END_RULE; RULE named_unit_instantiation FOR (named_unit); WHERE WR1: SIZEOF (QUERY (n <* named_unit | NOT (SIZEOF (USEDIN (n, '')) >= 1 ))) = 0; WR2: SIZEOF (QUERY (n <* named_unit | NOT (SIZEOF (TYPEOF (n) * ['EXPLICIT_DRAUGHTING.CONVERSION_BASED_UNIT', 'EXPLICIT_DRAUGHTING.LENGTH_UNIT', 'EXPLICIT_DRAUGHTING.PLANE_ANGLE_UNIT', 'EXPLICIT_DRAUGHTING.SI_UNIT']) = 2 ))) = 0; END_RULE; RULE pre_defined_colour_instantiation FOR (pre_defined_colour); WHERE WR1: SIZEOF (QUERY (each <* pre_defined_colour | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE pre_defined_curve_font_instantiation FOR (pre_defined_curve_font); WHERE WR1: SIZEOF (QUERY (each <* pre_defined_curve_font | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE pre_defined_symbol_instantiation FOR (pre_defined_symbol); WHERE WR1: SIZEOF (QUERY (each <* pre_defined_symbol | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE pre_defined_text_font_instantiation FOR (pre_defined_text_font); WHERE WR1: SIZEOF (QUERY (each <* pre_defined_text_font | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE presentation_layer_assignment_constraint FOR (presentation_layer_assignment); WHERE WR1: SIZEOF (QUERY (pla <* presentation_layer_assignment | NOT (SIZEOF (QUERY (item <* pla.assigned_items | NOT (SIZEOF (TYPEOF (item) * ['EXPLICIT_DRAUGHTING.POINT', 'EXPLICIT_DRAUGHTING.CURVE', 'EXPLICIT_DRAUGHTING.ANNOTATION_OCCURRENCE'])=1)))=0 )))=0; WR2: SIZEOF (QUERY (pla <* presentation_layer_assignment | NOT (SIZEOF (QUERY (pnt <* QUERY (item <* pla.assigned_items | ('EXPLICIT_DRAUGHTING.POINT' IN TYPEOF (item))) | NOT (SIZEOF (USEDIN (pnt, 'EXPLICIT_DRAUGHTING.' + 'GEOMETRIC_SET.ELEMENTS')) = 0) ))=0 )))=0; WR3: SIZEOF (QUERY (pla <* presentation_layer_assignment | NOT (SIZEOF (QUERY (crv <* QUERY (item <* pla.assigned_items | ('EXPLICIT_DRAUGHTING.CURVE' IN TYPEOF (item))) | NOT (SIZEOF (USEDIN (crv, 'EXPLICIT_DRAUGHTING.' + 'GEOMETRIC_SET.ELEMENTS')) = 0) ))=0 )))=0; WR4: SIZEOF (QUERY (pla <* presentation_layer_assignment | NOT (SIZEOF (QUERY (ao <* QUERY (item <* pla.assigned_items | ('EXPLICIT_DRAUGHTING.ANNOTATION_OCCURRENCE' IN TYPEOF (item))) | NOT (SIZEOF (QUERY (ur <* using_representations(ao) | NOT (SIZEOF (TYPEOF(ur) * ['EXPLICIT_DRAUGHTING.' + 'DRAUGHTING_SUBFIGURE_REPRESENTATION', 'EXPLICIT_DRAUGHTING.DRAUGHTING_MODEL', 'EXPLICIT_DRAUGHTING.DRAWING_SHEET_REVISION', 'EXPLICIT_DRAUGHTING.PRESENTATION_VIEW']) = 1 )))=0 )))=0 )))=0; END_RULE; RULE presentation_layer_assignment_requires_usage FOR (presentation_layer_assignment, presentation_layer_usage); WHERE WR1: SIZEOF (QUERY (e <* presentation_layer_assignment | NOT (SIZEOF (QUERY (s <* presentation_layer_usage | e :=: s.assignment )) = 1 ))) = 0; END_RULE; RULE presentation_of_product_definition_formation FOR (product_definition_formation); WHERE WR1: SIZEOF (QUERY (pdf <* product_definition_formation | NOT ( (SIZEOF (USEDIN (pdf, 'EXPLICIT_DRAUGHTING.' + 'DRAUGHTING_PRESENTED_ITEM.ITEMS'))>=1) OR (SIZEOF (QUERY (pd <* USEDIN (pdf, 'EXPLICIT_DRAUGHTING.' + 'PRODUCT_DEFINITION.FORMATION') | NOT ( SIZEOF (QUERY (pds <* QUERY (prop_def <* USEDIN (pd, 'EXPLICIT_DRAUGHTING.' + 'PROPERTY_DEFINITION.DEFINITION') | 'EXPLICIT_DRAUGHTING.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (prop_def)) | NOT ( SIZEOF (QUERY (pdr <* USEDIN (pds, 'EXPLICIT_DRAUGHTING.' + 'PROPERTY_DEFINITION_REPRESENTATION.' + 'DEFINITION') | 'EXPLICIT_DRAUGHTING.SHAPE_DEFINITION_REPRESENTATION' IN TYPEOF (pdr))) >= 1 ))) = 0 ))) = 0 ) ))) = 0; END_RULE; RULE presentation_size_constraint FOR (presentation_size); WHERE WR1: SIZEOF (QUERY ( ps <* presentation_size | NOT ('EXPLICIT_DRAUGHTING.' + 'DRAWING_SHEET_REVISION' IN TYPEOF (ps.unit))))=0; END_RULE; RULE presentation_style_by_context_constraint FOR (presentation_style_by_context); WHERE WR1: SIZEOF (QUERY (psbc <* presentation_style_by_context | NOT ('EXPLICIT_DRAUGHTING.PRESENTATION_VIEW' IN TYPEOF (psbc.style_context) )))=0; END_RULE; RULE presentation_style_by_context_instantiation FOR (presentation_style_by_context); WHERE WR1: SIZEOF (QUERY (each <* presentation_style_by_context | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE presentation_view_presented_once FOR (presentation_view, drawing_sheet_revision); WHERE WR1: SIZEOF (QUERY (pv <* presentation_view | NOT ( SIZEOF (QUERY (rm <* USEDIN (pv, 'EXPLICIT_DRAUGHTING.' + 'REPRESENTATION_MAP.' + 'MAPPED_REPRESENTATION') | NOT ( SIZEOF (QUERY (mi <* rm.map_usage | NOT ( SIZEOF (QUERY (dsr <* drawing_sheet_revision | (mi IN dsr\representation.items))) = 1 ))) = 0 ))) = 0 ))) = 0; END_RULE; RULE product_definition_instantiation FOR (product_definition); WHERE WR1: SIZEOF (QUERY (each <* product_definition | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE product_requires_version FOR (product, product_definition_formation); WHERE WR1: SIZEOF (QUERY (e <* product | NOT (SIZEOF (QUERY (s <* product_definition_formation | e :=: s.of_product )) >= 1 ))) = 0; END_RULE; RULE product_shape_has_representations FOR (product_definition_shape); WHERE WR1: SIZEOF (QUERY (pds <* product_definition_shape | NOT (SIZEOF (USEDIN (pds, 'EXPLICIT_DRAUGHTING.' + 'PROPERTY_DEFINITION_REPRESENTATION.' + 'DEFINITION')) >= 1 ))) = 0; END_RULE; RULE representation_context_global_units FOR (representation_context); WHERE WR1: SIZEOF (QUERY (rc <* representation_context | NOT ('EXPLICIT_DRAUGHTING.' + 'GLOBAL_UNIT_ASSIGNED_CONTEXT' IN TYPEOF (rc) )))=0; END_RULE; RULE representation_instantiation FOR (representation); WHERE WR1: SIZEOF (QUERY (each <* representation | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE sheets_belong_to_one_drawing FOR (drawing_sheet_revision, drawing_sheet_revision_usage); WHERE WR1: SIZEOF (QUERY (dsr <* drawing_sheet_revision | NOT (SIZEOF (QUERY (usage <* drawing_sheet_revision_usage | dsr :=: usage.area )) = 1 ))) = 0; END_RULE; RULE styled_curve FOR (styled_item); WHERE WR1: SIZEOF (QUERY (crv <* QUERY (si <* styled_item | ('EXPLICIT_DRAUGHTING.CURVE' IN TYPEOF (si.item))) | NOT (SIZEOF (QUERY (sty <* crv.styles | NOT ((SIZEOF (sty.styles)=1) AND ('EXPLICIT_DRAUGHTING.CURVE_STYLE' IN TYPEOF (sty.styles[1])) )))=0 )))=0; END_RULE; RULE subtype_mandatory_annotation_occurrence FOR (annotation_occurrence); WHERE WR1: SIZEOF (QUERY (ao <* annotation_occurrence | NOT ('EXPLICIT_DRAUGHTING.DRAUGHTING_ANNOTATION_OCCURRENCE' IN TYPEOF (ao)) ))=0; END_RULE; RULE subtype_mandatory_camera_image FOR (camera_image); WHERE WR1: SIZEOF (QUERY (ci <* camera_image | NOT ('EXPLICIT_DRAUGHTING.CAMERA_IMAGE_2D_WITH_SCALE' IN TYPEOF (ci) )))=0; END_RULE; RULE subtype_mandatory_draughting_callout FOR (draughting_callout); WHERE WR1: SIZEOF (QUERY (dc <* draughting_callout | NOT ('EXPLICIT_DRAUGHTING.DRAUGHTING_ELEMENTS' IN TYPEOF (dc)) ))=0; END_RULE; RULE subtype_mandatory_drawing_revision FOR (drawing_revision); WHERE WR1: SIZEOF (QUERY (dr <* drawing_revision | NOT ('EXPLICIT_DRAUGHTING.DRAUGHTING_DRAWING_REVISION' IN TYPEOF (dr)) ))=0; END_RULE; RULE subtype_mandatory_pre_defined_colour FOR (pre_defined_colour); WHERE WR1: SIZEOF (QUERY (pdc <* pre_defined_colour | NOT ('EXPLICIT_DRAUGHTING.DRAUGHTING_PRE_DEFINED_COLOUR' IN TYPEOF (pdc))))=0; END_RULE; RULE subtype_mandatory_pre_defined_curve_font FOR (pre_defined_curve_font); WHERE WR1: SIZEOF (QUERY (pdcf <* pre_defined_curve_font | NOT ('EXPLICIT_DRAUGHTING.DRAUGHTING_PRE_DEFINED_CURVE_FONT' IN TYPEOF (pdcf))))=0; END_RULE; RULE subtype_mandatory_pre_defined_symbol FOR (pre_defined_symbol); WHERE WR1: SIZEOF (QUERY (pds <* pre_defined_symbol | NOT (SIZEOF (TYPEOF (pds) * ['EXPLICIT_DRAUGHTING.' + 'PRE_DEFINED_GEOMETRICAL_TOLERANCE_SYMBOL', 'EXPLICIT_DRAUGHTING.' + 'PRE_DEFINED_DIMENSION_SYMBOL', 'EXPLICIT_DRAUGHTING.' + 'PRE_DEFINED_POINT_MARKER_SYMBOL', 'EXPLICIT_DRAUGHTING.' + 'PRE_DEFINED_TERMINATOR_SYMBOL']) =1 ))) = 0; END_RULE; RULE subtype_mandatory_pre_defined_text_font FOR (pre_defined_text_font); WHERE WR1: SIZEOF (QUERY (pdtf <* pre_defined_text_font | NOT ('EXPLICIT_DRAUGHTING.DRAUGHTING_PRE_DEFINED_TEXT_FONT' IN TYPEOF (pdtf))))=0; END_RULE; RULE subtype_mandatory_shape_representation FOR (shape_representation); WHERE WR1: SIZEOF (QUERY (sr <* shape_representation | NOT (('EXPLICIT_DRAUGHTING.' + 'GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION') IN TYPEOF (sr) )))=0; END_RULE; RULE symbol_colour_instantiation FOR (symbol_colour); WHERE WR1: SIZEOF (QUERY (each <* symbol_colour | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE terminator_symbol_constraint FOR (terminator_symbol); WHERE WR1: SIZEOF (QUERY (ts <* terminator_symbol | (('EXPLICIT_DRAUGHTING.DEFINED_SYMBOL' IN TYPEOF(ts.item)) AND NOT ('EXPLICIT_DRAUGHTING.PRE_DEFINED_TERMINATOR_SYMBOL' IN TYPEOF (ts.item\defined_symbol.definition))) )) = 0; END_RULE; RULE text_font_usage FOR (pre_defined_text_font, externally_defined_text_font); WHERE WR1: SIZEOF (QUERY (pdtf <* pre_defined_text_font | NOT (SIZEOF (USEDIN (pdtf, 'EXPLICIT_DRAUGHTING.' + 'TEXT_LITERAL.FONT'))>=1 )))=0; WR2: SIZEOF (QUERY (edtf <* externally_defined_text_font | NOT (SIZEOF (USEDIN (edtf, 'EXPLICIT_DRAUGHTING.' + 'TEXT_LITERAL.FONT'))>=1 )))=0; END_RULE; RULE text_style_for_defined_font_instantiation FOR (text_style_for_defined_font); WHERE WR1: SIZEOF (QUERY (each <* text_style_for_defined_font | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE text_style_instantiation FOR (text_style); WHERE WR1: SIZEOF (QUERY (each <* text_style | NOT (SIZEOF (USEDIN (each, '')) >= 1 ))) = 0; END_RULE; RULE use_of_geometrically_bounded_2d_wireframe_representation FOR (geometrically_bounded_2d_wireframe_representation, mapped_item); WHERE WR1: SIZEOF (QUERY (gbwr <* geometrically_bounded_2d_wireframe_representation | NOT ( SIZEOF (QUERY (mi <* mapped_item | mi.mapping_source.mapped_representation :=: gbwr)) >= 1 ))) = 0; WR2: SIZEOF (QUERY (gbwr_map <* QUERY (mi <* mapped_item | ('EXPLICIT_DRAUGHTING.' + 'GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION') IN TYPEOF (mi.mapping_source.mapped_representation)) | NOT ( SIZEOF (QUERY (rep <* USEDIN (gbwr_map, 'EXPLICIT_DRAUGHTING.' + 'REPRESENTATION.ITEMS') | NOT (SIZEOF (['EXPLICIT_DRAUGHTING.DRAUGHTING_MODEL', 'EXPLICIT_DRAUGHTING.' + 'GEOMETRICALLY_BOUNDED_2D_WIREFRAME_REPRESENTATION'] * TYPEOF (rep)) = 1 ))) = 0 ))) = 0; END_RULE; FUNCTION acyclic_composite_text(start_composite : composite_text; child_text : SET [1:?] OF text_or_character) : LOGICAL; LOCAL i : INTEGER; local_composite_text : SET [0:?] OF composite_text; local_annotation_text : SET [0:?] OF annotation_text; local_children : SET [0:?] OF text_or_character; END_LOCAL; local_composite_text := QUERY (child <* child_text | ('PRESENTATION_DEFINITION_SCHEMA.COMPOSITE_TEXT' IN TYPEOF (child))); IF (SIZEOF (local_composite_text) > 0) THEN REPEAT i := 1 TO HIINDEX (local_composite_text); IF (start_composite :=: local_composite_text[i]) THEN RETURN (FALSE); END_IF; END_REPEAT; END_IF; local_children := child_text; IF (SIZEOF (local_composite_text)) > 0 THEN REPEAT i := 1 TO HIINDEX (local_composite_text); local_children := local_children + local_composite_text[i].collected_text; END_REPEAT; END_IF; local_annotation_text := QUERY (child <* child_text | ('PRESENTATION_DEFINITION_SCHEMA.ANNOTATION_TEXT' IN TYPEOF (child))); IF (SIZEOF (local_annotation_text) > 0) THEN REPEAT i := 1 TO HIINDEX (local_annotation_text); local_children := local_children + QUERY (item <* local_annotation_text[i]\mapped_item. mapping_source.mapped_representation.items | SIZEOF(['PRESENTATION_DEFINITION_SCHEMA.ANNOTATION_TEXT', 'PRESENTATION_DEFINITION_SCHEMA.COMPOSITE_TEXT'] * TYPEOF(item)) > 0); END_REPEAT; END_IF; IF (local_children :<>: child_text) THEN RETURN (acyclic_composite_text (start_composite, local_children)); ELSE RETURN (TRUE); END_IF; END_FUNCTION; FUNCTION acyclic_mapped_item_usage (rep: representation) : BOOLEAN; LOCAL items : SET OF representation_item; i : INTEGER; END_LOCAL; items := QUERY (item <* rep.items | 'DRAUGHTING_ANNOTATION_AIC.MAPPED_ITEM' IN TYPEOF (item)); IF SIZEOF (items) = 0 THEN RETURN (FALSE); ELSE REPEAT i := 1 TO HIINDEX (items); IF items[i]\mapped_item.mapping_source.mapped_representation :=: rep THEN RETURN (TRUE); ELSE RETURN (acyclic_mapped_item_usage (items[i]\mapped_item.mapping_source.mapped_representation)); END_IF; END_REPEAT; RETURN (FALSE); END_IF; END_FUNCTION; FUNCTION acyclic_mapped_representation (parent_set : SET OF representation; children_set : SET OF representation_item) : BOOLEAN; LOCAL x,y : SET OF representation_item; i : INTEGER; END_LOCAL; x := QUERY(z <* children_set | 'REPRESENTATION_SCHEMA.MAPPED_ITEM' IN TYPEOF(z)); IF SIZEOF(x) > 0 THEN REPEAT i := 1 TO HIINDEX(x); IF x[i]\mapped_item.mapping_source.mapped_representation IN parent_set THEN RETURN (FALSE); END_IF; IF NOT acyclic_mapped_representation (parent_set + x[i]\mapped_item.mapping_source.mapped_representation, x[i]\mapped_item.mapping_source.mapped_representation.items) THEN RETURN (FALSE); END_IF; END_REPEAT; END_IF; x := children_set - x; IF SIZEOF(x) > 0 THEN REPEAT i := 1 TO HIINDEX(x); y := QUERY(z <* bag_to_set( USEDIN(x[i], '')) | 'REPRESENTATION_SCHEMA.REPRESENTATION_ITEM' IN TYPEOF(z)); IF NOT acyclic_mapped_representation(parent_set, y) THEN RETURN (FALSE); END_IF; END_REPEAT; END_IF; RETURN (TRUE); END_FUNCTION; FUNCTION aspect_ratio (p : planar_box) : positive_ratio_measure; RETURN (p.size_in_x / p.size_in_y); END_FUNCTION; FUNCTION bag_to_set (the_bag : BAG OF GENERIC : intype) : SET OF GENERIC : intype; LOCAL the_set: SET OF GENERIC : intype := []; i : INTEGER; END_LOCAL; IF SIZEOF (the_bag) > 0 THEN REPEAT i := 1 to HIINDEX (the_bag); the_set := the_set + the_bag [i]; END_REPEAT; END_IF; RETURN (the_set); END_FUNCTION; FUNCTION build_2axes(ref_direction : direction) : LIST [2:2] OF direction; LOCAL u : LIST[2:2] OF direction; END_LOCAL; u[1] := NVL(normalise(ref_direction), direction([1.0,0.0])); u[2] := orthogonal_complement(u[1]); RETURN(u); END_FUNCTION; FUNCTION check_text_alignment (ct : composite_text) : BOOLEAN; LOCAL a : SET OF text_alignment := []; i : INTEGER; END_LOCAL; REPEAT i := 1 TO HIINDEX (ct.collected_text); a := a + [ct.collected_text[i].alignment]; END_REPEAT; RETURN (SIZEOF (a)=1); END_FUNCTION; FUNCTION check_text_font (ct : composite_text) : BOOLEAN; LOCAL f : SET OF font_select := []; i : INTEGER; END_LOCAL; REPEAT i := 1 TO HIINDEX (ct.collected_text); f := f + [ct.collected_text[i].font]; END_REPEAT; RETURN (SIZEOF (f) <= 1); END_FUNCTION; FUNCTION constraints_param_b_spline(degree, up_knots, up_cp : INTEGER; knot_mult : LIST OF INTEGER; knots : LIST OF parameter_value) : BOOLEAN; LOCAL result : BOOLEAN := TRUE; k,l,sum : INTEGER; END_LOCAL; sum := knot_mult[1]; REPEAT i := 2 TO up_knots; sum := sum + knot_mult[i]; END_REPEAT; IF (degree < 1) OR (up_knots < 2) OR (up_cp < degree) OR (sum <> (degree + up_cp + 2)) THEN result := FALSE; RETURN(result); END_IF; k := knot_mult[1]; IF (k < 1) OR (k > degree + 1) THEN result := FALSE; RETURN(result); END_IF; REPEAT i := 2 TO up_knots; IF (knot_mult[i] < 1) OR (knots[i] <= knots[i-1]) THEN result := FALSE; RETURN(result); END_IF; k := knot_mult[i]; IF (i < up_knots) AND (k > degree) THEN result := FALSE; RETURN(result); END_IF; IF (i = up_knots) AND (k > degree + 1) THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; RETURN(result); END_FUNCTION; FUNCTION curve_weights_positive(b: rational_b_spline_curve) : BOOLEAN; LOCAL result : BOOLEAN := TRUE; END_LOCAL; REPEAT i := 0 TO b.upper_index_on_control_points; IF b.weights[i] <= 0.0 THEN result := FALSE; RETURN(result); END_IF; END_REPEAT; RETURN(result); END_FUNCTION; FUNCTION derive_dimensional_exponents (x : unit) : dimensional_exponents; LOCAL i : INTEGER; result : dimensional_exponents := dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); END_LOCAL; IF 'MEASURE_SCHEMA.DERIVED_UNIT' IN TYPEOF(x) THEN -- x is a derived unit REPEAT i := LOINDEX(x.elements) TO HIINDEX(x.elements); result.length_exponent := result.length_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.length_exponent); result.mass_exponent := result.mass_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.mass_exponent); result.time_exponent := result.time_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.time_exponent); result.electric_current_exponent := result.electric_current_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.electric_current_exponent); result.thermodynamic_temperature_exponent := result.thermodynamic_temperature_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.thermodynamic_temperature_exponent); result.amount_of_substance_exponent := result.amount_of_substance_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.amount_of_substance_exponent); result.luminous_intensity_exponent := result.luminous_intensity_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.luminous_intensity_exponent); END_REPEAT; ELSE -- x is a unitless or a named unit result := x.dimensions; END_IF; RETURN (result); END_FUNCTION; FUNCTION dimension_of(item : geometric_representation_item) : dimension_count; LOCAL x : SET OF representation; y : representation_context; END_LOCAL; x := using_representations(item); y := x[1].context_of_items; RETURN (y\geometric_representation_context.coordinate_space_dimension); END_FUNCTION; FUNCTION dimensions_for_si_unit (n : si_unit_name) : dimensional_exponents; CASE n OF metre : RETURN (dimensional_exponents (1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); gram : RETURN (dimensional_exponents (0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0)); second : RETURN (dimensional_exponents (0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0)); ampere : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0)); kelvin : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0)); mole : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)); candela : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)); radian : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); steradian : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); hertz : RETURN (dimensional_exponents (0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0)); newton : RETURN (dimensional_exponents (1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)); pascal : RETURN (dimensional_exponents (-1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)); joule : RETURN (dimensional_exponents (2.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)); watt : RETURN (dimensional_exponents (2.0, 1.0, -3.0, 0.0, 0.0, 0.0, 0.0)); coulomb : RETURN (dimensional_exponents (0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0)); volt : RETURN (dimensional_exponents (2.0, 1.0, -3.0, -1.0, 0.0, 0.0, 0.0)); farad : RETURN (dimensional_exponents (-2.0, -1.0, 4.0, 1.0, 0.0, 0.0, 0.0)); ohm : RETURN (dimensional_exponents (2.0, 1.0, -3.0, -2.0, 0.0, 0.0, 0.0)); siemens : RETURN (dimensional_exponents (-2.0, -1.0, 3.0, 2.0, 0.0, 0.0, 0.0)); weber : RETURN (dimensional_exponents (2.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0)); tesla : RETURN (dimensional_exponents (0.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0)); henry : RETURN (dimensional_exponents (2.0, 1.0, -2.0, -2.0, 0.0, 0.0, 0.0)); degree_Celsius : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0)); lumen : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)); lux : RETURN (dimensional_exponents (-2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)); becquerel : RETURN (dimensional_exponents (0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0)); gray : RETURN (dimensional_exponents (2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0)); sievert : RETURN (dimensional_exponents (2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0)); END_CASE; END_FUNCTION; FUNCTION item_in_context (item : representation_item; cntxt : representation_context) : BOOLEAN; LOCAL i : INTEGER; y : BAG OF representation_item; END_LOCAL; IF SIZEOF(USEDIN(item,'REPRESENTATION_SCHEMA.REPRESENTATION.ITEMS') * cntxt.representations_in_context) > 0 THEN RETURN (TRUE); ELSE y := QUERY(z <* USEDIN (item , '') | 'REPRESENTATION_SCHEMA.REPRESENTATION_ITEM' IN TYPEOF(z)); IF SIZEOF(y) > 0 THEN REPEAT i := 1 TO HIINDEX(y); IF item_in_context(y[i], cntxt) THEN RETURN (TRUE); END_IF; END_REPEAT; END_IF; END_IF; RETURN (FALSE); END_FUNCTION; FUNCTION leap_year(year : year_number) : BOOLEAN; IF ((((year MOD 4) = 0) AND ((year MOD 100) <> 0)) OR ((year MOD 400) = 0)) THEN RETURN(TRUE); ELSE RETURN(FALSE); END_IF; END_FUNCTION; FUNCTION list_to_array(lis : LIST [0:?] OF GENERIC : T; low,u : INTEGER) : ARRAY[low:u] OF GENERIC : T; LOCAL n : INTEGER; res : ARRAY [low:u] OF GENERIC : T; END_LOCAL; n := SIZEOF(lis); IF (n <> (u-low +1)) THEN RETURN(?); ELSE REPEAT i := 1 TO n; res[low+i-1] := lis[i]; END_REPEAT; RETURN(res); END_IF; END_FUNCTION; FUNCTION normalise (arg : vector_or_direction) : vector_or_direction; LOCAL ndim : INTEGER; v : direction; result : vector_or_direction; vec : vector; mag : REAL; END_LOCAL; IF NOT EXISTS (arg) THEN result := ?; ELSE ndim := arg.dim; IF 'GEOMETRY_SCHEMA.VECTOR' IN TYPEOF(arg) THEN BEGIN vec := arg; v := arg.orientation; IF arg.magnitude = 0.0 THEN RETURN(?); ELSE vec.magnitude := 1.0; END_IF; END; ELSE v := arg; END_IF; mag := 0.0; REPEAT i := 1 TO ndim; mag := mag + v.direction_ratios[i]*v.direction_ratios[i]; END_REPEAT; IF mag > 0.0 THEN mag := SQRT(mag); REPEAT i := 1 TO ndim; v.direction_ratios[i] := v.direction_ratios[i]/mag; END_REPEAT; IF 'GEOMETRY_SCHEMA.VECTOR' IN TYPEOF(arg) THEN vec.orientation := v; result := vec; ELSE result := v; END_IF; ELSE RETURN(?); END_IF; END_IF; RETURN (result); END_FUNCTION; FUNCTION orthogonal_complement(vec : direction) : direction; LOCAL result : direction; END_LOCAL; IF (vec.dim <> 2) OR NOT EXISTS (vec) THEN RETURN(?); ELSE result.direction_ratios[1] := -vec.direction_ratios[2]; result.direction_ratios[2] := vec.direction_ratios[1]; RETURN(result); END_IF; END_FUNCTION; FUNCTION using_representations (item : representation_item) : SET OF representation; LOCAL results : SET OF representation; result_bag : BAG OF representation; intermediate_items : SET OF representation_item; i : INTEGER; END_LOCAL; result_bag := USEDIN(item,'REPRESENTATION_SCHEMA.REPRESENTATION.ITEMS'); IF SIZEOF(result_bag) > 0 THEN REPEAT i := 1 TO HIINDEX(result_bag); results := results + result_bag[i]; END_REPEAT; END_IF; intermediate_items := QUERY(z <* bag_to_set( USEDIN(item , '')) | 'REPRESENTATION_SCHEMA.REPRESENTATION_ITEM' IN TYPEOF(z)); IF SIZEOF(intermediate_items) > 0 THEN REPEAT i := 1 TO HIINDEX(intermediate_items); results := results + using_representations(intermediate_items[i]); END_REPEAT; END_IF; RETURN (results); END_FUNCTION; FUNCTION valid_calendar_date (date : calendar_date) : LOGICAL; IF NOT ({1 <= date.day_component <= 31}) THEN RETURN(FALSE); END_IF; CASE date.month_component OF 4 : RETURN({ 1<= date.day_component <= 30}); 6 : RETURN({ 1<= date.day_component <= 30}); 9 : RETURN({ 1<= date.day_component <= 30}); 11 : RETURN({ 1<= date.day_component <= 30}); 2 : BEGIN IF (leap_year(date.year_component)) THEN RETURN({ 1<= date.day_component <= 29}); ELSE RETURN({ 1<= date.day_component <= 28}); END_IF; END; OTHERWISE : RETURN(TRUE); END_CASE; END_FUNCTION; FUNCTION valid_units ( m : measure_with_unit ) : BOOLEAN ; IF 'MEASURE_SCHEMA.LENGTH_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.MASS_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.TIME_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.ELECTRIC_CURRENT_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.THERMODYNAMIC_TEMPERATURE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.AMOUNT_OF_SUBSTANCE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.LUMINOUS_INTENSITY_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.PLANE_ANGLE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.SOLID_ANGLE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.AREA_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.VOLUME_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.RATIO_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.POSITIVE_LENGTH_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.POSITIVE_PLANE_ANGLE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; RETURN (TRUE); END_FUNCTION; END_SCHEMA; -- explicit_draughting