(*
 * $Id$
 *
 * JSDAI(TM), a way to implement STEP, ISO 10303
 * Copyright (C) 1997-2008, LKSoftWare GmbH, Germany
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License
 * version 3 as published by the Free Software Foundation (AGPL v3).
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * JSDAI is a registered trademark of LKSoftWare GmbH, Germany
 * This software is also available under commercial licenses.
 * See also http://www.jsdai.net/
 *)

(*schema_mapping network_functional_design_view(Network_functional_design_view_arm, Network_functional_design_view_mim);*)


entity_mapping bus_element_link_armx(bus_element_link_armx, bus_element_link);

mapping_constraints;
{[bus_element_link <=
product_definition_relationship]
[bus_element_link <=
product_definition]}

end_mapping_constraints;

attribute_mapping precedent_element(precedent_element, $PATH, Bus_structural_definition);
bus_element_link <=
product_definition_relationship
product_definition_relationship.relating_product_definition ->
product_definition =>
bus_structural_definition

end_attribute_mapping;

attribute_mapping subsequent_element(subsequent_element, $PATH, Bus_structural_definition);
bus_element_link <=
product_definition_relationship
product_definition_relationship.related_product_definition ->
product_definition =>
bus_structural_definition

end_attribute_mapping;

attribute_mapping precedent_element(precedent_element, $PATH, Functional_unit_network_node_definition);
bus_element_link <=
product_definition_relationship
product_definition_relationship.relating_product_definition ->
{product_definition <-
product_definition_context_association.definition
product_definition_context_association
{product_definition_context_association.role ->
product_definition_context_role
product_definition_context_role.name = 'part definition type'}
product_definition_context_association.frame_of_reference ->
product_definition_context <=
application_context_element
application_context_element.name = 'functional network design'}
product_definition =>
network_node_definition

end_attribute_mapping;

attribute_mapping subsequent_element(subsequent_element, $PATH, Functional_unit_network_node_definition);
bus_element_link <=
product_definition_relationship
product_definition_relationship.related_product_definition ->
{product_definition <-
product_definition_context_association.definition
product_definition_context_association
{product_definition_context_association.role ->
product_definition_context_role
product_definition_context_role.name = 'part definition type'}
product_definition_context_association.frame_of_reference ->
product_definition_context <=
application_context_element
application_context_element.name = 'functional network design'}
product_definition =>
network_node_definition

end_attribute_mapping;

end_entity_mapping;

entity_mapping bus_structural_definition_armx(bus_structural_definition_armx, bus_structural_definition);

mapping_constraints;
bus_structural_definition <=
product_definition

end_mapping_constraints;

attribute_mapping bus_name(bus_name, product.name);
bus_structural_definition <=
product_definition
product_definition.formation ->
product_definition_formation
product_definition_formation.of_product ->
product
product.name

end_attribute_mapping;

attribute_mapping composition(composition, $PATH, Bus_element_link);
bus_structural_definition <=
product_definition <-
product_definition_relationship.relating_product_definition
{product_definition_relationship
product_definition_relationship.name = 'bus composition'}
product_definition_relationship.related_product_definition ->
product_definition =>
bus_element_link

end_attribute_mapping;

end_entity_mapping;

entity_mapping functional_unit_armx(functional_unit_armx, component_functional_unit);

mapping_constraints;
component_functional_unit <=
product_definition

end_mapping_constraints;

attribute_mapping reference_designation(reference_designation, product_definition.id);
component_functional_unit <=
product_definition
product_definition.id

end_attribute_mapping;

attribute_mapping functional_property(functional_property, $PATH, Parameter_assignment_override_armx);
component_functional_unit <=
product_definition
characterized_product_definition = product_definition
characterized_product_definition
characterized_definition = characterized_product_definition
characterized_definition <-
property_definition.definition
property_definition <-
property_definition_representation.definition
property_definition_representation
property_definition_representation.used_representation ->
representation =>
parameter_assignment_override

end_attribute_mapping;

attribute_mapping definition(definition, $PATH, Functional_unit_definition);
component_functional_unit <=
product_definition <-
product_definition_relationship.related_product_definition
product_definition_relationship
{product_definition_relationship
product_definition_relationship.name = 'instantiated functional unit'}
product_definition_relationship.relating_product_definition ->
{product_definition <-
product_definition_context_association.definition
product_definition_context_association
{product_definition_context_association.role ->
product_definition_context_role
product_definition_context_role.name = 'part definition type'}
product_definition_context_association.frame_of_reference ->
product_definition_context <=
application_context_element
(application_context_element.name = 'functional network design')
(application_context_element.name = 'functional design usage')}
product_definition =>
functional_unit

