Integrated application resource: Mechanical features ISO 10303-113:2021(E)
© ISO

Cover page
Table of contents
Copyright
Foreword
Introduction
1 Scope
2 Normative references
3 Terms, definitions and abbreviated terms
    3.1 Terms and definitions
    3.2 Abbreviated terms

4 Counterbore countersink
   4.1 General
   4.2 Fundamental concepts and assumptions
   4.3 Counterbore countersink type definitions
   4.4 Counterbore countersink entity definitions
   4.5 Counterbore countersink subtype constraint definition
5 Machining feature
   5.1 General
   5.2 Fundamental concepts and assumptions
   5.3 Machining feature type definition
   5.4 Machining feature entity definitions
   5.5 Machining feature subtype constraint definition
   5.6 Machining feature rule definitions
6 Mechanical design
   6.1 General
   6.2 Fundamental concepts and assumptions
   6.3 Mechanical design type definitions
   6.4 Mechanical design entity definitions
   6.5 Mechanical design function definitions
   6.6 Mechanical design rule definitions

A Short names of entities
B Information object registration
C Computer interpretable listings
D EXPRESS-G diagrams
E Technical discussion
F Change history
Bibliography
Index

(*
ISO/TC 184/SC 4/WG 12 N10600 - ISO 10303-113 Mechanical features - EXPRESS
*)



SCHEMA machining_feature_schema;

REFERENCE FROM counterbore_countersink_schema   -- ISO 10303-113
  (explicit_composite_hole,
   explicit_round_hole);

REFERENCE FROM external_reference_schema   -- ISO 10303-41
  (externally_defined_item);

REFERENCE FROM geometry_schema   -- ISO 10303-42
  (bounded_curve,
   direction,
   plane,
   placement,
   point);

REFERENCE FROM measure_schema   -- ISO 10303-41
  (count_measure,
   length_measure_with_unit,
   measure_with_unit,
   named_unit,
   plane_angle_measure_with_unit,
   ratio_measure_with_unit);

REFERENCE FROM product_definition_schema   -- ISO 10303-41
  (product_definition);

REFERENCE FROM product_property_definition_schema   -- ISO 10303-41
  (characterized_object,
   product_definition_shape,
   property_definition,
   shape_aspect,
   shape_aspect_relationship);

REFERENCE FROM product_property_representation_schema   -- ISO 10303-41
  (get_property_definition_representations,
   property_definition_representation,
   shape_representation);

REFERENCE FROM qualified_measure_schema   -- ISO 10303-45
  (descriptive_representation_item,
   measure_representation_item);

REFERENCE FROM shape_aspect_definition_schema   -- ISO 10303-47
  (composite_shape_aspect,
   feature_definition,
   instanced_feature,
   shape_representation_with_parameters);

REFERENCE FROM topology_schema   -- ISO 10303-42
  (edge_curve,
   face_surface,
   oriented_face,
   path);


TYPE machining_feature_definition = SELECT
   (boss,
    compound_feature,
    externally_defined_feature_definition,
    flat_face,
    gear,
    marking,
    outer_round,
    outside_profile,
    pocket,
    protrusion,
    removal_volume,
    replicate_feature,
    revolved_profile,
    rib_top,
    round_hole,
    rounded_end,
    spherical_cap,
    step,
    slot,
    thread,
    turned_knurl);
END_TYPE;

ENTITY applied_area
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(SELF.of_shape));
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (( 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr. used_representation)) ) | (NOT({2 <= SIZEOF(impl_rep.used_representation.items) <= 3} ) ) )) = 0)) )) = 0);
  WR4: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | NOT (srwp_i.name IN ['orientation','effective length', 'maximum length']) )) > 0 ) )) = 0 ) )) = 0;
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'effective length')) )) = 1)) )) = 0)) )) <= 1);
  WR6: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'maximum length')) )) <= 1)) )) = 0)) )) = 0);
  WR7: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')) )) = 1)) )) = 0)) )) = 0);
END_ENTITY;

ENTITY boss
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SELF\characterized_object.description IN ['circular', 'complex', 'rectangular'];
  WR2: SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'boss height occurrence') AND (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'path feature component usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | ('TOPOLOGY_SCHEMA.PATH_FEATURE_COMPONENT' IN TYPEOF (sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'linear') AND (sdr.name = 'boss height'))) = 1))) = 1))) = 0;
  WR3: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ({1 <= SIZEOF(pdr.used_representation.items) <= 2} ) )) = 1 )) = 1;
  WR4: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'fillet radius'))) = SIZEOF(pdr.used_representation.items)) )) = 1 )) = 1;
  WR5: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF ( ['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'fillet radius'))) <= 1))) = 0))) = 0;
  WR6: (NOT (SELF\characterized_object.description = 'circular')) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'circular profile occurrence') AND (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | 'MACHINING_FEATURE_SCHEMA.CIRCULAR_CLOSED_PROFILE' IN TYPEOF (sdr.relating_shape_aspect))) = 1))) = 1))) = 0);
  WR7: SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'top condition occurrence') AND (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'boss top usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.BOSS_TOP' IN TYPEOF(fcr.relating_shape_aspect)) ) )) = 1)) )) = 1)) )) = 0;
  WR8: (NOT (SELF\characterized_object.description = 'circular')) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'change in diameter occurrence') AND (SIZEOF (QUERY (fcr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'taper usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar))) | (('MACHINING_FEATURE_SCHEMA.TAPER' IN TYPEOF (fcr.related_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.BOSS' IN TYPEOF (fcr.relating_shape_aspect))) ) )= 1))) <= 1))) = 0);
  WR9: (NOT (SELF\characterized_object.description = 'complex')) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'enclosed boundary occurrence') AND (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | SIZEOF (['MACHINING_FEATURE_SCHEMA.NGON_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.CLOSED_PATH_PROFILE'] * TYPEOF (sdr.relating_shape_aspect)) = 1)) = 1)))= 1))) = 0);
  WR10: (NOT (SELF\characterized_object.description IN ['complex','rectangular'])) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'change in boundary occurrence') AND (SIZEOF (QUERY (fcr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (sar.description = 'taper usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar))) | (('MACHINING_FEATURE_SCHEMA.TAPER' IN TYPEOF (fcr.related_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.BOSS' IN TYPEOF (fcr.relating_shape_aspect)) AND (fcr.related_shape_aspect.description IN ['angle taper','directed taper'])) )) = 1))) <= 1))) = 0);
  WR11: (NOT (SELF\characterized_object.description = 'rectangular')) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'rectangular profile occurrence') AND (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | 'MACHINING_FEATURE_SCHEMA.RECTANGULAR_CLOSED_PROFILE' IN TYPEOF (sdr.relating_shape_aspect))) = 1))) = 1))) = 0);
  WR12: SIZEOF (QUERY(pdr <* get_property_definition_representations (SELF) | ( 'MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.used_representation.name ='maximum feature limit'))) >=0;
END_ENTITY;

ENTITY boss_top
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SELF.description IN ['planar','complex']);
  WR3: ((NOT (SELF.description = 'planar')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.DIRECTION_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0));
  WR4: ((NOT (SELF.description = 'planar')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.LOCATION_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0));
  WR5: (NOT (SELF.description = 'complex')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation) )) = 1)) )) = 0);
  WR6: (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATING_SHAPE_ASPECT') | ((sar.description = 'boss top usage') AND (sar.name IN ['boss height start','boss height end']))AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) | ((fcr.related_shape_aspect.description = 'top condition occurrence') AND ('MACHINING_FEATURE_SCHEMA.BOSS' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND ('MACHINING_FEATURE_SCHEMA.BOSS_TOP' IN TYPEOF(fcr.relating_shape_aspect)) ) )) >= 1);
  WR7: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) <= 1)) )) = 0);
  WR8: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)) )) = 0)) )) = 0);
  WR9: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF ( ['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'top radius'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY chamfer
  SUBTYPE OF (transition_feature);
WHERE
  WR1: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'chamfer face')) )) <= 1)) )) = 0);
  WR2: (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) ) | (('MACHINING_FEATURE_SCHEMA.CHAMFER_OFFSET' IN TYPEOF(fcr.related_shape_aspect))AND ('MACHINING_FEATURE_SCHEMA.CHAMFER' IN TYPEOF(fcr.relating_shape_aspect)) AND (fcr.related_shape_aspect.description = 'first offset') ) )) = 1);
  WR3: (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) ) | (('MACHINING_FEATURE_SCHEMA.CHAMFER_OFFSET' IN TYPEOF(fcr.related_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.CHAMFER' IN TYPEOF(fcr.relating_shape_aspect))AND (fcr.related_shape_aspect.description = 'second offset')) )) = 1);
END_ENTITY;

ENTITY chamfer_offset
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: (SELF.description IN ['first offset','second offset']);
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)) )) = 0)) )) = 0);
  WR4: ((NOT (SELF.description = 'first offset')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'offset amount')) )) = 1)) )) = 0)) )) = 0));
  WR5: ((NOT (SELF.description = 'first offset')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'first face shape')) )) <= 1)) )) = 0));
  WR6: ((NOT (SELF.description = 'second offset')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'offset amount')) OR ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'offset angle'))) )) = 1)) )) = 0)) )) = 0));
  WR7: ((NOT (SELF.description = 'second offset')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'second face shape')) )) <= 1)) )) = 0));
  WR8: (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar)) ) | (('MACHINING_FEATURE_SCHEMA.CHAMFER' IN TYPEOF(sdr.relating_shape_aspect))AND ('MACHINING_FEATURE_SCHEMA.CHAMFER_OFFSET' IN TYPEOF(sdr.related_shape_aspect))) )) = 1);
END_ENTITY;

ENTITY circular_closed_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (( 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)) )) = 0)) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | NOT(SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')) )) = 1) )) = 0)) )) = 0);
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'diameter')) )) = 1)) )) = 0)) )) = 0);
END_ENTITY;

ENTITY circular_pattern
  SUBTYPE OF (replicate_feature);
WHERE
  WR1: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN (pds,'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATING_SHAPE_ASPECT') | ((('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar))) ) | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT' IN TYPEOF(sdr.related_shape_aspect)) )) = 1)) )) <= 3)) )) = 0);
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT ((SIZEOF (impl_rep.used_representation.items) >= 3) AND (SIZEOF(impl_rep.used_representation.items) <= 5))) )) = 0)) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF( ['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'diameter')) )) <= 1)) )) = 0)) )) = 0);
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF( ['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'base feature rotation')) )) <= 1)) )) = 0)) )) = 0);
  WR6: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('MEASURE_SCHEMA.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'number of features')) )) = 1)) )) = 0)) )) = 0);
  WR7: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF( ['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'angular spacing'))))= 1)) )) = 0)) )) = 0);
  WR8: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')) )) = 1)) )) = 0)) )) = 0);
END_ENTITY;

ENTITY closed_path_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)) )) = 0)) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')) )) = 1)) )) = 0)) )) = 0);
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('TOPOLOGY_SCHEMA.PATH_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
END_ENTITY;

ENTITY composite_hole
  SUBTYPE OF (compound_feature);
WHERE
  WR1: ('COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SELF\characterized_object.description IN ['counterbore', 'countersunk']);
  WR2: ('COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF(QUERY ( pds <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY ( csa <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (SIZEOF(QUERY ( sar <* csa.component_relationships | ((('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND ('MACHINING_FEATURE_SCHEMA.ROUND_HOLE' IN TYPEOF(sar.related_shape_aspect))) ))) = 2)) )) = 1)) )) = 1);
  WR3: ('COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR ((NOT (SELF\characterized_object.description = 'countersunk')) OR (SIZEOF(QUERY ( pds <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY ( csa <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (SIZEOF(QUERY ( sar <* csa.component_relationships | (('MACHINING_FEATURE_SCHEMA.ROUND_HOLE' IN TYPEOF(sar.related_shape_aspect)) AND (NOT (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(sar.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'change in diameter occurrence') AND (SIZEOF(QUERY ( fcr2 <* QUERY ( sar2 <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((sar2.description = 'taper usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar2))) ) | ('MACHINING_FEATURE_SCHEMA.TAPER' IN TYPEOF(fcr2.related_shape_aspect)) )) = 1)) )) = 0)) )) = 0))) )) = 1)) )) = 1)) )) = 1));
