Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions metanorma.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ metanorma:
- sources/expressdocs-migration/document.adoc
- sources/express-schema-manifest/document.adoc
- sources/express-changes/document.adoc
- sources/express-mapping/document.adoc

collection:
organization: "EXPRESS Language Foundation"
Expand Down
47 changes: 47 additions & 0 deletions sources/express-mapping/document.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
= EXPRESS mapping language specification
:docnumber: 5006
:edition: 1
:copyright-year: 2025
:revdate: 2025-10-19
:language: en
:title-main-en: EXPRESS mapping language specification
:doctype: standard
:technical-committee: EXPRESS
:imagesdir: images
:mn-document-class: elf
:mn-output-extensions: xml,html,doc,pdf,rxl
:fullname: Thomas Thurman
:surname: Thurman
:givenname: Thomas
:affiliation: EXPRESS Language Foundation
:fullname_2: Ronald Tse
:surname_2: Tse
:givenname_2: Ronald
:affiliation_2: EXPRESS Language Foundation
:docidentifier: ELF 5006:2025
:data-uri-image:
:local-cache-only:

include::sections/00-foreword.adoc[]

include::sections/00-introduction.adoc[]

include::sections/01-scope.adoc[]

include::sections/02-normrefs.adoc[]

include::sections/03-terms.adoc[]

include::sections/04-overview.adoc[]

include::sections/05-operators.adoc[]

include::sections/06-navigation.adoc[]

include::sections/07-constraints.adoc[]

include::sections/08-validation.adoc[]

include::sections/aa-examples.adoc[]

include::sections/az-bibliography.adoc[]
152 changes: 152 additions & 0 deletions sources/express-mapping/examples/activity.mapping.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
---
ae:
- entity: Activity
aimelt:
content: executed_action
schema: action_schema
alt_map: []
aa:
- attribute: name
aimelt:
content: action.name
schema: action_schema
refpath:
content: |-
executed_action
executed_action <= action
action.name
alt_map: []
- attribute: description
aimelt:
content: action.description
schema: action_schema
refpath:
content: |-
executed_action
executed_action <= action
action.description
alt_map: []
- attribute: chosen_method
assertion_to: Activity_method
aimelt:
content: PATH
source: {}
refpath:
content: |-
executed_action
executed_action <= action
action.chosen_method -> action_method
action_method
alt_map: []
- attribute: id
aimelt:
content: id_attribute.attribute_value
schema: action_schema
refpath:
content: |-
executed_action
executed_action <= action
action <- id_attribute.identified_item
id_attribute.attribute_value
alt_map: []
- entity: Activity_relationship
aimelt:
content: action_relationship
schema: action_schema
alt_map: []
aa:
- attribute: description
aimelt:
content: action_relationship.description
schema: action_schema
alt_map: []
- attribute: name
aimelt:
content: action_relationship.name
schema: action_schema
alt_map: []
- attribute: related_activity
assertion_to: Activity
aimelt:
content: PATH
source: {}
refpath:
content: |
action_relationship
action_relationship.related_action -> action
action => executed_action
alt_map: []
- attribute: relating_activity
assertion_to: Activity
aimelt:
content: PATH
source: {}
refpath:
content: |-
action_relationship
action_relationship.relating_action -> action
action => executed_action
alt_map: []
- entity: Activity_status
aimelt:
content: action_status
schema: action_schema
alt_map: []
aa:
- attribute: assigned_activity
assertion_to: Activity
aimelt:
content: PATH
source: {}
refpath:
content: |
action_status
action_status.assigned_action -> executed_action
alt_map: []
- attribute: status
aimelt:
content: action_status.status
schema: action_schema
alt_map: []
- entity: Applied_activity_assignment
aimelt:
content: applied_action_assignment
source:
content: ISO 10303-1047
alt_map: []
aa:
- attribute: assigned_activity
assertion_to: Activity
aimelt:
content: PATH
source: {}
refpath:
content: |-
applied_action_assignment
applied_action_assignment <= action_assignment
action_assignment
action_assignment.assigned_action -> action
action => executed_action
alt_map: []
- attribute: items
assertion_to: activity_item
aimelt:
content: PATH
source: {}
refpath:
content: |-
applied_action_assignment
applied_action_assignment.items[i] -> action_items
alt_map: []
- attribute: role
aimelt:
content: object_role.name
schema: action_schema
refpath:
content: |-
applied_action_assignment
applied_action_assignment <= action_assignment
action_assignment.role -> object_role
object_role.name
alt_map: []
sc: []
27 changes: 27 additions & 0 deletions sources/express-mapping/sections/00-foreword.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
.Foreword
The EXPRESS Language Foundation ("`ELF`") is a registered public charity in the
US that facilitates the education, standardization, research, promotion,
definition, and usage of information modelling and programming languages, with a
focus on the EXPRESS language family.