end_attribute_mapping;

end_entity_mapping;

entity_mapping Functional_unit_network_definition(Functional_unit_network_definition, functional_unit);

mapping_constraints;
functional_unit <=
product_definition
{product_definition <-
product_definition_context_association.definition
product_definition_context_association
{product_definition_context_association.role ->
product_definition_context_role
product_definition_context_role.name = 'part definition type'}
product_definition_context_association.frame_of_reference ->
product_definition_context <=
application_context_element
application_context_element.name = 'functional network design'}

end_mapping_constraints;

attribute_mapping usage_view(usage_view, $PATH, Functional_unit_usage_view);
functional_unit <=
product_definition <-
product_definition_relationship.related_product_definition
{product_definition_relationship
product_definition_relationship.name = 'design usage'}
product_definition_relationship
product_definition_relationship.relating_product_definition ->
{product_definition <-
product_definition_context_association.definition
product_definition_context_association
{product_definition_context_association.role ->
product_definition_context_role
product_definition_context_role.name = 'part definition type'}
product_definition_context_association.frame_of_reference ->
product_definition_context <=
application_context_element
application_context_element.name = 'functional design usage'}
product_definition =>
functional_unit

end_attribute_mapping;

end_entity_mapping;

entity_mapping Functional_unit_network_node_definition(Functional_unit_network_node_definition, network_node_definition);

mapping_constraints;
network_node_definition <=
product_definition
{product_definition <-
product_definition_context_association.definition
product_definition_context_association
{product_definition_context_association.role ->
product_definition_context_role
product_definition_context_role.name = 'part definition type'}
product_definition_context_association.frame_of_reference ->
product_definition_context <=
application_context_element
application_context_element.name = 'functional network design'}

end_mapping_constraints;

attribute_mapping functional_unit_network_node_name(functional_unit_network_node_name, product_definition.name);
network_node_definition <=
product_definition
product_definition.name

end_attribute_mapping;

attribute_mapping associated_functional_unit_definition(associated_functional_unit_definition, $PATH, Functional_unit_network_definition);
network_node_definition <=
product_definition <-
product_definition_relationship.related_product_definition
product_definition_relationship
{product_definition_relationship
product_definition_relationship.name = 'functional unit network node'}
product_definition_relationship.relating_product_definition ->
{product_definition <-
product_definition_context_association.definition
product_definition_context_association
{product_definition_context_association.role ->
product_definition_context_role
product_definition_context_role.name = 'part definition type'}
product_definition_context_association.frame_of_reference ->
product_definition_context <=
application_context_element
application_context_element.name = 'functional network design'}
product_definition =>
functional_unit

end_attribute_mapping;

end_entity_mapping;

entity_mapping Functional_unit_network_terminal_definition_bus_assignment(Functional_unit_network_terminal_definition_bus_assignment, property_definition_relationship);

mapping_constraints;
{property_definition_relationship.name = 'functional unit network terminal definition bus assignment'}

end_mapping_constraints;

attribute_mapping connected_bus(connected_bus, $PATH, Bus_structural_definition);
property_definition_relationship
property_definition_relationship.relating_property_definition ->
property_definition
property_definition.definition ->
characterized_definition
characterized_definition = characterized_product_definition
characterized_product_definition
characterized_product_definition = product_definition
product_definition =>
bus_structural_definition

end_attribute_mapping;

attribute_mapping connected_terminal(connected_terminal, $PATH, Functional_unit_usage_view_terminal_definition);
property_definition_relationship
property_definition_relationship.related_property_definition ->
property_definition
property_definition.definition -> 
characterized_definition
characterized_definition = shape_definition
shape_definition
shape_definition = shape_aspect 
shape_aspect
shape_aspect =>
functional_unit_terminal_definition

end_attribute_mapping;

end_entity_mapping;

entity_mapping Functional_unit_network_terminal_definition_node_assignment(Functional_unit_network_terminal_definition_node_assignment, property_definition_relationship);

mapping_constraints;
{property_definition_relationship.name = 'functional unit network terminal definition node assignment'}

end_mapping_constraints;

attribute_mapping composed_node(composed_node, $PATH, Functional_unit_network_node_definition);
property_definition_relationship
property_definition_relationship.relating_property_definition ->
property_definition
property_definition.definition ->
characterized_definition
characterized_definition = characterized_product_definition
characterized_product_definition
characterized_product_definition = product_definition
{product_definition <-
product_definition_context_association.definition
product_definition_context_association
{product_definition_context_association.role ->
product_definition_context_role
product_definition_context_role.name = 'part definition type'}
product_definition_context_association.frame_of_reference ->
product_definition_context <=
application_context_element
application_context_element.name = 'functional network design'}
product_definition =>
network_node_definition