END_ENTITY;

ENTITY compound_feature
  SUBTYPE OF (feature_definition);
WHERE
  WR1: ('COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF( QUERY( pds <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF( QUERY( csa <* USEDIN( pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((csa.name='compound feature in solid') AND ('SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa))) )) = 1) )) = 1);
  WR2: ('COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF( QUERY( pds <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF( QUERY( csa <* USEDIN( pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa) )) = 1) )) = 1);
  WR3: ('COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF(QUERY ( pds <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY ( csa <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (SIZEOF(QUERY ( fcr <* csa.component_relationships | (NOT ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(fcr))) )) = 0)) )) = 1)) )) = 1);
  WR4: ('COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF (QUERY (pds <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION')| ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pds)) AND (SIZEOF (QUERY (csa <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE')| ('SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT' IN TYPEOF (csa)) )) = 1) )) = 1);
  WR5: ('COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF(QUERY ( pds <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY ( csa <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (SIZEOF(QUERY ( sar <* csa.component_relationships | ('MACHINING_FEATURE_SCHEMA.THREAD' IN TYPEOF(sar.related_shape_aspect)) )) = 0) ) )) = 1)) )) = 1);
  WR6: ('COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_COMPOSITE_HOLE' IN TYPEOF(SELF)) XOR (SIZEOF (QUERY (pds <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION')| ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pds)) AND (SIZEOF (QUERY (csa <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE')| ('SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT' IN TYPEOF (csa)) AND (SIZEOF (QUERY (sar <* csa.component_relationships | (('MACHINING_FEATURE_SCHEMA.COMPOUND_FEATURE' IN TYPEOF (sar.related_shape_aspect)) AND (sar.related_shape_aspect\characterized_object.name <> SELF\characterized_object.name)) )) = 0) )) = 1) )) = 1);
END_ENTITY;

ENTITY direction_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: (SIZEOF(SELF.items) = 1);
  WR2: (SIZEOF(QUERY ( it <* SELF.items | (NOT ( 'MACHINING_FEATURE_SCHEMA.DIRECTION' IN TYPEOF(it))) )) = 0);
END_ENTITY;

ENTITY edge_round
  SUBTYPE OF (transition_feature);
WHERE
  WR1: (NOT (SELF\shape_aspect.description = 'constant radius')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation))) = 1))) = 0);
  WR2: (NOT (SELF\shape_aspect.description = 'constant radius')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | (NOT (SIZEOF (impl_rep.used_representation.items) >= 1) AND (SIZEOF (impl_rep.used_representation.items) <= 3)))) = 0))) = 0);
  WR3: (NOT (SELF.description = 'constant radius')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'radius'))) = 1))) = 0))) = 0);
  WR4: (NOT (SELF.description = 'constant radius')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'first offset'))) <= 1))) = 0))) = 0);
  WR5: (NOT (SELF.description = 'constant radius')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'second offset'))) <= 1))) = 0))) = 0);
  WR6: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation)) AND (pdr.used_representation.name = 'edge round face'))) <= 1))) = 0;
  WR7: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation)) AND (pdr.used_representation.name = 'first face shape'))) <= 1))) = 0;
  WR8: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation)) AND (pdr.used_representation.name = 'second face shape'))) <= 1))) = 0;
END_ENTITY;

ENTITY externally_defined_feature_definition
  SUBTYPE OF (feature_definition, externally_defined_item);
WHERE
  WR1: (((SELF\characterized_object.description = 'thread') AND (SELF\externally_defined_item.item_id='external thread') AND (SELF\externally_defined_item.source.source_id= 'external feature specification') ) OR ((SELF\characterized_object.description = 'gear') AND (SELF\externally_defined_item.item_id='external gear') AND (SELF\externally_defined_item.source.source_id= 'external feature specification')) OR ((SELF\characterized_object.description = 'marking') AND (SELF\externally_defined_item.item_id='external marking') AND (SELF\externally_defined_item.source.source_id= 'external feature specification')) OR ((SELF\characterized_object.description = 'knurl') AND (SELF\externally_defined_item.item_id='external knurl') AND (SELF\externally_defined_item.source.source_id= 'external feature specification')));
  WR2: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ({5 <= SIZEOF(pdr.used_representation.items) <= 10} ) )) = 1 )) = 1));
  WR3: ((NOT (SELF\characterized_object.description = 'marking')) OR (SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(pdr.used_representation.items) = 2) )) = 1 )) = 1));
  WR4: ((NOT (SELF\characterized_object.description = 'knurl')) OR (SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF(pdr.used_representation.items) = 1) )) = 1 )) = 1));
  WR5: (NOT (SELF\characterized_object.description IN [ 'knurl', 'thread'])) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN (pds,'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'partial area occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATED_SHAPE_ASPECT') | ((sar.description = 'applied area usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | ('MACHINING_FEATURE_SCHEMA.APPLIED_AREA' IN TYPEOF(sdr.relating_shape_aspect)) )) = 1)) )) <= 1)) )) = 0);
  WR6: ((NOT (SELF\characterized_object.description = 'marking')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'marking text')) )) = 1)) )) = 0)) )) = 0));
  WR7: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'removal direction') AND ((it.description = 'internal') OR (it.description = 'external'))) )) = 1)) )) = 0)) )) = 0));
  WR8: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'qualifier')) ))<= 1)) ))= 0)) )) = 0));
  WR9: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'hand')) )) = 1)) )) = 0)) )) = 0));
  WR10: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'fit class')) )) = 1)) )) = 0)) )) = 0));
  WR11: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'form')) )) = 1)) )) = 0)) )) = 0));
  WR12: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'major diameter')) )) <= 1)) )) = 0)) )) = 0));
  WR13: ((NOT (SELF\characterized_object.description = 'thread')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.RATIO_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'number of threads')) )) = 1)) )) = 0)) )) = 0));
  WR14: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'fit class 2')) )) <= 1)) )) = 0)) )) = 0);
  WR15: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'nominal size')) )) <= 1)) )) = 0)) )) = 0);
  WR16: (NOT (SELF\characterized_object.description IN [ 'knurl', 'gear', 'thread'])) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN (pds,'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATED_SHAPE_ASPECT') | ((sar.description = 'applied shape') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT' IN TYPEOF(sdr.relating_shape_aspect)) )) = 1)) )) <= 1)) )) = 0);
  WR17: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (10 <= SIZEOF(pdr.used_representation.items)) AND (SIZEOF(pdr.used_representation.items) >= 11) )) = 1 )) = 1));
  WR18: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.RATIO_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'number of teeth')) )) = 1)) )) = 0)) )) = 0));
  WR19: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'reference pressure angle')) )) = 1)) )) = 0)) )) = 0));
  WR20: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'rake shift factor')) )) = 1)) )) = 0)) )) = 0));
  WR21: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'nominal tooth depth')) )) = 1)) )) = 0)) )) = 0));
  WR22: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'face width')) )) = 1)) )) = 0)) )) = 0));
  WR23: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'tip diameter')) )) = 1)) )) = 0)) )) = 0));
  WR24: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'module or diametral pitch') AND ((it.description = 'module') OR (it.description = 'diametral pitch'))) )) = 1)) )) = 0)) )) = 0));
  WR25: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'normal attribute')) )) = 1)) )) = 0)) )) = 0));
  WR26: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'internal or external gear') AND ((it.description = 'internal') OR (it.description = 'external'))) )) = 1)) )) = 0)) )) = 0));
  WR27: ((NOT (SELF\characterized_object.description IN ['gear'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN (pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'root fillet radius')) )) <= 1)) )) = 0)) )) = 0));
END_ENTITY;

ENTITY face_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: (SIZEOF(SELF.items) >= 1);
  WR2: (SIZEOF(QUERY ( it <* SELF.items | (NOT ( ('TOPOLOGY_SCHEMA.FACE_SURFACE' IN TYPEOF(it)) OR ('TOPOLOGY_SCHEMA.ORIENTED_FACE' IN TYPEOF(it)) )) )) = 0);
END_ENTITY;

ENTITY feature_component_definition
  SUBTYPE OF (characterized_object);
WHERE
  WR1: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(USEDIN(pd, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE')) = 1)) )) = 0);
END_ENTITY;

ENTITY feature_component_relationship
  SUPERTYPE OF (ONEOF (pattern_omit_membership,
                       pattern_offset_membership))
  SUBTYPE OF (shape_aspect_relationship);
WHERE
  WR1: ((SIZEOF([ 'SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT', 'MACHINING_FEATURE_SCHEMA.REPLICATE_FEATURE', 'MACHINING_FEATURE_SCHEMA.TRANSITION_FEATURE', 'MACHINING_FEATURE_SCHEMA.MODIFIED_PATTERN'] * TYPEOF (SELF.relating_shape_aspect)) = 1) OR ('MACHINING_FEATURE_SCHEMA.MACHINING_FEATURE_DEFINITION' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition)) OR ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition)));
END_ENTITY;

ENTITY feature_pattern
  SUBTYPE OF (replicate_feature);
WHERE
  WR1: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | NOT ('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF(srwp_i)) )) > 0 ) )) > 0 )) = 0;
  WR2: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | ('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF (it)) AND (it.name = 'base feature placement'))) > 1))) = 0))) = 0;
END_ENTITY;

ENTITY fillet
  SUBTYPE OF (transition_feature);
WHERE
  WR1: (NOT (SELF\shape_aspect.description = 'constant radius')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation))) = 1))) = 0);
  WR2: (NOT (SELF\shape_aspect.description = 'constant radius')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | (NOT (SIZEOF (impl_rep.used_representation.items) >= 1) AND(SIZEOF (impl_rep.used_representation.items) <= 3)))) = 0))) = 0);
  WR3: (NOT (SELF.description = 'constant radius')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'radius'))) = 1))) = 0))) = 0);
  WR4: (NOT (SELF.description = 'constant radius')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'first offset'))) <= 1))) = 0))) = 0);
  WR5: (NOT (SELF.description = 'constant radius')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'second offset'))) <= 1))) = 0))) = 0);
  WR6: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation)) AND (pdr.used_representation.name = 'fillet face'))) = 1))) = 0;
  WR7: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation)) AND (pdr.used_representation.name = 'first face shape'))) = 1))) = 0;
  WR8: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation)) AND (pdr.used_representation.name = 'second face shape'))) = 1))) = 0;
END_ENTITY;

