Schema: explicit_constraint_schema

Source : ISO 10303-108



SCHEMA explicit_constraint_schema;

REFERENCE FROM support_resource_schema   -- ISO 10303-41
  (text);

REFERENCE FROM representation_schema   -- ISO 10303-43
  (item_in_context,
   representation_item,
   using_representations);

REFERENCE FROM mathematical_functions_schema   -- ISO 10303-50
  (compatible_spaces,
   maths_variable,
   values_space_of);

REFERENCE FROM parameterization_schema   -- ISO 10303-108
  (bound_variational_parameter,
   variational_parameter,
   unbound_variational_parameter);

REFERENCE FROM variational_representation_schema   -- ISO 10303-108
  (variational_representation_item);

REFERENCE FROM ISO13584_generic_expressions_schema   -- ISO 13584-20
  (used_variables);

REFERENCE FROM ISO13584_expressions_schema   -- ISO 13584-20
  (boolean_expression,
   expression);


TYPE constraint_group_member = SELECT
   (explicit_constraint,
    simultaneous_constraint_group);
END_TYPE;

ENTITY defined_constraint
  ABSTRACT SUPERTYPE OF (equal_parameter_constraint)
  SUBTYPE OF (explicit_constraint);
END_ENTITY;

ENTITY equal_parameter_constraint
  SUBTYPE OF (defined_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF variational_parameter;
  SELF\explicit_constraint.reference_elements : SET[0:1] OF variational_parameter;
WHERE
  WR1: SIZEOF(SELF\explicit_constraint.constrained_elements + SELF\explicit_constraint.reference_elements) >= 2;
END_ENTITY;

ENTITY explicit_constraint
  ABSTRACT SUPERTYPE OF (ONEOF (defined_constraint,
                                free_form_constraint))
  SUBTYPE OF (variational_representation_item);
  description : OPTIONAL text;
  constrained_elements : SET[1:?] OF representation_item;
  reference_elements : SET[0:?] OF representation_item;
WHERE
  WR1: SIZEOF(constrained_elements * reference_elements) = 0;
END_ENTITY;

ENTITY free_form_assignment
  SUBTYPE OF (free_form_constraint);
WHERE
  WR1: SIZEOF(QUERY(q <* SELF\free_form_constraint.constrained_elements | q IN used_variables (SELF\free_form_constraint.constraining_expression))) = 0;
  WR2: SIZEOF(QUERY(q <* SELF\free_form_constraint.reference_elements | NOT (q IN used_variables( SELF\free_form_constraint.constraining_expression)))) = 0;
  WR3: SIZEOF(SELF\free_form_constraint.reference_elements) >= 1;
  WR4: SIZEOF(QUERY(q <* SELF\free_form_constraint.constrained_elements | NOT (compatible_spaces(values_space_of( SELF\free_form_constraint.constraining_expression), q\maths_variable.values_space)))) = 0;
END_ENTITY;

ENTITY free_form_constraint
  ABSTRACT SUPERTYPE OF (ONEOF (free_form_assignment,
                                free_form_relation))
  SUBTYPE OF (explicit_constraint);
  SELF\explicit_constraint.constrained_elements : SET[1:?] OF variational_parameter;
  SELF\explicit_constraint.reference_elements : SET[0:?] OF variational_parameter;
  constraining_expression : expression;
END_ENTITY;

ENTITY free_form_relation
  SUBTYPE OF (free_form_constraint);
WHERE
  WR1: 'ISO13584_EXPRESSIONS_SCHEMA.BOOLEAN_EXPRESSION' IN TYPEOF (SELF\free_form_constraint.constraining_expression);
  WR2: SIZEOF(QUERY(q <* (SELF\free_form_constraint.constrained_elements + SELF\free_form_constraint.reference_elements) | NOT (q IN used_variables (SELF\free_form_constraint.constraining_expression)))) = 0;
END_ENTITY;

ENTITY simultaneous_constraint_group
  SUBTYPE OF (variational_representation_item);
  constraint_group : SET[2:?] OF constraint_group_member;
WHERE
  WR1: SIZEOF(QUERY(q <* using_representations(SELF) | SIZEOF(QUERY(r <* q.items | ('EXPLICIT_CONSTRAINT_SCHEMA.SIMULTANEOUS_CONSTRAINT_GROUP' IN TYPEOF(r)) AND (SIZEOF(QUERY(s <* constraint_group | (s IN r.constraint_group) AND NOT (r :=: SELF))) > 0))) > 0)) = 0;
  WR2: SIZEOF(QUERY(q <* using_representations(constraint_group[1]) | (SIZEOF(QUERY(r <* constraint_group | item_in_context(r,q.context_of_items))) = SIZEOF(constraint_group)))) > 0;
  WR3: SIZEOF(QUERY(q <* constraint_group | (('EXPLICIT_CONSTRAINT_SCHEMA.EXPLICIT_CONSTRAINT' IN TYPEOF(q)) AND (SIZEOF(QUERY(r <* q.constrained_elements | SIZEOF(QUERY(s <* constraint_group | r IN s.reference_elements)) > 0)) > 0)))) = 0;
END_ENTITY;

END_SCHEMA;  -- explicit_constraint_schema