end_attribute_mapping;

attribute_mapping connected_terminal(connected_terminal, $PATH, Functional_unit_usage_view_terminal_definition);
property_definition_relationship
property_definition_relationship.related_property_definition ->
property_definition
property_definition.definition -> 
characterized_definition
characterized_definition = shape_definition
shape_definition
shape_definition = shape_aspect 
shape_aspect
shape_aspect =>
functional_unit_terminal_definition

end_attribute_mapping;

end_entity_mapping;

entity_mapping Functional_unit_terminal(Functional_unit_terminal, component_functional_terminal);

mapping_constraints;
component_functional_terminal <=
shape_aspect

end_mapping_constraints;

attribute_mapping accessed_functional_unit(accessed_functional_unit, $PATH, Functional_unit);
component_functional_terminal <=
shape_aspect
shape_aspect.of_shape ->
product_definition_shape <=
property_definition
property_definition.definition ->
characterized_definition
characterized_definition = characterized_product_definition
characterized_product_definition
characterized_product_definition = product_definition
product_definition =>
component_functional_unit

end_attribute_mapping;

attribute_mapping definition(definition, $PATH, Functional_unit_usage_view_terminal_definition);
component_functional_terminal <=
shape_aspect <-
shape_aspect_relationship.related_shape_aspect
shape_aspect_relationship
{shape_aspect_relationship
shape_aspect_relationship.name = 'instantiated terminal'}
shape_aspect_relationship.relating_shape_aspect ->
shape_aspect =>
functional_unit_terminal_definition

end_attribute_mapping;

end_entity_mapping;

entity_mapping Functional_unit_terminal_bus_assignment(Functional_unit_terminal_bus_assignment, property_definition_relationship);

mapping_constraints;
{property_definition_relationship.name = 'functional unit terminal bus assignment'}

end_mapping_constraints;

attribute_mapping connected_bus(connected_bus, $PATH, Bus_structural_definition);
property_definition_relationship
property_definition_relationship.relating_property_definition ->
property_definition
property_definition.definition ->
characterized_definition
characterized_definition = characterized_product_definition
characterized_product_definition
characterized_product_definition = product_definition
product_definition =>
bus_structural_definition

end_attribute_mapping;

attribute_mapping connected_terminal(connected_terminal, $PATH, Functional_unit_terminal);
property_definition_relationship
property_definition_relationship.related_property_definition ->
property_definition
property_definition.definition -> 
characterized_definition
characterized_definition = shape_definition
shape_definition
shape_definition = shape_aspect 
shape_aspect =>
component_functional_terminal

end_attribute_mapping;

end_entity_mapping;

entity_mapping Functional_unit_terminal_node_assignment(Functional_unit_terminal_node_assignment, property_definition_relationship);

mapping_constraints;
{property_definition_relationship.name = 'functional unit terminal node assignment'}

end_mapping_constraints;

attribute_mapping composed_node(composed_node, $PATH, Functional_unit_network_node_definition);
property_definition_relationship
property_definition_relationship.relating_property_definition ->
property_definition
property_definition.definition ->
characterized_definition
characterized_definition = characterized_product_definition
characterized_product_definition
characterized_product_definition = product_definition
{product_definition <-
product_definition_context_association.definition
product_definition_context_association
{product_definition_context_association.role ->
product_definition_context_role
product_definition_context_role.name = 'part definition type'}
product_definition_context_association.frame_of_reference ->
product_definition_context <=
application_context_element
application_context_element.name = 'functional network design'}
product_definition =>
network_node_definition

end_attribute_mapping;

attribute_mapping connected_terminal(connected_terminal, $PATH, Functional_unit_terminal);
property_definition_relationship
property_definition_relationship.related_property_definition ->
property_definition
property_definition.definition -> 
characterized_definition
characterized_definition = shape_definition
shape_definition
shape_definition = shape_aspect 
shape_aspect
shape_aspect =>
component_functional_terminal

end_attribute_mapping;

end_entity_mapping;

entity_mapping requirement_assignment_armx(requirement_assignment_armx, requirement_assignment)
extended;

attribute_mapping assigned_to(assigned_to, , Functional_unit);

					requirement_assigned_item *> nfdv_requirement_assigned_item
					nfdv_requirement_assigned_item = 
					component_functional_unit
				
end_attribute_mapping;

end_entity_mapping;
(*end_schema_mapping;*)