ENTITY flat_face
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'removal direction')) )) = 1)) )) = 0);
  WR2: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'course of travel occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('TOPOLOGY_SCHEMA.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'linear') AND (sdr.name = 'course of travel')) )) = 1)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'removal boundary occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.LINEAR_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.name = 'removal boundary')) )) = 1)) )) = 1)) )) = 0);
  WR4: SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'enclosed boundary occurrence') AND (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | (SIZEOF (['MACHINING_FEATURE_SCHEMA.CIRCULAR_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.NGON_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.RECTANGULAR_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.CLOSED_PATH_PROFILE'] * TYPEOF (sdr.relating_shape_aspect)) = 1) AND (sdr.relating_shape_aspect.description = 'boundary'))) = 1))) <= 1))) = 0;
  WR5: SIZEOF(QUERY( pdr <* get_property_definition_representations (SELF) | ( 'MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.used_representation.name ='maximum feature limit'))) >=0;
  WR6: SIZEOF(QUERY ( pds <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY ( csa <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (csa.name='uncut volume') AND (SIZEOF(QUERY ( sar <* csa.component_relationships | (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (SIZEOF([ 'MACHINING_FEATURE_SCHEMA.BOSS', 'MACHINING_FEATURE_SCHEMA.PROTRUSION'] * TYPEOF(sar. related_shape_aspect)) = 1)) )) = 1)) )) <= 1)) )) = 1;
  WR7: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF ( ['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'removal depth'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY gear
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF(QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (10 <= SIZEOF(pdr.used_representation.items)) AND (SIZEOF(pdr.used_representation.items) <= 13))) = 1)) = 1;
  WR2: NOT (SELF\characterized_object.description IN ['straight bevel gear', 'helical bevel gear', 'spur gear', 'helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.RATIO_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'number of teeth'))) = 1))) = 0))) = 0);
  WR3: NOT (SELF\characterized_object.description IN ['straight bevel gear', 'helical bevel gear', 'spur gear', 'helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT']* TYPEOF(it))= 2) AND (it.name = 'reference pressure angle'))) = 1))) = 0))) = 0);
  WR4: NOT (SELF\characterized_object.description IN ['straight bevel gear', 'helical bevel gear', 'spur gear', 'helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'rake shift factor'))) = 1))) = 0))) = 0);
  WR5: NOT (SELF\characterized_object.description IN ['straight bevel gear', 'helical bevel gear', 'spur gear', 'helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))| NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT']* TYPEOF(it)) = 2) AND (it.name = 'nominal tooth depth'))) = 1))) = 0))) = 0);
  WR6: NOT (SELF\characterized_object.description IN ['straight bevel gear', 'helical bevel gear', 'spur gear', 'helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))| NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT']* TYPEOF(it)) = 2) AND (it.name = 'face width'))) = 1))) = 0))) = 0);
  WR7: NOT (SELF\characterized_object.description IN ['straight bevel gear', 'helical bevel gear', 'spur gear', 'helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))| NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT']* TYPEOF(it)) = 2) AND (it.name = 'tip diameter'))) = 1))) = 0))) = 0);
  WR8: NOT (SELF\characterized_object.description IN ['straight bevel gear', 'helical bevel gear', 'spur gear', 'helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))| NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'module or diametral pitch') AND ((it.description ='module') OR (it.description = 'diametral pitch')))) = 1))) = 0))) = 0);
  WR9: NOT (SELF\characterized_object.description IN ['straight bevel gear', 'helical bevel gear', 'spur gear', 'helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))| NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'internal or external gear') AND ((it.description ='internal') OR (it.description = 'external')))) = 1))) = 0))) = 0);
  WR10: NOT (SELF\characterized_object.description IN ['straight bevel gear', 'helical bevel gear', 'spur gear', 'helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))| NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT']* TYPEOF(it)) = 2) AND (it.name = 'normal attribute'))) = 1))) = 0))) = 0);
  WR11: NOT (SELF\characterized_object.description IN ['straight bevel gear', 'helical bevel gear', 'spur gear', 'helical gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))| NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT']* TYPEOF(it)) = 2) AND (it.name = 'root fillet radius'))) <= 1))) = 0))) = 0);
  WR12: NOT (SELF\characterized_object.description IN ['helix gear','helical bevel gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT']* TYPEOF(it))= 2) AND (it.name = 'reference helix angle'))) = 1))) = 0))) = 0);
  WR13: NOT (SELF\characterized_object.description IN ['helix gear','helical bevel gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation))| NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | ('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'gear tooth') AND ((it.description = 'left hand tooth') OR (it.description = 'right hand tooth')))) = 1))) = 0))) = 0);
  WR14: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT']* TYPEOF(it))= 2) AND (it.name = 'tip angle'))) = 1))) = 0))) = 0);
  WR15: NOT (SELF\characterized_object.description IN ['straight bevel gear','helical bevel gear']) OR (SIZEOF(QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF(QUERY(impl_rep <* QUERY(pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) | NOT (SIZEOF(QUERY(it <* impl_rep.used_representation.items | (SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT']* TYPEOF(it))= 2) AND (it.name = 'root angle'))) = 1))) = 0))) = 0);
  WR16: SIZEOF(QUERY(pds <* QUERY(pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) | NOT (SIZEOF(QUERY(sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | SIZEOF( QUERY(sdr <* QUERY(sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'applied shape') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT' IN TYPEOF(sdr.relating_shape_aspect))) = 1)) = 1))) = 0;
END_ENTITY;

ENTITY hole_bottom
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SELF.description IN ['through', 'flat', 'flat with radius', 'flat with taper','spherical', 'conical']);
  WR3: ((NOT (SELF.description = 'through')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) = 0)) )) = 0));
  WR4: ((NOT (SELF.description IN ['flat with radius', 'flat with taper', 'spherical','conical'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0));
  WR5: ((NOT (SELF.description = 'flat')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 0)) )) = 0)) )) = 0));
  WR6: ((NOT (SELF.description IN ['flat with radius','spherical'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)) )) = 0)) )) = 0));
  WR7: ((NOT (SELF.description = 'flat with taper')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)) )) = 0)) )) = 0));
  WR8: ((NOT (SELF.description = 'conical')) OR (SIZEOF( QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF (impl_rep.used_representation.items) >= 1) AND (SIZEOF (impl_rep.used_representation.items) <= 2)) )) = 0)) )) = 0));
  WR9: ((SELF.description = 'through') OR (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((sar.description = 'hole bottom usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) ) | ((fcr.name IN ['hole depth start','hole depth end'])) )) >= 1));
  WR10: ((NOT (SELF.description = 'flat with radius')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'corner radius')))) = 1)) )) = 0)) )) = 0));
  WR11: ((NOT (SELF.description = 'spherical')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')) )) = 1)) )) = 0)) )) = 0));
  WR12: ((NOT (SELF.description = 'conical')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'tip radius')) )) <= 1)) )) = 0)) )) = 0));
  WR13: ((NOT (SELF.description = 'conical')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'tip angle')) )) = 1)) )) = 0)) )) = 0));
  WR14: (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((sar.description = 'hole bottom usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) ) | ((fcr.related_shape_aspect.description ='bottom condition occurrence') AND ('MACHINING_FEATURE_SCHEMA.ROUND_HOLE' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND ('MACHINING_FEATURE_SCHEMA.HOLE_BOTTOM' IN TYPEOF(fcr.relating_shape_aspect))) )) >= 1);
  WR15: ((NOT (SELF.description = 'flat with taper')) OR (SIZEOF( QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'final diameter')))) = 1)) )) = 0)) )) = 0));
  WR16: ((NOT (SELF.description = 'flat with taper')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'taper diameter')) )) = 1)) )) = 0)) )) = 0));
END_ENTITY;

ENTITY linear_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)) )) = 0)) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')) )) = 1)) )) = 0)) )) = 0);
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'profile length')) )) = 1)) )) = 0)) )) = 0);
END_ENTITY;

ENTITY location_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: (SIZEOF(SELF.items) = 1);
  WR2: (SIZEOF(QUERY ( it <* SELF.items | (NOT ('GEOMETRY_SCHEMA.POINT' IN TYPEOF(it))) )) = 0);
END_ENTITY;

ENTITY marking
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ({2 <= SIZEOF(pdr.used_representation.items) <=6} ) )) = 1 )) = 1;
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'marking text')) )) = 1)) )) = 0)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'special instructions')) )) <= 1)) )) = 0)) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'font name')))) <= 1)))) = 0)) )) = 0);
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'character height')) )) <= 1)) )) = 0)) )) = 0);
  WR6: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'character spacing')) )) <= 1)) )) = 0)) )) = 0);
  WR7: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATED_SHAPE_ASPECT') | ((sar.description = 'applied shape') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT' IN TYPEOF(sdr.relating_shape_aspect)) )) = 1)) )) = 1)) )) = 0);
END_ENTITY;

ENTITY modified_pattern
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: SIZEOF( QUERY (fcr <* QUERY(sar <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | 'MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar)) | (SIZEOF( ['MACHINING_FEATURE_SCHEMA.REPLICATE_FEATURE', 'SHAPE_ASPECT_DEFINITION_SCHEMA.INSTANCED_FEATURE'] * TYPEOF (fcr.related_shape_aspect.of_shape.definition)) >= 1) AND (fcr.description = 'base shape')) ) = 1;
  WR2: SIZEOF( QUERY (fcr <* QUERY(sar <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | 'MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar)) | (SIZEOF( ['MACHINING_FEATURE_SCHEMA.CIRCULAR_PATTERN', 'MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN'] * TYPEOF(fcr.related_shape_aspect.of_shape.definition)) = 1) AND (fcr.description = 'base pattern')) ) = 1;
  WR3: SIZEOF(QUERY ( sar <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (SIZEOF(QUERY ( msar <* USEDIN(sar.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (SIZEOF([ 'MACHINING_FEATURE_SCHEMA.PATTERN_OFFSET_MEMBERSHIP', 'MACHINING_FEATURE_SCHEMA.PATTERN_OMIT_MEMBERSHIP'] * TYPEOF(sar)) = 1) AND (sar.description='modified pattern') AND (sar :<>: msar) )) >= 1) )) = 0;
END_ENTITY;

ENTITY ngon_closed_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF (SELF.of_shape.definition);
  WR2: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation))) = 1))) = 0;
  WR3: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT ((SIZEOF (impl_rep.used_representation.items) >= 3) AND (SIZEOF(impl_rep.used_representation.items) <= 4)))) = 0))) = 0;
  WR4: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'number of sides') OR (srwp_i.name = 'circumscribed diameter') OR (srwp_i.name = 'corner radius') OR (srwp_i.name = 'diameter across flats'))) = SIZEOF(pdr.used_representation.items)) )) = 1 )) = 1;
  WR5: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | ('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF (it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0;
  WR6: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | ('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF (it)) AND ('MEASURE_SCHEMA.COUNT_MEASURE' IN TYPEOF (it\measure_with_unit.value_component)) AND (it.name = 'number of sides'))) = 1))) = 0))) = 0;
  WR7: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name IN ['circumscribed diameter','diameter across flats']) )) = 1) )) = 0))) = 0;
  WR8: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'corner radius'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY open_path_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF (impl_rep.used_representation.items) = 1)) )) = 0)) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')) )) = 1)) )) = 0)) )) = 0);
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('TOPOLOGY_SCHEMA.PATH_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR6: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation))AND (pdr.used_representation.name = 'profile limit') )) <= 1))) = 0;
END_ENTITY;

ENTITY outer_round
  SUBTYPE OF (feature_definition);
WHERE
  WR1: ((NOT (SELF\characterized_object.description = 'outer diameter')) OR (SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF (pdr.used_representation.items) = 3) )) = 1 )) = 1));
  WR2: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR (SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ( {2 <= SIZEOF(pdr.used_representation.items) <= 3}) )) = 1 )) = 1));
  WR3: (SELF\characterized_object.description IN ['outer diameter', 'outer diameter to shoulder']);
  WR4: ((NOT (SELF\characterized_object.description = 'outer diameter')) OR (SIZEOF( QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'length')) )) = 1)) )) = 0)) )) = 0));
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'diameter')) )) = 1)) )) = 0)) )) = 0);
  WR6: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR ( SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'v-shape boundary occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.VEE_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'v-shape')) )) = 1)) )) = 1)) )) = 0));
  WR7: ((NOT (SELF\characterized_object.description = 'outer diameter')) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'reduced size occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'taper usage') AND (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.TAPER' IN TYPEOF(sdr.relating_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.OUTER_ROUND' IN TYPEOF(sdr.related_shape_aspect.of_shape.definition)) AND (sdr.name = 'reduced size')) )) = 1)) )) <= 1)) )) = 0));
  WR8: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR (SIZEOF( QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'length')) )) <= 1)) )) = 0)) )) = 0));
  WR9: ((NOT (SELF\characterized_object.description = 'outer diameter to shoulder')) OR (SIZEOF( QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'feature length')) )) <= 1)) )) = 0)) )) = 0));
