ISO 10303-11

From Wikipedia, the free encyclopedia

Contents

EXPRESS is the data modelling language of STEP and standardized as ISO 10303-11.

An EXPRESS data model can be defined in two ways, textually and graphically. For formal verification and as input for tools such as SDAI the textual representation within an ASCII file is the most important one. The graphical representation on the other hand is often more suitable for human use such as explanation and tutorials. The graphical representation, called EXPRESS-G, is not able to represent all details that can be formulated in the textual form.

EXPRESS is similar to programming languages such as PASCAL. Within a SCHEMA various datatypes can be defined together with structural constraints and algorithmic rules. A main feature of EXPRESS is the possibility to formally validate a population of datatypes - this is to check for all the structural and algorithmic rules.

A simple EXPRESS data model looks like this:

SCHEMA Family;

ENTITY Person
   ABSTRACT SUPERTYPE OF (ONEOF (Male, Female));
     name: STRING;
     mother: OPTIONAL Female;
     father: OPTIONAL Male;
END_ENTITY;

ENTITY Female
   SUBTYPE OF (Person);
END_ENTITY;

ENTITY Male
   SUBTYPE of (Person);
END_ENTITY;

END_SCHEMA;

Image:EXPRESS-G_diagram_for_Family_schema.png

The data model is enclosed within the EXPRESS schema Family. It contains a supertype entity Person with the two subtypes Male and Female. Since Person is declared to be ABSTRACT only occurrences of either (ONEOF) the subtype Male or Female can exist. Every occurrence of a person has a mandatory name attribute and optionally attributes mother and father. There is a fixed style of reading for attributes of some entity type:

  • a Female can play the role of motherfor a Person
  • a Male can play the role of father for a Person


[edit] Datatypes

See below the various datatypes of EXPRESS. A value of a specific datatype may always have an unset value. In the EXPRESS language this is indicated by a "?" and in a STEP-File with "$". SDAI reports an error when trying to read an entity attribute of an unset value.

  • simple_type
    • string_type: This is the most often used simple type. EXPRESS strings can be of any length and can contain any character (ISO 10646/Unicode). However it is common practise.
    • integer_type: EXPRESS integers can have in principle any length, but most implementations restricted them to a signed 32 bit value.
    • real_type: Ideally an EXPRESS real value is unlimited in accuracy and size. But in practise a real value is represented by a floating point value of type double.
    • number_type: The number data type is a supertype of both, integer and real. Most implementations take uses a double type to represent a real_type, even if the actual value is an integer.
    • boolean_type: With the boolean values TRUE and FALSE.
    • logical_type: Similar to the boolean datatype a logical has the possible values TRUE and FALSE and in addition UNKNOWN.
    • binary_type: This data type is only very rarely used. It covers a number of bits (not bytes). For some implementations the size is limited to 32 bit.
  • defined_type. They can be used to specialize other datatypes further on. E.g. it is possible to define the datatype positive which is of type integer with a value > 0.
  • entity_type: This is the most important datatype in EXPRESS. It is covered below in more details. Entity datatypes can be related in two ways, in a sub-supertype tree and/or by attributes.
  • enumeration_type: Enumeration values are simple strings such as red, green, and blue for an rgb-enumeration. In the case that an enumeration type is declared to be extensible it can be extended in other schemas.
  • select_type: Selects define a choice or an alternative between different options. Most commonly used are selects between different entity_types. More rarely are selects which include defined types. In the case that an enumeration type is declared to be extensible it can be extended in other schemas.
  • aggregation_type: The possible kinds of agregation_types are SET, BAG, LIST and ARRAY. While SET and BAG are unordered, LIST and ARRAY are ordered. A BAG may contain a particular value more than once, this is not allowed for SET. An ARRARY is the only aggregate which may contain unset members. This is not possible for SET, LIST, BAG. The members of an aggregate may be of any other data type

A few general things are to be mentioned for datatypes.

  • Constructed datatypes can be defined within an EXPRESS schema. They are mainly used to define entities, and to specify the type of entity attributes and aggregate members.
  • Datatypes can be used in a recursive way to build up more and more complex data types. E.g. it is possible to define a LIST of an ARRAY of a SELECT of either some entities or other datatypes. If it makes sense to define such datatypes is a different question.
  • EXPRESS defines a couple of rules how a datatype can be further specialized. This is important for re-declared attributes of entities.
  • GENERIC data types can be used for procedures, functions and abstract entities.

[edit] Sub- and supertypes

An entity can be defined to be a subtype of one or several other entities (multiple inheritance is allowed!). A supertype can have any number of subtypes. It is very common practice in STEP to build very complex sub-supertype graphs. Some graphs relate 100 and more entities with each other.

An entity instance can be constructed for either a single entity (if not abstract) or for a complex combination of entities in such a sub-supertype graph. For the big graphs the number of possible combinations is likely to grow in astronomic ranges. To restrict the possible combinations special supertype constraints got introduced such as ONEOF and TOTALOVER. Furthermore an entity can be declared to be abstract to enforce that no instance can be constructed of just this entity but only if it contains a non-abstract subtype.

[edit] Entity-Attribute

Entity attributes allow to add "properties" to entities and to relate one entity with another one in a specific role. The name of the attribute specifies the role. Most datatypes can directly serve as type of an attribute. This includes aggregation as well.

There are three different kinds of attributes, explicit, derived and inverse attributes. And all these can be re-declared in a subtype. In addition an explicit attribute can be re-declared as derived in a subtype. No other change of the kind of attributes is possible.

  • Explicit attributes are those which have direct values visible in a STEP-File.
  • Derived attributes get their values from an expression. In most cases the expression refers to other attributes of THIS instance. The expression may also use EXPRESS functions.
  • Inverse attributes do not add "information" to an entity, but only name and constrain an explicit attribute to an entity from the other end.

[edit] Algorithmic constraints

Entities and defined data types may be further constraint with WHERE rules. WHERE rules are also part of global rules. A WHERE rule is an expression, which must evaluate to TRUE, otherwise a population of an EXPRESS schema, is not valid. Like derived attributes these expression may invoke EXPRESS functions, which may further invoke EXPRESS procedures. The functions and procedures allow formulating complex statements with local variables, parameters and constants - very similar to a programming language.

The EXPRESS language can describe local and global rules. For example:

ENTITY area_unit
  SUBTYPE OF (named_unit);
WHERE
  WR1: (SELF\named_unit.dimensions.length_exponent = 2) AND
       (SELF\named_unit.dimensions.mass_exponent = 0) AND
       (SELF\named_unit.dimensions.time_exponent = 0) AND
       (SELF\named_unit.dimensions.electric_current_exponent = 0) AND
       (SELF\named_unit.dimensions.
         thermodynamic_temperature_exponent = 0) AND
       (SELF\named_unit.dimensions.amount_of_substance_exponent = 0) AND
       (SELF\named_unit.dimensions.luminous_intensity_exponent = 0);
END_ENTITY; -- area_unit

This example describes that area_unit entity must have square value of length. For this the attribute dimensions.length_exponent must be equal to 2 and all other exponents of basic SI units must be 0.

Another example:

TYPE day_in_week_number = INTEGER;
WHERE
  WR1: (1 <= SELF) AND (SELF <= 7);
END_TYPE; -- day_in_week_number

That is, it means that week value cannot exceed 7.

And so, you can describe some rules to your entities. More details on the given examples can be found in ISO 10303-41

[edit] References

The content of this article is based on documentation by Lothar Klein; Mr Klein has released it under the terms of the GFDL.