ELF works with international partners and experts across the globe, reflecting
the international nature of its mission. More information about ELF is available
on the official website (https://www.expresslang.org).

The procedures used to develop this document and those intended for its further
maintenance are described in the ELF Directives.

In particular, the different approval criteria needed for the different types of
ELF documents should be noted. This document was drafted in accordance with the
editorial rules of the ELF Directives.

Attention is drawn to the possibility that some of the elements of this document
may be the subject of patent rights. ELF shall not be held responsible for
identifying any or all such patent rights. Details of any patent rights
identified during the development of the document will be provided in the
Introduction.

Any trade name used in this document is information given for the convenience of
users and does not constitute an endorsement.

This document was prepared by Technical Committee _{technical-committee}_.
39 changes: 39 additions & 0 deletions sources/express-mapping/sections/00-introduction.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
== Introduction

=== General

The EXPRESS mapping language is a domain-specific language designed to express
reference paths between entities in a set of EXPRESS schemas.

It provides a formal syntax and semantics for specifying how entities in one schema
relate to entities in another schema through a series of navigations. These paths
can include subtype and supertype relationships, forward and inverse attribute
navigations, and constraints on entity attributes.

The operators and syntax to express allow for these navigations to be defined
precisely and unambiguously.

The mapping language serves several purposes:

Documentation:: Provides a clear, machine-readable specification of how concepts
of a conceptual model described in EXPRESS maps to an implementation described
in another EXPRESS schema.

Validation:: Enables automated validation that mapping paths are correct and
traverse valid relationships in the EXPRESS schema.

Interoperability:: Ensures consistent interpretation of mappings across
different tools and implementations.

Maintenance:: Facilitates detection of broken mappings when schemas evolve.

=== Historical context

In ISO 10303 (STEP), requirements of the application modules are defined using
Application Resource Models (ARMs) expressed in EXPRESS.

The implementation of these requirements is defined using Module Interpreted
Models (MIMs), also expressed in EXPRESS.

The EXPRESS mapping language was developed to formally express the relationships
between ARM entities and MIM entities.
5 changes: 5 additions & 0 deletions sources/express-mapping/sections/01-scope.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
== Scope

This document describes the EXPRESS mapping language used to express reference
paths amongst a set of EXPRESS schemas.

7 changes: 7 additions & 0 deletions sources/express-mapping/sections/02-normrefs.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

[bibliography]
== Normative references

* [[[ISO10303-1,ISO 10303-1:2024]]]

* [[[ISO10303-11,ISO 10303-11:2004]]]
70 changes: 70 additions & 0 deletions sources/express-mapping/sections/03-terms.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
== Terms and definitions

=== application resource model
preferred:[ARM]

conceptual model that represents application domain concepts in a neutral,
implementation-independent manner

[.source]
<<ISO10303-2>>

=== module interpreted model
preferred:[MIM]

implementation model that maps ARM concepts to EXPRESS constructs using entities
and relationships from integrated resources

[.source]
<<ISO10303-2>>

=== reference path

sequence of navigation steps through EXPRESS schema entity relationships,
expressing how an entity in one schema relates to an entity in another schema

=== subtype relationship

relationship where one entity inherits all attributes and constraints from
another entity, expressed in EXPRESS with the SUBTYPE OF construct

=== supertype relationship

relationship where an entity serves as a base type for one or more subtypes,
providing attributes and constraints inherited by those subtypes

=== forward attribute navigation

navigation that follows an attribute from an entity to the entity it references

[example]
Navigating from `product_definition` through attribute `formation` to
`product_definition_formation`.

=== inverse attribute navigation

navigation that finds entities referencing the current entity through a specific
attribute

[example]
Finding all `product_definition_relationship` entities that reference a
`product_definition` through their `related_product_definition` attribute.

=== constraint block

expression that specifies conditions that entities or attributes must satisfy
during path navigation

[example]
`{product_definition_relationship.name = 'definition usage'}` requires the
`name` attribute to equal the specified string value.

=== navigation step

single element in a reference path representing one traversal operation
(subtype, supertype, forward navigation, or inverse navigation)

=== path expression

complete reference path from one schema entity to another schema entity,
composed of at least one navigation step
Loading