END_ENTITY;

ENTITY outside_profile
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF (pdr.used_representation.items) = 1) )) = 1 )) = 1;
  WR2: SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description IN ['boundary occurrence', 'non-planar boundary occurrence', 'partial circular boundary occurrence', 'closed circular boundary occurrence', 'open rectangular boundary occurrence', 'closed rectangular boundary occurrence']) )) =1) ))=0;
  WR3: (NOT(SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'boundary occurrence') )) =1) ))=0)) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | (SIZEOF (['MACHINING_FEATURE_SCHEMA.CIRCULAR_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.NGON_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.RECTANGULAR_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.CLOSED_PATH_PROFILE', 'MACHINING_FEATURE_SCHEMA.SQUARE_U_PROFILE', 'MACHINING_FEATURE_SCHEMA.PARTIAL_CIRCULAR_PROFILE', 'MACHINING_FEATURE_SCHEMA.ROUNDED_U_PROFILE', 'MACHINING_FEATURE_SCHEMA.LINEAR_PROFILE', 'MACHINING_FEATURE_SCHEMA.VEE_PROFILE', 'MACHINING_FEATURE_SCHEMA.TEE_PROFILE', 'MACHINING_FEATURE_SCHEMA.OPEN_PATH_PROFILE'] * TYPEOF (sdr.relating_shape_aspect)) = 1) AND (sdr.relating_shape_aspect.description = 'outside boundary'))) = 1))) = 1))) = 0);
  WR4: (NOT(SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description IN ['complex boundary occurrence', 'partial circular boundary occurrence', 'closed circular boundary occurrence', 'open rectangular boundary occurrence', 'closed rectangular boundary occurrence']) ))=1) ))=0)) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | NOT(SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile floor usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar))) | (('MACHINING_FEATURE_SCHEMA.PROFILE_FLOOR' IN TYPEOF (sdr.relating_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.OUTSIDE_PROFILE' IN TYPEOF (sdr.related_shape_aspect.of_shape.definition))) )) = 1))) = 0))) = 0);
  WR5: (NOT(SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description IN ['outside boundary', 'complex boundary occurrence', 'partial circular boundary occurrence', 'closed circular boundary occurrence', 'open rectangular boundary occurrence', 'closed rectangular boundary occurrence']) ))=1) ))=0)) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'path feature component usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | (SIZEOF (['TOPOLOGY_SCHEMA.PATH_FEATURE_COMPONENT'] * TYPEOF (sdr.relating_shape_aspect)) = 1) AND (sdr.name = 'profile swept shape') AND (sdr.relating_shape_aspect.description='linear') )) = 1))) = 1))) = 0);
  WR6: (NOT(SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'complex boundary occurrence') )) =1) ))=0)) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | (SIZEOF (['MACHINING_FEATURE_SCHEMA.CIRCULAR_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.NGON_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.RECTANGULAR_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.CLOSED_PATH_PROFILE', 'MACHINING_FEATURE_SCHEMA.SQUARE_U_PROFILE', 'MACHINING_FEATURE_SCHEMA.PARTIAL_CIRCULAR_PROFILE', 'MACHINING_FEATURE_SCHEMA.ROUNDED_U_PROFILE', 'MACHINING_FEATURE_SCHEMA.VEE_PROFILE', 'MACHINING_FEATURE_SCHEMA.TEE_PROFILE', 'MACHINING_FEATURE_SCHEMA.LINEAR_PROFILE', 'MACHINING_FEATURE_SCHEMA.OPEN_PATH_PROFILE'] * TYPEOF (sdr.relating_shape_aspect)) =1)) ) = 1)))= 1))) = 0);
  WR7: (NOT(SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'partial circular boundary occurrence') )) =1) ))=0)) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | ('MACHINING_FEATURE_SCHEMA.PARTIAL_CIRCULAR_PROFILE' IN TYPEOF (sdr.relating_shape_aspect)))) = 1)))= 1))) = 0);
  WR8: (NOT(SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'closed circular boundary occurrence') )) =1) ))=0)) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | ('MACHINING_FEATURE_SCHEMA.CIRCULAR_CLOSED_PROFILE' IN TYPEOF (sdr.relating_shape_aspect)))) = 1)))= 1))) = 0);
  WR9: (NOT(SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'open rectangular boundary occurrence') )) =1) ))=0)) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | ('MACHINING_FEATURE_SCHEMA.SQUARE_U_PROFILE' IN TYPEOF (sdr.relating_shape_aspect)))) = 1)))= 1))) = 0);
  WR10: (NOT(SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'closed rectangular boundary occurrence') )) =1) ))=0)) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | ('MACHINING_FEATURE_SCHEMA.RECTANGULAR_CLOSED_PROFILE' IN TYPEOF (sdr.relating_shape_aspect)) )) = 1))) = 1))) = 0);
  WR11: (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description IN ['boundary occurrence', 'complex boundary occurrence', 'partial circular boundary occurrence', 'closed circular boundary occurrence', 'open rectangular boundary occurrence', 'closed rectangular boundary occurrence']) )) =1) ))=0) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'removal direction')) )) = 1)) )) = 0);
  WR12: SIZEOF(QUERY(pdr <* get_property_definition_representations (SELF) | ( 'MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.used_representation.name ='maximum feature limit'))) >=0;
END_ENTITY;

ENTITY partial_circular_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF (impl_rep.used_representation.items) >= 3)) )) = 0)) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')) )) = 1)) )) = 0)) )) = 0);
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')))) = 1)) )) = 0)) )) = 0);
  WR6: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'sweep angle')) )) = 1)) )) = 0)) )) = 0);
  WR7: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation))AND (pdr.used_representation.name = 'profile limit'))) <= 1))) = 0;
END_ENTITY;

