(* $Id: management_resources_schema.exp,v 1.40 2019/01/23 19:28:13 brandon Exp $ ISO 10303 TC184/SC4/WG12 N10233 EXPRESS Source: ISO 10303-41 ed6 Fundamentals of product description and support - Management resources schema The following permission notice and disclaimer shall be included in all copies of this EXPRESS schema ("the Schema"), and derivations of the Schema: Copyright ISO 2019 All rights reserved Permission is hereby granted, free of charge in perpetuity, to any person obtaining a copy of the Schema, to use, copy, modify, merge and distribute free of charge, copies of the Schema for the purposes of developing, implementing, installing and using software based on the Schema, and to permit persons to whom the Schema is furnished to do so, subject to the following conditions: THE SCHEMA IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SCHEMA OR THE USE OR OTHER DEALINGS IN THE SCHEMA. In addition, any modified copy of the Schema shall include the following notice: THIS SCHEMA HAS BEEN MODIFIED FROM THE SCHEMA DEFINED IN ISO 10303-41 ed4 Fundamentals of product description and support - Management resources schema AND SHOULD NOT BE INTERPRETED AS COMPLYING WITH THAT STANDARD *) SCHEMA management_resources_schema '{iso standard 10303 part(41) version(8) object(1) management_resources_schema(15)}'; REFERENCE FROM action_schema; -- ISO 10303-41 REFERENCE FROM application_context_schema (library_context); -- ISO 10303-41 REFERENCE FROM approval_schema; -- ISO 10303-41 REFERENCE FROM basic_attribute_schema ( -- ISO 10303-41 get_role, object_role, role_association, role_select); REFERENCE FROM certification_schema; -- ISO 10303-41 REFERENCE FROM contract_schema; -- ISO 10303-41 REFERENCE FROM date_time_schema; -- ISO 10303-41 REFERENCE FROM document_schema; -- ISO 10303-41 REFERENCE FROM effectivity_schema; -- ISO 10303-41 REFERENCE FROM experience_schema; -- ISO 10303-41 REFERENCE FROM external_reference_schema (external_source); -- ISO 10303-41 REFERENCE FROM group_schema; -- ISO 10303-41 REFERENCE FROM location_schema; -- ISO 10303-41 REFERENCE FROM person_organization_schema; -- ISO 10303-41 REFERENCE FROM qualifications_schema; -- ISO 10303-41 REFERENCE FROM security_classification_schema; -- ISO 10303-41 REFERENCE FROM support_resource_schema; -- ISO 10303-41 TYPE mrs_role_select = SELECT BASED_ON role_select WITH ( action_assignment, action_request_assignment, approval_assignment, certification_assignment, contract_assignment, document_reference, effectivity_assignment, external_referent_assignment, group_assignment, name_assignment, security_classification_assignment); END_TYPE; TYPE assignment_object_select = EXTENSIBLE SELECT; END_TYPE; TYPE attribute_type = SELECT (label, text); END_TYPE; ENTITY action_assignment ABSTRACT SUPERTYPE; assigned_action : action; DERIVE role : object_role := get_role(SELF); WHERE WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; ENTITY action_method_assignment ABSTRACT SUPERTYPE; assigned_action_method : action_method; role : action_method_role; END_ENTITY; ENTITY action_method_role; name : label; description : OPTIONAL text; END_ENTITY; ENTITY action_request_assignment ABSTRACT SUPERTYPE; assigned_action_request : versioned_action_request; DERIVE role : object_role := get_role(SELF); WHERE WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; ENTITY approval_assignment ABSTRACT SUPERTYPE; assigned_approval : approval; DERIVE role : object_role := get_role(SELF); WHERE WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; ENTITY assignment_object_relationship; id : OPTIONAL identifier; description : OPTIONAL text; relating : assignment_object_select; related : assignment_object_select; relation_type : STRING; WHERE WR1: acyclic_assignment_object_relationship(SELF, [related], 'MANAGEMENT_RESOURCES_SCHEMA.ASSIGNMENT_OBJECT_RELATIONSHIP'); END_ENTITY; ENTITY attribute_classification_assignment ABSTRACT SUPERTYPE; assigned_class : group; attribute_name : label; role : classification_role; END_ENTITY; ENTITY attribute_value_assignment ABSTRACT SUPERTYPE; attribute_name : label; attribute_value : attribute_type; role : attribute_value_role; END_ENTITY; ENTITY attribute_value_role; name : label; description : OPTIONAL text; END_ENTITY; ENTITY certification_assignment ABSTRACT SUPERTYPE; assigned_certification : certification; DERIVE role : object_role := get_role(SELF); WHERE WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; ENTITY classification_assignment ABSTRACT SUPERTYPE; assigned_class : group; role : classification_role; END_ENTITY; ENTITY classification_assignment_relationship; id : OPTIONAL identifier; description : OPTIONAL text; relating : classification_assignment; related : classification_assignment; relation_type : STRING; WHERE WR1: acyclic_classification_assignment_relationship(SELF, [related], 'MANAGEMENT_RESOURCES_SCHEMA.CLASSIFICATION_ASSIGNMENT_RELATIONSHIP'); END_ENTITY; ENTITY classification_role; name : label; description : OPTIONAL text; END_ENTITY; ENTITY contract_assignment ABSTRACT SUPERTYPE; assigned_contract : contract; DERIVE role : object_role := get_role(SELF); WHERE WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; ENTITY date_and_time_assignment ABSTRACT SUPERTYPE; assigned_date_and_time : date_and_time; role : date_time_role; END_ENTITY; ENTITY date_assignment ABSTRACT SUPERTYPE; assigned_date : date; role : date_role; END_ENTITY; ENTITY document_reference ABSTRACT SUPERTYPE; assigned_document : document; source : label; DERIVE role : object_role := get_role(SELF); WHERE WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; ENTITY document_usage_constraint_assignment ABSTRACT SUPERTYPE; assigned_document_usage : document_usage_constraint; role : document_usage_role; END_ENTITY; ENTITY document_usage_role; name : label; description : OPTIONAL text; END_ENTITY; ENTITY effectivity_assignment ABSTRACT SUPERTYPE; assigned_effectivity : effectivity; DERIVE role : object_role := get_role(SELF); WHERE WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; ENTITY effectivity_context_assignment ABSTRACT SUPERTYPE; assigned_effectivity_assignment : effectivity_assignment; role : effectivity_context_role; END_ENTITY; ENTITY effectivity_context_role; name : label; description : OPTIONAL text; END_ENTITY; ENTITY event_occurrence_assignment ABSTRACT SUPERTYPE; assigned_event_occurrence : event_occurrence; role : event_occurrence_role; END_ENTITY; ENTITY event_occurrence_context_assignment ABSTRACT SUPERTYPE; assigned_event_occurrence_assignment : event_occurrence_assignment; role : event_occurrence_context_role; END_ENTITY; ENTITY experience_assignment ABSTRACT SUPERTYPE; id : identifier; name : label; description : OPTIONAL text; assigned_experience : experience; role : experience_role; END_ENTITY; ENTITY experience_role; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; ENTITY experience_type_assignment ABSTRACT SUPERTYPE; id : identifier; name : label; description : OPTIONAL text; assigned_experience_type : experience_type; role : experience_type_role; END_ENTITY; ENTITY experience_type_role; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; ENTITY external_identification_assignment ABSTRACT SUPERTYPE SUBTYPE OF (identification_assignment); source : external_source; END_ENTITY; ENTITY external_identification_assignment_relationship; id : OPTIONAL identifier; description : OPTIONAL text; relating : external_identification_assignment; related : external_identification_assignment; relation_type : STRING; WHERE WR1: acyclic_external_identification_assignment_relationship(SELF, [related], 'MANAGEMENT_RESOURCES_SCHEMA.EXTERNAL_IDENTIFICATION_ASSIGNMENT_RELATIONSHIP'); END_ENTITY; ENTITY external_referent_assignment ABSTRACT SUPERTYPE; assigned_name : label; DERIVE role : object_role := get_role(SELF); UNIQUE UR1: assigned_name; WHERE WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; ENTITY group_assignment ABSTRACT SUPERTYPE; assigned_group : group; DERIVE role : object_role := get_role(SELF); WHERE WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; ENTITY identification_assignment ABSTRACT SUPERTYPE; assigned_id : identifier; role : identification_role; END_ENTITY; ENTITY identification_assignment_relationship; name : label; description : OPTIONAL text; relating_identification_assignment : identification_assignment; related_identification_assignment : identification_assignment; END_ENTITY; ENTITY identification_role; name : label; description : OPTIONAL text; END_ENTITY; ENTITY library_assignment ABSTRACT SUPERTYPE SUBTYPE OF (external_referent_assignment); frame_of_reference : library_context; UNIQUE UR1: frame_of_reference; END_ENTITY; ENTITY location_assignment ABSTRACT SUPERTYPE; id : identifier; name : label; description : OPTIONAL text; assigned_location : location; role : location_role; END_ENTITY; ENTITY location_representation_assignment ABSTRACT SUPERTYPE; id : identifier; name : label; description : OPTIONAL text; represented_location : location; role : location_representation_role; END_ENTITY; ENTITY location_representation_role; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; ENTITY location_role; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; ENTITY name_assignment ABSTRACT SUPERTYPE; assigned_name : label; DERIVE role : object_role := get_role(SELF); WHERE WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; ENTITY organization_assignment ABSTRACT SUPERTYPE; assigned_organization : organization; role : organization_role; END_ENTITY; ENTITY organization_type_assignment ABSTRACT SUPERTYPE; id : identifier; name : label; description : OPTIONAL text; assigned_organization_type : organization_type; role : organization_type_role; END_ENTITY; ENTITY organization_type_role; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; ENTITY organizational_project_assignment ABSTRACT SUPERTYPE; assigned_organizational_project : organizational_project; role : organizational_project_role; END_ENTITY; ENTITY organizational_project_role; name : label; description : OPTIONAL text; END_ENTITY; ENTITY person_and_organization_assignment ABSTRACT SUPERTYPE; assigned_person_and_organization : person_and_organization; role : person_and_organization_role; END_ENTITY; ENTITY person_assignment ABSTRACT SUPERTYPE; assigned_person : person; role : person_role; END_ENTITY; ENTITY person_type_assignment ABSTRACT SUPERTYPE; id : identifier; name : label; description : OPTIONAL text; assigned_person_type : person_type; role : person_type_role; END_ENTITY; ENTITY person_type_definition_assignment ABSTRACT SUPERTYPE; id : identifier; name : label; description : OPTIONAL text; assigned_person_type_definition : person_type_definition; role : person_type_definition_role; END_ENTITY; ENTITY person_type_definition_role; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; ENTITY person_type_role; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; ENTITY position_in_organization_assignment ABSTRACT SUPERTYPE; id : identifier; name : label; description : OPTIONAL text; assigned_position_in_organization : position_in_organization; role : position_in_organization_role; END_ENTITY; ENTITY position_in_organization_role; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; ENTITY position_in_organization_type_assignment ABSTRACT SUPERTYPE; id : identifier; name : label; description : OPTIONAL text; assigned_position_in_organization_type : position_in_organization_type; role : position_in_organization_type_role; END_ENTITY; ENTITY position_in_organization_type_role; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; ENTITY qualification_assignment ABSTRACT SUPERTYPE; id : identifier; name : label; description : OPTIONAL text; assigned_qualification : qualification; role : qualification_role; END_ENTITY; ENTITY qualification_role; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; ENTITY qualification_type_assignment ABSTRACT SUPERTYPE; id : identifier; name : label; description : OPTIONAL text; assigned_qualification_type : qualification_type; role : qualification_type_role; END_ENTITY; ENTITY qualification_type_role; id : identifier; name : label; description : OPTIONAL text; END_ENTITY; ENTITY security_classification_assignment ABSTRACT SUPERTYPE; assigned_security_classification : security_classification; DERIVE role : object_role := get_role(SELF); WHERE WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1; END_ENTITY; ENTITY time_assignment ABSTRACT SUPERTYPE; assigned_time : local_time; role : time_role; END_ENTITY; ENTITY time_interval_assignment ABSTRACT SUPERTYPE; assigned_time_interval : time_interval; role : time_interval_role; END_ENTITY; FUNCTION acyclic_assignment_object_relationship (relation : assignment_object_relationship; relatives : SET [1:?] OF assignment_object_select; specific_relation : STRING):BOOLEAN; LOCAL x : SET OF assignment_object_relationship; END_LOCAL; IF relation.relating IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(aor <* bag_to_set(USEDIN(relation.relating, 'MANAGEMENT_RESOURCES_SCHEMA.' + 'ASSIGNMENT_OBJECT_RELATIONSHIP.' + 'RELATED')) | specific_relation IN TYPEOF(aor)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_assignment_object_relationship(x[i], relatives + relation.relating, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE); END_FUNCTION; FUNCTION acyclic_classification_assignment_relationship (relation : classification_assignment_relationship; relatives : SET [1:?] OF classification_assignment; specific_relation : STRING):BOOLEAN; LOCAL x : SET OF classification_assignment_relationship; END_LOCAL; IF relation.relating IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(car <* bag_to_set(USEDIN(relation.relating, 'MANAGEMENT_RESOURCES_SCHEMA.' + 'CLASSIFICATION_ASSIGNMENT_RELATIONSHIP.' + 'RELATED')) | specific_relation IN TYPEOF(car)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_classification_assignment_relationship(x[i], relatives + relation.relating, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE); END_FUNCTION; FUNCTION acyclic_external_identification_assignment_relationship (relation : external_identification_assignment_relationship; relatives : SET [1:?] OF external_identification_assignment; specific_relation : STRING):BOOLEAN; LOCAL x : SET OF external_identification_assignment_relationship; END_LOCAL; IF relation.relating IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(eiar <* bag_to_set(USEDIN(relation.relating, 'MANAGEMENT_RESOURCES_SCHEMA.' + 'EXTERNAL_IDENTIFICATION_ASSIGNMENT_RELATIONSHIP.' + 'RELATED')) | specific_relation IN TYPEOF(eiar)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_external_identification_assignment_relationship(x[i], relatives + relation.relating, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE); END_FUNCTION; FUNCTION acyclic_identification_assignment_relationship (relation : identification_assignment_relationship; relatives : SET [1:?] OF identification_assignment; specific_relation : STRING):BOOLEAN; LOCAL x : SET OF identification_assignment_relationship; END_LOCAL; IF relation.relating_identification_assignment IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(ia <* bag_to_set(USEDIN(relation.relating_identification_assignment, 'MANAGEMENT_RESOURCES_SCHEMA.' + 'IDENTIFICATION_ASSIGNMENT_RELATIONSHIP.' + 'RELATED_IDENTIFICATION_ASSIGNMENT')) | specific_relation IN TYPEOF(ia)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_identification_assignment_relationship(x[i], relatives + relation.relating_identification_assignment, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE); END_FUNCTION; END_SCHEMA;