ENTITY path_feature_component
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SELF.description IN ['partial circular','complete circular', 'linear','complex']);
  WR3: ((NOT (SELF.description = 'complex')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0));
  WR4: ((SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')) )) = 1)) )) = 0)) )) = 0));
  WR5: ((NOT (SELF.description = 'partial circular')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 3)) )) = 0)) )) = 0));
  WR6: ((NOT (SELF.description = 'partial circular')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')) )) = 1)) )) = 0)) )) = 0));
  WR7: ((NOT (SELF.description = 'partial circular')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'sweep angle')) )) = 1)) )) = 0)) )) = 0));
  WR8: ((NOT (SELF.description = 'complete circular')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)) )) = 0)) )) = 0));
  WR9: ((NOT (SELF.description = 'complete circular')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')) )) = 1)) )) = 0)) )) = 0));
  WR10: ((NOT (SELF.description = 'linear')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)) )) = 0)) )) = 0));
  WR11: ((NOT (SELF.description = 'linear')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'distance')) )) = 1)) )) = 0)) )) = 0));
  WR12: ((NOT (SELF.description = 'linear')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0));
  WR13: ((NOT (SELF.description = 'complex')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('TOPOLOGY_SCHEMA.PATH_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'sweep path')AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | (srwp_i.name = 'profile shape') )) = 1) ) )) = 1)) )) = 0));
END_ENTITY;

ENTITY path_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: (SIZEOF(SELF.items) >= 1);
  WR2: (SIZEOF(QUERY ( i <* SELF.items | (SIZEOF([ 'MACHINING_FEATURE_SCHEMA.BOUNDED_CURVE', 'TOPOLOGY_SCHEMA.EDGE_CURVE', 'TOPOLOGY_SCHEMA.PATH'] * TYPEOF(i)) = 1) )) >= 1);
END_ENTITY;

ENTITY pattern_offset_membership
  SUBTYPE OF (feature_component_relationship);
WHERE
  WR1: (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN( SELF.relating_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATING_SHAPE_ASPECT') | (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF)) ) | ((SIZEOF (QUERY( pdr <*(QUERY(pd <* USEDIN (fcr.related_shape_aspect.of_shape, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | SIZEOF (['MACHINING_FEATURE_SCHEMA.CIRCULAR_PATTERN', 'MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN'] * TYPEOF(pdr.definition)) =1 )) = 0 )) )) = 0);
  WR2: (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN( SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF)) ) | (fcr.description='modified pattern') AND ('MACHINING_FEATURE_SCHEMA.MODIFIED_PATTERN' IN TYPEOF(fcr.relating_shape_aspect)) )) >= 1);
  WR3: (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN( SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF)) ) | (('MACHINING_FEATURE_SCHEMA.MODIFIED_PATTERN' IN TYPEOF(fcr.relating_shape_aspect)) AND (NOT (SIZEOF(QUERY ( modfcr <* QUERY ( modsar <* USEDIN( fcr.relating_shape_aspect,'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((SIZEOF(['MACHINING_FEATURE_SCHEMA.CIRCULAR_PATTERN', 'MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN'] * TYPEOF(modsar.related_shape_aspect.of_shape.definition)) = 1) AND (modsar :<>: fcr)) ) | (NOT (modfcr.related_shape_aspect.of_shape.definition :=: SELF.relating_shape_aspect.of_shape.definition)) )) = 0))) )) = 0);
  WR4: ((NOT ('MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(USEDIN(pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) = 2)) )) = 0));
  WR5: ((NOT ('MACHINING_FEATURE_SCHEMA.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(USEDIN(pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) = 1)) )) = 0));
  WR6: ((NOT ('MACHINING_FEATURE_SCHEMA.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (NOT (SIZEOF(pdr.used_representation.items) = 2)) )) = 0)) )) = 0));
  WR7: ((NOT ('MACHINING_FEATURE_SCHEMA.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('MEASURE_SCHEMA.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'index number')) )) = 1)) )) = 0)) )) = 0));
  WR8: ((NOT ('MACHINING_FEATURE_SCHEMA.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT' IN TYPEOF(it)) AND (it.name = 'offset')) )) = 1)) )) = 0)) )) = 0));
  WR9: ((NOT ('MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION')| (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items ) = 3)) )) = 0)) )) = 0));
  WR10: ((NOT ('MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION')| (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('MEASURE_SCHEMA.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'row index')) )) = 1)) )) = 0)) )) = 0));
  WR11: ((NOT ('MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('MEASURE_SCHEMA.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'column index')) )) = 1)) )) = 0)) )) = 0));
  WR12: ((NOT ('MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(it)) AND (it.name = 'offset distance')) )) = 1)) )) = 0)) )) = 0));
  WR13: ((NOT ('MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'offset direction')) )) = 1)) )) = 0));
END_ENTITY;

ENTITY pattern_omit_membership
  SUBTYPE OF (feature_component_relationship);
WHERE
  WR1: (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN( SELF.relating_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATING_SHAPE_ASPECT') | (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF)) ) | ((SIZEOF (QUERY( pdr <*(QUERY(pd <* USEDIN (fcr.related_shape_aspect.of_shape, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))) | SIZEOF (['MACHINING_FEATURE_SCHEMA.CIRCULAR_PATTERN', 'MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN'] * TYPEOF(pdr.definition)) =1 )) = 0 )) )) = 0);
  WR2: (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN( SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF)) ) | (fcr.description='modified pattern') AND ('MACHINING_FEATURE_SCHEMA.MODIFIED_PATTERN' IN TYPEOF(fcr.relating_shape_aspect)) )) >= 1);
  WR3: (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN( SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (sar :<>: SELF)) ) | (('MACHINING_FEATURE_SCHEMA.MODIFIED_PATTERN' IN TYPEOF(fcr.relating_shape_aspect)) AND (NOT (SIZEOF(QUERY ( modfcr <* QUERY ( modsar <* USEDIN( fcr.relating_shape_aspect,'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((SIZEOF(['MACHINING_FEATURE_SCHEMA.CIRCULAR_PATTERN', 'MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN'] * TYPEOF(modsar.related_shape_aspect.of_shape.definition)) = 1) AND (modsar :<>: fcr)) ) | (NOT (modfcr.related_shape_aspect.of_shape.definition :=: SELF.relating_shape_aspect.of_shape.definition)) )) = 0))) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(USEDIN(pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) = 1)) )) = 0);
  WR5: ((NOT ('MACHINING_FEATURE_SCHEMA.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (NOT (SIZEOF(pdr.used_representation.items) = 1)) )) = 0)) )) = 0));
  WR6: ((NOT ('MACHINING_FEATURE_SCHEMA.CIRCULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('MEASURE_SCHEMA.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'index number')) )) = 1)) )) = 0)) )) = 0));
  WR7: ((NOT ('MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (NOT (SIZEOF(pdr.used_representation.items) = 2)) )) = 0)) )) = 0));
  WR8: ((NOT ('MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('MEASURE_SCHEMA.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'row index')) )) = 1)) )) = 0)) )) = 0));
  WR9: ((NOT ('MACHINING_FEATURE_SCHEMA.RECTANGULAR_PATTERN' IN TYPEOF(SELF.relating_shape_aspect.of_shape.definition))) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF.related_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('MEASURE_SCHEMA.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'column index')) )) = 1)) )) = 0)) )) = 0));
END_ENTITY;

ENTITY planar_shape_representation
  SUBTYPE OF (shape_representation);
WHERE
  WR1: SIZEOF (SELF.items) = 1;
  WR2: SIZEOF (QUERY (it <* SELF.items | ('GEOMETRY_SCHEMA.PLANE' IN TYPEOF (it)))) = 1;
END_ENTITY;

ENTITY pocket
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SELF\characterized_object.description IN ['closed rectangular','open rectangular', 'complex', 'circular cutout', 'complex cutout', 'recess']);
  WR2: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'pocket depth occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND (sar.name = 'pocket depth') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('TOPOLOGY_SCHEMA.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description ='linear')) )) = 1)) )) = 1)) )) = 0);
  WR3: SIZEOF(QUERY(pdr <* get_property_definition_representations (SELF) | ( 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF ( pdr.used_representation ) ) )) =1;
  WR4: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ({1 <= SIZEOF(pdr.used_representation.items) <= 2} ) )) = 1 )) = 1;
  WR5: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'fillet radius'))) = SIZEOF(pdr.used_representation.items)) )) = 1 )) = 1;
  WR6: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF ( ['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'fillet radius'))) <= 1))) = 0))) = 0;
  WR7: ((NOT (SELF\characterized_object.description IN ['complex', 'non-circular cutout','recess'])) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'boundary occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | ((SIZEOF([ 'MACHINING_FEATURE_SCHEMA.CIRCULAR_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.NGON_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.RECTANGULAR_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.CLOSED_PATH_PROFILE', 'MACHINING_FEATURE_SCHEMA.SQUARE_U_PROFILE', 'MACHINING_FEATURE_SCHEMA.PARTIAL_CIRCULAR_PROFILE', 'MACHINING_FEATURE_SCHEMA.ROUNDED_U_PROFILE', 'MACHINING_FEATURE_SCHEMA.VEE_PROFILE', 'MACHINING_FEATURE_SCHEMA.TEE_PROFILE', 'MACHINING_FEATURE_SCHEMA.OPEN_PATH_PROFILE'] * TYPEOF(sdr.relating_shape_aspect)) = 1)) )) = 1)) )) = 1)) )) = 0));
  WR8: ((NOT (SELF\characterized_object.description = 'closed rectangular')) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'closed boundary occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.RECTANGULAR_CLOSED_PROFILE' IN TYPEOF(sdr.relating_shape_aspect))) )) = 1)) )) = 1)) )) = 0));
  WR9: ((NOT (SELF\characterized_object.description = 'open rectangular')) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'open boundary occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.SQUARE_U_PROFILE' IN TYPEOF(sdr.relating_shape_aspect))) )) = 1)) )) = 1)) )) = 0));
  WR10: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'bottom condition occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'pocket bottom usage') AND (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.POCKET_BOTTOM' IN TYPEOF(sdr.relating_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.POCKET' IN TYPEOF(sdr.related_shape_aspect.of_shape.definition))) )) = 1)) )) = 1)) )) = 0);
  WR11: ((NOT (SELF\characterized_object.description IN ['complex', 'non-circular cutout','recess'])) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'change in boundary occurrence') AND (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((sar.description = 'taper usage') AND (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.TAPER' IN TYPEOF(fcr.relating_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.POCKET' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND (fcr.related_shape_aspect.description IN ['angle taper','directed taper'])) )) = 1)) )) <= 1)) )) = 0));
  WR12: (NOT (SELF\characterized_object.description = 'circular cutout')) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'enclosed boundary occurrence') AND (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | ('MACHINING_FEATURE_SCHEMA.CIRCULAR_CLOSED_PROFILE' IN TYPEOF (sdr.relating_shape_aspect)))) = 1))) = 1))) = 0);
  WR13: (NOT (SELF\characterized_object.description IN ['circular cutout','complex cutout'])) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'bottom condition occurrence') AND (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'pocket bottom usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar))) | (('MACHINING_FEATURE_SCHEMA.POCKET_BOTTOM' IN TYPEOF (sdr.relating_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.POCKET' IN TYPEOF (sdr.related_shape_aspect.of_shape.definition))AND (sdr.relating_shape_aspect.description = 'through') ) )) = 1))) = 1))) = 0);
  WR14: (NOT (SELF\characterized_object.description = 'recess')) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'bottom condition occurrence') AND (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'pocket bottom usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar))) | (('MACHINING_FEATURE_SCHEMA.POCKET_BOTTOM' IN TYPEOF (sdr.relating_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.POCKET' IN TYPEOF (sdr.related_shape_aspect.of_shape.definition)) AND (sdr.relating_shape_aspect.description IN ['planar','complex']) ) )) = 1))) = 1))) = 0);
  WR15: SIZEOF(QUERY(pdr <* get_property_definition_representations (SELF) | ( 'MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.used_representation.name ='maximum feature limit'))) >=0;
  WR16: ((NOT (SELF\characterized_object.description IN ['closed rectangular','open rectangular', 'complex', 'recess'])) OR (SIZEOF(QUERY ( pds <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY ( csa <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (csa.name='uncut volume') AND (SIZEOF(QUERY ( sar <* csa.component_relationships | ((('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (SIZEOF(['MACHINING_FEATURE_SCHEMA.BOSS','MACHINING_FEATURE_SCHEMA.PROTRUSION'] * TYPEOF(sar.related_shape_aspect))=1) ) ))) = 1)) )) <= 1)) )) = 1));
  WR17: ((NOT (SELF\characterized_object.description IN ['closed rectangular','open rectangular'])) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'change in boundary occurrence') AND (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | ((sar.description = 'taper usage') AND (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.TAPER' IN TYPEOF(fcr.relating_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.POCKET' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND (fcr.related_shape_aspect.description IN ['angle taper','directed taper'])) )) >= 1)) )) <=1)) )) = 0));
END_ENTITY;

ENTITY pocket_bottom
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF (SELF.of_shape.definition);
  WR2: SELF.description IN ['planar', 'complex', 'through'];
  WR3: ((NOT (SELF.description = 'planar')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.DIRECTION_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'floor normal') )) = 1)) )) = 0));
  WR4: ((NOT (SELF.description = 'planar')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.LOCATION_SHAPE_REPRESENTATION') IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'floor location'))) = 1)) )) = 0));
  WR5: ((NOT (SELF.description = 'complex')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'floor face') )) = 1)) )) = 0));
  WR6: (NOT (SELF.description IN ['planar', 'complex']) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation))) = 1))) = 0));
  WR7: (NOT (SELF.description IN ['planar', 'complex']) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (impl_rep.used_representation.items) <= 1) )) = 0))) = 0));
  WR8: (NOT (SELF.description = 'through') OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation))) = 0))) = 0));
  WR9: (NOT (SELF.description IN ['planar', 'complex'])) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'radius'))) <= 1))) = 0))) = 0);
  WR10: SIZEOF (QUERY (fcr <* QUERY (sar <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (sar.description = 'pocket bottom usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar))) | ((fcr.related_shape_aspect.description = 'bottom condition occurrence') AND ('MACHINING_FEATURE_SCHEMA.POCKET' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) AND ('MACHINING_FEATURE_SCHEMA.POCKET_BOTTOM' IN TYPEOF(fcr.relating_shape_aspect)) ) )) >= 1;
  WR11: ((NOT (SELF.description IN ['planar','complex'])) OR (SIZEOF (QUERY (fcr <* QUERY (sar <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (sar.description = 'pocket bottom usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar))) | (fcr.related_shape_aspect.description = 'bottom condition occurrence') AND (fcr.related_shape_aspect.name IN ['pocket depth start', 'pocket depth end']) )) = 0));
END_ENTITY;

ENTITY profile_floor
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF (SELF.of_shape.definition);
  WR2: SELF.description IN ['planar', 'complex', 'through'];
  WR3: (NOT (SELF.description IN ['planar', 'complex']) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation))) = 1))) = 0));
  WR4: (NOT (SELF.description IN ['planar', 'complex'])) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (impl_rep.used_representation.items) >= 1)AND (SIZEOF (impl_rep.used_representation.items) <= 2))) = 0))) = 0);
  WR5: (NOT (SELF.description = 'through') OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation))) = 0))) = 0));
  WR6: (NOT (SELF.description IN ['planar', 'complex'])) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'radius'))) = 1))) = 0))) = 0);
  WR7: SIZEOF (QUERY (fcr <* QUERY (sar <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (sar.description = 'profile floor usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar))) | (('MACHINING_FEATURE_SCHEMA.OUTSIDE_PROFILE' IN TYPEOF (fcr.related_shape_aspect.of_shape.definition))AND ('MACHINING_FEATURE_SCHEMA.PROFILE_FLOOR' IN TYPEOF (fcr.relating_shape_aspect))) )) >= 1;
  WR8: ((NOT (SELF.description IN ['planar','complex'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (( 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr. used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'shape profile floor orientation') AND (it.description IN ['shape profile start','shape profile end'])) )) = 1)) )) = 0)) )) = 0));
  WR9: (NOT (SELF.description = 'complex')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation)) AND (pdr.used_representation.name='floor'))) = 1))) = 1);
  WR10: (NOT (SELF.description = 'planar')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation)) AND (pdr.used_representation.name='floor'))) = 1))) = 1);
END_ENTITY;

ENTITY protrusion
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)) )) = 0)) )) = 0);
  WR2: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'shape volume occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'volume shape usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (sdr.relating_shape_aspect.description = 'volume shape') )) = 1)) )) = 1)) )) = 0);
  WR3: SIZEOF(QUERY(pdr <* get_property_definition_representations (SELF) | ( 'MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.used_representation.name ='maximum feature limit'))) >=0;
END_ENTITY;

ENTITY rectangular_closed_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF (SELF.of_shape.definition);
  WR2: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation))) = 1))) = 0;
  WR3: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT ((SIZEOF (impl_rep.used_representation.items) >= 3) AND (SIZEOF(impl_rep.used_representation.items) <= 4)))) = 0))) = 0;
  WR4: SIZEOF( QUERY( pd <* USEDIN( SELF,'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'length') OR (srwp_i.name = 'width') OR (srwp_i.name = 'corner radius') )) = SIZEOF(pdr.used_representation.items)) )) = 1 )) = 1;
  WR5: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | ('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF (it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0;
  WR6: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'width'))) = 1))) = 0))) = 0;
  WR7: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'length'))) = 1))) = 0))) = 0;
  WR8: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'corner radius'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY rectangular_pattern
  SUBTYPE OF (replicate_feature);
WHERE
  WR1: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN (pds,'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATING_SHAPE_ASPECT') | ((('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar))) ) | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT' IN TYPEOF(sdr.related_shape_aspect)) )) = 1)) )) <= 5)) )) = 0);
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'row layout direction') ) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('MACHINING_FEATURE_SCHEMA.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'column layout direction')) )) = 1)) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 5)) )) = 0)) )) = 0);
  WR6: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('MEASURE_SCHEMA.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'number of rows')) )) = 1)) )) = 0)) )) = 0);
  WR7: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('MEASURE_SCHEMA.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'number of columns')) )) = 1)) )) = 0)) )) = 0);
  WR8: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'row spacing')) )) = 1)) )) = 0)) )) = 0);
  WR9: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'column spacing'))))= 1)) )) = 0)) )) = 0);
  WR10: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF(it)) AND (it.name = 'orientation')) )) = 1)) )) = 0)) )) = 0);
END_ENTITY;

ENTITY removal_volume
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)) )) = 0)) )) = 0);
  WR2: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'shape volume occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATED_SHAPE_ASPECT') | ((sar.description = 'volume shape usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (sdr.relating_shape_aspect.description = 'volume shape') )) = 1)) )) = 1)) )) = 0);
END_ENTITY;

ENTITY replicate_feature
  SUPERTYPE OF (ONEOF (circular_pattern,
                       rectangular_pattern,
                       feature_pattern))
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (( 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr. used_representation)) )) = 1)) )) = 0);
  WR2: (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATING_SHAPE_ASPECT') | ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) ) | ((SIZEOF(['MACHINING_FEATURE_SCHEMA.REPLICATE_FEATURE', 'SHAPE_ASPECT_DEFINITION_SCHEMA.INSTANCED_FEATURE'] * TYPEOF(fcr.related_shape_aspect)) >= 1) AND (fcr.name = 'pattern basis')) )) = 1);
  WR3: ((SIZEOF(QUERY ( sar <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATING_SHAPE_ASPECT') | (NOT ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) )) + SIZEOF(QUERY ( sar <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATED_SHAPE_ASPECT') | (NOT ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) ))) = 0);
END_ENTITY;

ENTITY revolved_profile
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SELF\characterized_object.description IN ['groove','flat','round','open profile']);
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)) )) = 0)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')))) = 1)) )) = 0)) )) = 0);
  WR4: SIZEOF(QUERY(pdr <* get_property_definition_representations (SELF) | ( 'MACHINING_FEATURE_SCHEMA.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.used_representation.name ='removal direction'))) =1;
  WR5: ((NOT (SELF\characterized_object.description = 'open profile')) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'outer edge shape occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.OPEN_PATH_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'outer edge shape')) )) = 1)) )) = 1)) )) = 0));
  WR6: (NOT (SELF\characterized_object.description = 'flat')) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION')| ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (( sa_occ.description = 'flat edge shape occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.LINEAR_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'flat edge shape')) )) = 1)) )) = 1)) )) = 0);
  WR7: ((NOT (SELF\characterized_object.description = 'round')) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'rounded edge shape occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.PARTIAL_CIRCULAR_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'rounded edge shape')) )) = 1)) )) = 1)) )) = 0));
  WR8: ((NOT (SELF\characterized_object.description = 'groove')) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'sweep occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | ((SIZEOF(['MACHINING_FEATURE_SCHEMA.SQUARE_U_PROFILE', 'MACHINING_FEATURE_SCHEMA.PARTIAL_CIRCULAR_PROFILE', 'MACHINING_FEATURE_SCHEMA.ROUNDED_U_PROFILE', 'MACHINING_FEATURE_SCHEMA.VEE_PROFILE', 'MACHINING_FEATURE_SCHEMA.TEE_PROFILE', 'MACHINING_FEATURE_SCHEMA.OPEN_PATH_PROFILE'] * TYPEOF(sdr.relating_shape_aspect)) = 1) AND (sdr.relating_shape_aspect.description = 'sweep')) )) = 1)) )) = 1)) )) = 0));
  WR9: SIZEOF(QUERY(pdr <* get_property_definition_representations (SELF) | ( 'MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.used_representation.name ='maximum feature limit'))) >=0;
END_ENTITY;

ENTITY rib_top
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'rib top condition occurrence') AND (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'rib top usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar))) | (('MACHINING_FEATURE_SCHEMA.RIB_TOP_FLOOR' IN TYPEOF (sdr.relating_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.RIB_TOP' IN TYPEOF (sdr.related_shape_aspect.of_shape.definition)) ) )) = 1))) = 1))) = 0;
  WR2: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation))AND (pdr.used_representation.name = 'removal direction'))) = 1))) = 1;
  WR3: SIZEOF(QUERY(pdr <* get_property_definition_representations (SELF) | ( 'MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.used_representation.name ='maximum feature limit'))) >=0;
END_ENTITY;

ENTITY rib_top_floor
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF (SELF.of_shape.definition);
  WR2: SELF.description IN ['planar', 'complex'];
  WR3: SIZEOF (QUERY (fcr <* QUERY (sar <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATING_SHAPE_ASPECT') | (sar.description = 'rib top usage') AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF (sar))) | ((fcr.related_shape_aspect.description = 'rib top condition occurrence') AND ('MACHINING_FEATURE_SCHEMA.RIB_TOP' IN TYPEOF (fcr.related_shape_aspect.of_shape.definition)) AND ('MACHINING_FEATURE_SCHEMA.RIB_TOP_FLOOR' IN TYPEOF (fcr.relating_shape_aspect)) ) )) >= 1;
  WR4: (NOT (SELF.description = 'complex')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.FACE_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation))AND (pdr.used_representation.name = 'rib top face'))) = 1))) = 0);
  WR5: (NOT (SELF.description = 'planar')) OR (SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation))AND (pdr.used_representation.name = 'rib top face'))) = 1))) = 0);
  WR6: (NOT (SELF.description = 'planar')) OR (SIZEOF (QUERY (pds <* QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF (pd)) | NOT (SIZEOF (QUERY (sa_occ <* USEDIN (pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (sa_occ.description = 'boundary occurrence') AND (SIZEOF (QUERY (sdr <* QUERY (sar <* USEDIN (sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF (sar))) | (SIZEOF (['MACHINING_FEATURE_SCHEMA.CIRCULAR_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.NGON_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.RECTANGULAR_CLOSED_PROFILE', 'MACHINING_FEATURE_SCHEMA.CLOSED_PATH_PROFILE'] * TYPEOF (sdr.relating_shape_aspect)) = 1) AND (sdr.relating_shape_aspect.description = 'rib top floor boundary'))) = 1))) = 1))) = 0);
END_ENTITY;

ENTITY round_hole
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(['COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_ROUND_HOLE', 'COUNTERBORE_COUNTERSINK_SCHEMA.BASIC_ROUND_HOLE'] * TYPEOF(SELF)) = 1) XOR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION')| ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'diameter occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.CIRCULAR_CLOSED_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.name = 'diameter')) )) = 1)) )) = 1)) )) = 0);
  WR2: (SIZEOF(['COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_ROUND_HOLE', 'COUNTERBORE_COUNTERSINK_SCHEMA.BASIC_ROUND_HOLE'] * TYPEOF(SELF)) = 1) XOR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'hole depth occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('TOPOLOGY_SCHEMA.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.name = 'hole depth') AND (sdr.relating_shape_aspect.description = 'linear')) )) = 1)) )) = 1)) )) = 0);
  WR3: (SIZEOF(['COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_ROUND_HOLE', 'COUNTERBORE_COUNTERSINK_SCHEMA.BASIC_ROUND_HOLE'] * TYPEOF(SELF)) = 1) XOR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'bottom condition occurrence') AND (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'hole bottom usage') AND (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.HOLE_BOTTOM' IN TYPEOF(fcr.relating_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.ROUND_HOLE' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition))) )) = 1)) )) = 1)) )) = 0);
  WR4: (SIZEOF(['COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_ROUND_HOLE', 'COUNTERBORE_COUNTERSINK_SCHEMA.BASIC_ROUND_HOLE'] * TYPEOF(SELF)) = 1) XOR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'change in diameter occurrence') AND (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'taper usage') AND (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.TAPER' IN TYPEOF(fcr.relating_shape_aspect)) AND ('MACHINING_FEATURE_SCHEMA.ROUND_HOLE' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition)) ) )) = 1)) )) <= 1)) )) = 0);
  WR5: (SIZEOF(['COUNTERBORE_COUNTERSINK_SCHEMA.EXPLICIT_ROUND_HOLE', 'COUNTERBORE_COUNTERSINK_SCHEMA.BASIC_ROUND_HOLE'] * TYPEOF(SELF)) = 1) XOR (SIZEOF(QUERY(pdr <* get_property_definition_representations (SELF) | ( 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF ( pdr.used_representation ) ) )) =1);
END_ENTITY;

ENTITY rounded_end
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)) )) = 0)) )) = 0);
  WR2: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'partial circular boundary occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('MACHINING_FEATURE_SCHEMA.PARTIAL_CIRCULAR_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) ) )) = 1)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'course of travel occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('TOPOLOGY_SCHEMA.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'linear')) )) = 1)) )) = 1)) )) = 0);
  WR4: SIZEOF(QUERY(pdr <* get_property_definition_representations (SELF) | ( 'MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.used_representation.name ='maximum feature limit'))) >=0;
END_ENTITY;

ENTITY rounded_u_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR3: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | (NOT (SIZEOF (impl_rep.used_representation.items) >= 1) AND (SIZEOF (impl_rep.used_representation.items) <= 2)))) = 0))) = 0;
  WR4: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'depth') )) = SIZEOF(pdr.used_representation.items)) )) = 1 )) = 1;
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'width'))))= 1))))= 0))))= 0);
  WR6: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation))AND (pdr.used_representation.name = 'profile limit'))) <= 1))) = 0;
  WR7: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'depth'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY shape_defining_relationship
  SUBTYPE OF (shape_aspect_relationship);
END_ENTITY;

ENTITY slot
  SUBTYPE OF (feature_definition);
WHERE
  WR1: SIZEOF(QUERY ( pd <* USEDIN(SELF,'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (( 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr. used_representation)) ) | (NOT (SIZEOF(impl_rep. used_representation.items) = 1)) )) = 0)) )) = 0;
  WR2: SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF,'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ( 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (( sa_occ.description = 'swept shape occurrence') AND (SIZEOF( QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar))) ) | (SIZEOF([ 'MACHINING_FEATURE_SCHEMA.SQUARE_U_PROFILE', 'MACHINING_FEATURE_SCHEMA.PARTIAL_CIRCULAR_PROFILE', 'MACHINING_FEATURE_SCHEMA.ROUNDED_U_PROFILE', 'MACHINING_FEATURE_SCHEMA.VEE_PROFILE', 'MACHINING_FEATURE_SCHEMA.TEE_PROFILE', 'MACHINING_FEATURE_SCHEMA.OPEN_PATH_PROFILE'] * TYPEOF(sdr.relating_shape_aspect)) = 1) )) = 1)) )) = 1)) )) = 0;
  WR3: SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF,'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ( 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (( sa_occ.description = 'course of travel occurrence') AND ( SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND ((sar.name = 'course of travel') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)))) ) | ( 'TOPOLOGY_SCHEMA.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) )) = 1)) )) = 1)) )) = 0;
  WR4: SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT((SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'end condition occurrence') AND (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (((sar.description = 'slot end usage') AND (sar.name IN ['course of travel start','course of travel end'])) AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) ) | ((('MACHINING_FEATURE_SCHEMA.SLOT_END' IN TYPEOF(fcr.relating_shape_aspect)) AND (fcr.relating_shape_aspect.description IN ['open','radiused','flat','woodruff'])) AND ('MACHINING_FEATURE_SCHEMA.SLOT' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition))) )) = 1) ) )) = 2) OR (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'end condition occurrence') AND (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (((sar.description = 'slot end usage') AND (sar.name IN ['course of travel start','course of travel end'])) AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) ) | ((('MACHINING_FEATURE_SCHEMA.SLOT_END' IN TYPEOF(fcr.relating_shape_aspect)) AND (fcr.relating_shape_aspect.description IN ['loop'])) AND ('MACHINING_FEATURE_SCHEMA.SLOT' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition))) )) = 1) ) )) = 1))) )) =0;
  WR5: (NOT (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'end condition occurrence') AND (SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | (((sar.description = 'slot end usage') AND (sar.name IN ['course of travel start','course of travel end'])) AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) ) | ((('MACHINING_FEATURE_SCHEMA.SLOT_END' IN TYPEOF(fcr.relating_shape_aspect)) AND (fcr.relating_shape_aspect.description IN ['loop'])) AND ('MACHINING_FEATURE_SCHEMA.SLOT' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition))) )) = 1)) )) = 1)) )) =0) OR (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION')| ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'course of travel occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND ((sar.name = 'course of travel') AND ('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP' IN TYPEOF(sar)))) ) | (('TOPOLOGY_SCHEMA.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description IN ['complex','complete circular'])) )) = 1)) )) = 1)) )) = 0));
  WR6: SIZEOF(QUERY ( pdr <* get_property_definition_representations( SELF) | (( 'MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr. used_representation.name = 'maximum feature limit')) )) >= 0;
END_ENTITY;

ENTITY slot_end
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition);
  WR2: SELF.description IN ['open','radiused','flat','woodruff', 'loop'];
  WR3: (NOT (SELF.description IN ['open','radiused','loop'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION')| (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 0)) )) = 0);
  WR4: (NOT (SELF.description IN ['flat','woodruff'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR5: (NOT (SELF.description IN ['flat'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 2)) )) = 0)) )) = 0);
  WR6: (NOT (SELF.description = 'flat')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'first radius')) )) = 1)) )) = 0)) )) = 0);
  WR7: (NOT (SELF.description = 'flat')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'second radius')) )) = 1)) )) = 0)) )) = 0);
  WR8: (NOT (SELF.description = 'woodruff')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF(it)) AND (it.name = 'radius')) )) = 1)) )) = 0)) )) = 0);
  WR9: (NOT (SELF.description IN ['woodruff'])) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)) )) = 0)) )) = 0);
  WR10: SIZEOF(QUERY ( fcr <* QUERY ( sar <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.' + 'RELATING_SHAPE_ASPECT') | (((sar.description = 'slot end usage') AND (sar.name IN ['course of travel start','course of travel end'])) AND ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar))) ) | (((fcr.related_shape_aspect.description = 'end condition occurrence') AND ('MACHINING_FEATURE_SCHEMA.SLOT' IN TYPEOF(fcr.related_shape_aspect.of_shape.definition))) AND ('MACHINING_FEATURE_SCHEMA.SLOT_END' IN TYPEOF(fcr.relating_shape_aspect))) )) >= 1;
END_ENTITY;

ENTITY spherical_cap
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 3)) )) = 0)) )) = 0);
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'radius')) )) = 1)))) = 0)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'internal angle')))) = 1)) )) = 0)) )) = 0);
END_ENTITY;

ENTITY square_u_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF (SELF.of_shape.definition);
  WR2: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation))) = 1))) = 0;
  WR3: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | (NOT (SIZEOF (impl_rep.used_representation.items) >= 4) AND (SIZEOF (impl_rep.used_representation.items) <= 7)))) = 0))) = 0;
  WR4: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'width') OR (srwp_i.name = 'first angle') OR (srwp_i.name = 'second angle') OR (srwp_i.name = 'first radius') OR (srwp_i.name = 'second radius') OR (srwp_i.name = 'profile limit') OR (srwp_i.name = 'depth') )) = SIZEOF(pdr.used_representation.items)) )) = 1 )) = 1;
  WR5: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | ('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF (it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0;
  WR6: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'width'))) = 1))) = 0))) = 0;
  WR7: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'first radius'))) <= 1))) = 0))) = 0;
  WR8: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'second radius'))) <= 1))) = 0))) = 0;
  WR9: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'first angle'))) = 1))) = 0))) = 0;
  WR10: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'second angle'))) = 1))) = 0))) = 0;
  WR11: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation))AND (pdr.used_representation.name = 'profile limit'))) <= 1))) = 0;
  WR12: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'depth'))) <= 1))) = 0))) = 0;
END_ENTITY;

ENTITY step
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)) )) = 0)) )) = 0);
  WR2: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'course of travel occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'path feature component usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | (('TOPOLOGY_SCHEMA.PATH_FEATURE_COMPONENT' IN TYPEOF(sdr.relating_shape_aspect)) AND (sdr.relating_shape_aspect.description = 'linear')) )) = 1)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'removal boundary occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'profile usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | ('MACHINING_FEATURE_SCHEMA.VEE_PROFILE' IN TYPEOF(sdr.relating_shape_aspect)) )) = 1)) )) = 1)) )) = 0);
  WR4: SIZEOF(QUERY(pdr <* get_property_definition_representations (SELF) | ( 'MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.used_representation.name ='maximum feature limit'))) >=0;
  WR5: SIZEOF(QUERY ( pds <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pds)) AND (SIZEOF(QUERY ( csa <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.COMPOSITE_SHAPE_ASPECT' IN TYPEOF(csa)) AND (csa.name='uncut volume') AND (SIZEOF(QUERY ( sar <* csa.component_relationships | (('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_RELATIONSHIP' IN TYPEOF(sar)) AND (SIZEOF([ 'MACHINING_FEATURE_SCHEMA.BOSS', 'MACHINING_FEATURE_SCHEMA.PROTRUSION'] * TYPEOF(sar. related_shape_aspect)) = 1)) )) = 1)) )) <= 1)) )) = 1;
END_ENTITY;

ENTITY taper
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF(SELF.of_shape.definition));
  WR2: (SELF.description IN ['angle taper','diameter taper', 'directed taper']);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(impl_rep.used_representation.items) = 1)) )) = 0)) )) = 0);
  WR5: ((NOT (SELF.description = 'angle taper')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'taper angle')) )) = 1)) )) = 0)) )) = 0));
  WR6: ((NOT (SELF.description = 'diameter taper')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'final diameter')) )) = 1)) )) = 0)) )) = 0));
  WR7: ((NOT (SELF.description = 'directed taper')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'angle')) )) = 1)) )) = 0)) )) = 0));
  WR8: ((NOT (SELF.description = 'directed taper')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.DIRECTION_SHAPE_REPRESENTATION' IN TYPEOF(pdr.used_representation)) AND (pdr.used_representation.name = 'direction') )) = 1)) )) = 0));
END_ENTITY;

ENTITY tee_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF (SELF.of_shape.definition);
  WR2: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation))) = 1))) = 0;
  WR3: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | (NOT (SIZEOF (impl_rep.used_representation.items) >= 9) AND (SIZEOF (impl_rep.used_representation.items) <= 10)))) = 0))) = 0;
  WR4: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'width') OR (srwp_i.name = 'depth') OR (srwp_i.name = 'cross bar width') OR (srwp_i.name = 'cross bar depth') OR (srwp_i.name = 'first offset') OR (srwp_i.name = 'second offset') OR (srwp_i.name = 'first angle') OR (srwp_i.name = 'second angle') OR (srwp_i.name = 'radius') )) = SIZEOF(pdr.used_representation.items)) )) = 1 )) = 1;
  WR5: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | ('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF (it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0;
  WR6: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'width'))) = 1))) = 0))) = 0;
  WR7: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'depth'))) = 1))) = 0))) = 0;
  WR8: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'cross bar width'))) = 1))) = 0))) = 0;
  WR9: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'cross bar depth'))) = 1))) = 0))) = 0;
  WR10: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'first offset'))) = 1))) = 0))) = 0;
  WR11: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'second offset'))) = 1))) = 0))) = 0;
  WR12: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'first angle'))) = 1))) = 0))) = 0;
  WR13: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'second angle'))) = 1))) = 0))) = 0;
  WR14: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'radius'))) <= 1))) = 0))) = 0;
  WR15: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation))AND (pdr.used_representation.name = 'profile limit'))) <= 1))) = 0;
END_ENTITY;

ENTITY thread
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ((('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) AND (8 <= SIZEOF(pdr.used_representation.items)) AND (SIZEOF(pdr.used_representation.items) <= 11)) )) = 1) )) = 1);
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'major diameter')) )) = 1)) )) = 0)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'minor diameter')) )) <= 1)) )) = 0)) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'pitch diameter')) )) <= 1)) )) = 0)) )) = 0);
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.RATIO_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'number of threads')) )) = 1)) )) = 0)) )) = 0);
  WR6: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'fit class')) )) = 1)) )) = 0)) )) = 0);
  WR7: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'form')) )) = 1)) )) = 0)) )) = 0);
  WR8: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'hand')AND (it.description IN ['left', 'right']) ) )) = 1)) )) = 0)) )) = 0);
  WR9: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'qualifier')) )) <= 1)) )) = 0)) )) = 0);
  WR10: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'thread side') AND ((it.description = 'internal') OR (it.description = 'external'))) )) = 1)) )) = 0)) )) = 0);
  WR11: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'crest')) )) <= 1)) )) = 0)) )) = 0);
  WR12: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'partial area occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'applied area usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | ('MACHINING_FEATURE_SCHEMA.APPLIED_AREA' IN TYPEOF(sdr.relating_shape_aspect)) )) = 1)) )) = 1)) )) = 0);
  WR13: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'applied shape') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT' IN TYPEOF(sdr.relating_shape_aspect)) )) = 1)) )) = 1)) )) = 0);
  WR14: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'fit class 2')) )) <= 1)) )) = 0)) )) = 0);
  WR15: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'nominal size')) )) <= 1)) )) = 0)) )) = 0);
  WR16: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'thread runout') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'thread runout usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | ('MACHINING_FEATURE_SCHEMA.THREAD_RUNOUT' IN TYPEOF(sdr.relating_shape_aspect)) )) <= 1)) )) = 1)) )) = 0);
END_ENTITY;

ENTITY thread_runout
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(SELF.of_shape));
  WR2: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) )) = 1)) )) = 0);
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF (impl_rep.used_representation.items) = 3)) )) = 0)) )) = 0);
  WR4: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | NOT (srwp_i.name IN ['length of runout','pitch or dimension', 'included or extra']) )) > 0 ) )) = 0 ) )) = 0;
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'length of runout')) )) = 1)) )) = 0)) )) <= 1);
  WR6: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (( 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr. used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'pitch or dimension') AND (it.description IN ['pitch','pitch or dimension'])) )) = 1)) )) = 0)) )) = 0);
  WR7: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (( 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr. used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'included or extra') AND (it.description IN ['included','extra'])) )) = 1)) )) = 0)) )) = 0);
END_ENTITY;

ENTITY transition_feature
  SUPERTYPE OF (ONEOF (chamfer,
                       edge_round,
                       fillet))
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: SIZEOF(['PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION', 'MACHINING_FEATURE_SCHEMA.COMPOUND_FEATURE'] * TYPEOF(SELF.of_shape.definition)) = 1;
  WR2: SIZEOF(['MACHINING_FEATURE_SCHEMA.CHAMFER', 'MACHINING_FEATURE_SCHEMA.EDGE_ROUND', 'MACHINING_FEATURE_SCHEMA.FILLET'] * TYPEOF(SELF)) = 1;
END_ENTITY;

ENTITY turned_knurl
  SUBTYPE OF (feature_definition);
WHERE
  WR1: (SELF\characterized_object.description IN ['diamond','diagonal','straight']);
  WR2: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND ({6 <= SIZEOF(pdr.used_representation.items) <= 9}) )) = 1 )) = 1;
  WR3: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND ('MEASURE_SCHEMA.COUNT_MEASURE' IN TYPEOF(it\measure_with_unit.value_component)) AND (it.name = 'number of teeth')) )) <= 1)) )) = 0)) )) = 0);
  WR4: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'major diameter'))))= 1)) )) = 0)) )) = 0);
  WR5: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'nominal diameter')) )) = 1)) )) = 0)) )) = 0);
  WR6: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (( 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr. used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'tooth depth')) )) <= 1)) )) = 0)) )) = 0);
  WR7: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'root fillet')) )) <= 1)) )) = 0)) )) = 0);
  WR8: (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'diametral pitch')) )) = 1)) )) = 0)) )) = 0);
  WR9: ((NOT (SELF\characterized_object.description IN ['diamond','diagonal'])) OR ( SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN( pd,'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (( 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr. used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | ((SIZEOF([ 'QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF(it)) = 2) AND (it.name = 'helix angle')) )) = 1)) )) = 0)) )) = 0));
  WR10: ((NOT (SELF\characterized_object.description = 'diagonal')) OR (SIZEOF(QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | (NOT (SIZEOF(QUERY ( impl_rep <* QUERY ( pdr <* USEDIN(pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | (('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS') IN TYPEOF(pdr.used_representation)) ) | (NOT (SIZEOF(QUERY ( it <* impl_rep.used_representation.items | (('QUALIFIED_MEASURE_SCHEMA.DESCRIPTIVE_REPRESENTATION_ITEM' IN TYPEOF(it)) AND (it.name = 'helix hand')) )) = 1)) )) = 0)) )) = 0));
  WR11: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((sa_occ.description = 'partial area occurrence') AND (SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'applied area usage') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | ('MACHINING_FEATURE_SCHEMA.APPLIED_AREA' IN TYPEOF(sdr.relating_shape_aspect)) )) = 1)) )) = 1)) )) = 0);
  WR12: (SIZEOF(QUERY ( pds <* QUERY ( pd <* USEDIN(SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd)) ) | (NOT (SIZEOF(QUERY ( sa_occ <* USEDIN(pds, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE') | ((SIZEOF(QUERY ( sdr <* QUERY ( sar <* USEDIN(sa_occ, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT') | ((sar.description = 'applied shape') AND (('MACHINING_FEATURE_SCHEMA.SHAPE_DEFINING_RELATIONSHIP') IN TYPEOF(sar))) ) | ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT' IN TYPEOF(sdr.relating_shape_aspect)) )) = 1)) )) = 1)) )) = 0);
END_ENTITY;

ENTITY vee_profile
  SUBTYPE OF (shape_aspect);
WHERE
  WR1: 'MACHINING_FEATURE_SCHEMA.FEATURE_COMPONENT_DEFINITION' IN TYPEOF (SELF.of_shape.definition);
  WR2: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation))) = 1))) = 0;
  WR3: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | (NOT (SIZEOF (impl_rep.used_representation.items) >= 3) AND (SIZEOF (impl_rep.used_representation.items) <= 6)))) = 0))) = 0;
  WR4: SIZEOF( QUERY( pd <* USEDIN( SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | SIZEOF( QUERY( pdr <* USEDIN( pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF(pdr.used_representation)) AND (SIZEOF( QUERY( srwp_i <* pdr.used_representation.items | (srwp_i.name = 'orientation') OR (srwp_i.name = 'profile angle') OR (srwp_i.name = 'tilt angle') OR (srwp_i.name = 'profile radius') OR (srwp_i.name = 'first length') OR (srwp_i.name = 'second length') )) = SIZEOF(pdr.used_representation.items)) )) = 1 )) = 1;
  WR5: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | ('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF (it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0;
  WR6: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | ('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF (it)) AND ('MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF (it\measure_with_unit.value_component)) AND (it.name = 'profile radius'))) <= 1))) = 0))) = 0;
  WR7: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'profile angle'))) = 1))) = 0))) = 0;
  WR8: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | (SIZEOF (['QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM', 'GEOMETRY_SCHEMA.PLANE_ANGLE_MEASURE_WITH_UNIT'] * TYPEOF (it)) = 2) AND (it.name = 'tilt angle'))) = 1))) = 0))) = 0;
  WR9: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | ('MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF (pdr.used_representation))AND (pdr.used_representation.name = 'profile limit'))) <= 1))) = 0;
  WR10: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | ('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF (it)) AND ('MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF (it\measure_with_unit.value_component)) AND (it.name = 'first length'))) <= 1))) = 0))) = 0;
  WR11: SIZEOF (QUERY (pd <* USEDIN (SELF, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | ('QUALIFIED_MEASURE_SCHEMA.MEASURE_REPRESENTATION_ITEM' IN TYPEOF (it)) AND ('MEASURE_SCHEMA.LENGTH_MEASURE_WITH_UNIT' IN TYPEOF (it\measure_with_unit.value_component)) AND (it.name = 'second length'))) <= 1))) = 0))) = 0;
END_ENTITY;

SUBTYPE_CONSTRAINT machining_feature_definition_subtypes FOR feature_definition;
  ONEOF (boss,
         compound_feature,
         externally_defined_feature_definition,
         flat_face,
         gear,
         marking,
         outer_round,
         outside_profile,
         pocket,
         protrusion,
         removal_volume,
         replicate_feature,
         revolved_profile,
         rib_top,
         round_hole,
         rounded_end,
         spherical_cap,
         step,
         slot,
         thread,
         turned_knurl);
END_SUBTYPE_CONSTRAINT;

RULE machining_feature_definition_constraints FOR
(feature_definition);
LOCAL
  mfds : SET OF feature_definition := [];
END_LOCAL;
  mfds := QUERY(temp <* feature_definition | 'MACHINING_FEATURE_SCHEMA.MACHINING_FEATURE_DEFINITION' IN TYPEOF (temp) );
WHERE
  WR1: SIZEOF(QUERY( mfd <* mfds | NOT (SIZEOF(QUERY( pdr <* get_property_definition_representations (mfd) | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF ( pdr.used_representation ) ) ) <=1 ) ) ) = 0;
  WR2: SIZEOF(QUERY( mfd <* mfds | NOT (SIZEOF (QUERY (pd <* USEDIN (mfd, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | NOT (SIZEOF (QUERY (impl_rep <* QUERY (pdr <* USEDIN (pd, 'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.PROPERTY_DEFINITION_REPRESENTATION.DEFINITION') | 'SHAPE_ASPECT_DEFINITION_SCHEMA.SHAPE_REPRESENTATION_WITH_PARAMETERS' IN TYPEOF (pdr.used_representation)) | NOT (SIZEOF (QUERY (it <* impl_rep.used_representation.items | ('GEOMETRY_SCHEMA.PLACEMENT' IN TYPEOF (it)) AND (it.name = 'orientation'))) = 1))) = 0))) = 0 ) ) ) = 0;
  WR3: SIZEOF(QUERY( mfd <* mfds | NOT ((NOT (SIZEOF(['MACHINING_FEATURE_SCHEMA.ROUND_HOLE', 'MACHINING_FEATURE_SCHEMA.BOSS', 'MACHINING_FEATURE_SCHEMA.OUTSIDE_PROFILE', 'MACHINING_FEATURE_SCHEMA.REMOVAL_VOLUME', 'MACHINING_FEATURE_SCHEMA.FLAT_FACE', 'MACHINING_FEATURE_SCHEMA.POCKET', 'MACHINING_FEATURE_SCHEMA.PROTRUSION', 'MACHINING_FEATURE_SCHEMA.RIB_TOP', 'MACHINING_FEATURE_SCHEMA.ROUNDED_END', 'MACHINING_FEATURE_SCHEMA.SLOT', 'MACHINING_FEATURE_SCHEMA.STEP'] * TYPEOF(mfds)) = 1)) OR ((SIZEOF(QUERY(pdr <* get_property_definition_representations (mfd) | ( 'MACHINING_FEATURE_SCHEMA.PLANAR_SHAPE_REPRESENTATION' IN TYPEOF ( pdr.used_representation ) ) AND ( pdr.used_representation.name ='maximum feature limit'))) >=0)) ) ) ) = 0;
END_RULE;

END_SCHEMA;  -- machining_feature_schema


© ISO 2021 — All rights reserved