据模型正式定义数据对象和数据之间的关系,对象为感兴趣的领域。数据模型的一些典型应用包括支持数据库的开发和实现数据在感兴趣的特定领域的交流。数据模型在数据建模语言来指定。 EXPRESS是在ISO 10303-11的EXPRESS语言参考手册定义的数据建模语言。
一个Express数据模型可以通过两种方式来定义,以文字和图形。格式验证和输入如SDAI工具中的ASCII文件的文字表述是最重要的之一。在另一方面的图形表示通常更适合人类使用,如用于解释和教学。图形表示,所谓的EXPRESS- G,是不是能够代表可在文本格式中描述的所有细节。
EXPRESS是非常类似与编程语言,如Pascal。在一个SCHEMA中,各种数据类型可以与结构性约束和算法规则来定义。EXPRESS的一个主要特点是,提供了正式验证数据类型的实例集数的可能性 – 也就是说检查所有的结构和算法规则。EXPRESS 构件块
数据类型(Datatypes)
Express提供了一系列的数据类型,用EXPRESS -G符号的特定数据类型的符号:
- Entity data type(实体数据类型):这是在表达最重要的数据类型。这是下面有更详细。实体数据类型可以有两种方式,在一个子树的父和/或属性有关。
- Enumeration data type(枚举数据类型):枚举值是简单的字符串,如红色,绿色和蓝色为RGB-枚举。在这种枚举类型声明可扩展的情况下它可以扩展在其他模式。
- Defined data type(定义数据类型):这进一步专业其他数据类型 - 例如,定义一个数据类型积极的,是整数类型的值> 0 。
- Select data type(选择数据类型):选择定义不同的选项之间进行选择或替代。最常使用的是不同的entity_types之间进行选择。更难得的是选择,其中包括定义的类型。在这种枚举类型声明可扩展的情况下,它可以扩展在其他模式。
- Simple data type(简单数据类型)
- String(字符串):这是最常用的简单类型。明示的字符串可以是任意长度的,并且可以包含任何字符(ISO 10646/Unicode中) 。然而,它是常见的做法。
- Binary(二进制):本数据类型仅很少使用。它涵盖了数位(而不是字节) 。对于一些实施方式中的大小被限制为32位。
- Logical(逻辑):类似于布尔数据类型的逻辑有TRUE和FALSE并且除了未知的可能值。
- Boolean(布尔):随着布尔值TRUE和FALSE 。
- Number(数字): Number数据类型既,整数和实的超类型。大多数的实现需要使用double类型来表示real_type ,即使实际值是一个整数。
- Integer(整型):快递整数原则上可以有任意长度,但大多数实现限制他们有符号的32位值。
- Real(实):理想的表达真正的价值是无限的精度和大小。但在实践中真正的价值是由一个double类型的浮点值来表示。
- Aggregation data type(²聚合数据类型):可能的种aggregation_types被设置,包列表和数组。而SET和BAG是无序的, LIST和ARRAY是有序的。一包可以包含一个特定的值超过一次,这是不允许的设置。数组是可能含有未设置成员的唯一聚集。这是不可能的SET ,LIST袋。总的成员可以是任何其它数据类型。
一些一般的东西都被提及的数据类型。
- 构造数据类型可以在EXPRESS Schema中定义。它们主要用于定义实体,并以指定的实体的属性和聚合部件的类型。
- 数据类型可以用在递归的方式来建立更多和更复杂的数据类型。例如它可以定义或者一些单位或其他数据类型的一个SELECT的数组列表。如果是有意义的定义这样的数据类型是一个不同的问题。
- 明确定义了一些规则是如何的数据类型可以进一步专业化。这是实体的重新声明的属性很重要。
- 通用数据类型可用于过程,函数和抽象的实体。
- 实体属性(Entity-Attribute)
体属性允许“属性”添加到实体和关系一个实体与另一个在一个特定的角色。该属性的名称指定的角色。大多数的数据类型可以直接作为一个属性的类型。这包括聚集为好。
有三种不同类型的属性,显式的,衍生的和逆属性。而所有这些都可以被重新宣布一个亚子类型。除了明确的属性可以被重新声明为导出的一个子类型。那种属性没有其他的变化是可能的。
- 显式的属性是那些在STEP - 文件可见的直接价值。
- 派生属性从表达式获取它们的值。在大多数情况下,表达式引用此实例的其他属性。表达式也可以使用明示的功能。
- 逆属性做“信息”不能增加一个实体,但只有名字和约束从另一端的明确属性的实体。在EXPRESS -G符号的特定属性的符号
父类型和子类型(Supertypes and subtypes)
一个实体可以被定义为一种类型或其他几个实体(多重继承是允许的! ) 。超类型可以有任意多个子类型。在步骤建立非常复杂的子超类型的图表非常普遍的做法。一些图涉及100多实体类型。
实体实例可以被构造为一个单一实体(如果不是抽象)或实体以这样的子父图形的复杂组合。对于大图的可能组合数很可能在天文范围内增长。要限制特殊的超类型的限制得到了介绍,如oneOf的和TOTALOVER可能的组合。另外一个实体可以被声明为抽象的执行,没有实例可眼前这个实体的构造,但只有当它包含非抽象的子类型。
-
-
- 算法约束(Algorithmic constraints)
-
实体和自定义数据类型可能会进一步限制与WHERE规则。在这种规则也是全球规则的一部分。 A其中的规则是一个表达式,其结果必须为TRUE ,否则一个Express架构的人口,是无效的。等得到的属性这些表达可以调用明示的功能,这可能会进一步明确调用程序。该函数和过程允许制定与局部变量,参数和常量复杂的语句 - 非常类似于一种编程语言。
该EXPRESS语言可以形容本地和全球规则。例如:
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
这个例子描述了面积单位实体必须有长度的平方值。对于这个属性dimensions.length_exponent必须等于2和基本SI单位的所有其他指数必须为0。
另一个例子:
TYPE day_in_week_number = INTEGER;
WHERE
WR1: (1 <= SELF) AND (SELF <= 7);
END_TYPE; -- day_in_week_number
也就是说,它表示星期的值不能超过7 。
所以,你可以描述一些规则,以您的实体。在给定的例子,更多细节可在ISO 10303-41被发现.
EXPRESS -G是一种信息模型标准的图形符号。一个有用的伴侣的EXPRESS语言来显示实体和类型定义,关系和基数。 这种图形表示法支持EXPRESS语言的一个子集。对使用EXPRESS -G超过明示的优点是数据模型的结构可以更容易理解的方式呈现。的EXPRESS-G的一个缺点是复杂的约束不能被正式指定。
-
-
- EXPRESS-Schema定义
- EXPRESS –Schema 架构
- EXPRESS-Schema定义
-
EXPRESS-Schema 定义如下图所示:
定义完成后文件被保存为“.exp”。
-
-
-
- 类型(basic)定义(type declaration)
-
-
- 简单(内嵌)内型定义:
- 数据类型有:
- BINARY, BOOLEAN, INTEGER, LOGICAL, NUMBER, REAL, STRING
- EXPRESS-G图例如下:
- 定义示例如下:
TYPE distance = REAL;
END_TYPE;
- 集合类型(Collection types):
- 数据类型有:
- Array (fixed size, position relevant)
- Bag (variable size, position not relevant)
- Set (like bag but without duplicates)
- List (variable size, position relevant)
- 定义实例如下:
TYPE positive_integer = INTEGER;
WHERE NotNegative : SELF >= 0;
END_TYPE;
- 枚举类型(Enumeration type):
- 定义实例如下:
TYPE trafficLightColor = ENUMERATION OF (Red, Amber, Green);
END_TYPE;
- 选择类型(Select type):
- 定义示例如下:
TYPE vehicle = SELECT( car, boat, plane );
END_TYPE;
-
-
-
- 实体定义(entity declarations)
-
-
- 实体定义实例:
- 点
ENTITY point;
x : REAL;
y : REAL;
END_ENTITY;
- 线:
ENTITY line;
end1 : point;
end2 : point;
length : distance;
END_ENTITY;
- Polyline
ENTITY polyline;
lines : LIST[ 1 : ? ] OF line;
END_ENTITY;
- EXPRESS-G实体及其关系定义:
- Entities: DERIVE and OPTIONAL(来自和可选):
- DERIVE示例:
ENTITY line;
start : point;
end : point;
DERIVE
length : distance:=SQRT((end.xcoord - start.xcoord)**2
+ (end.ycoord - start.ycoord)**2);
END_ENTITY;
- OPTIONAL示例:
ENTITY person;
first_name : STRING;
last_name : STRING;
nickname : OPTIONAL STRING;
END_ENTITY;
- Entities: INVERSE
ENTITY employee;
name : person_name;
END_ENTITY;
ENTITY person_name;
last_name : STRING;
first_name : STRING;
INVERSE
link : employee FOR name;
END_ENTITY
一个PERSON_NAME不能存在,除非有employee,有它的值是自一个名为name属性的一个值。
- 关系和基数
-
-
-
- 准则定义(rule declarations)
-
-
- 全局准则:全局准则定义在Schema内:
- 全局准则示例1:
RULE max_number_of_students FOR (student);
WHERE
max_is_40 : SIZEOF(student) <= 40;
END_RULE;
- 全局准则示例2:
RULE rule_name FOR (entity_type_1,…, entity_type_N);
(* executable statements *)
WHERE
(* some expression that returns TRUE or FALSE *)
END_RULE;
- 实体内部准则:定义在实体内部:
- 实体内部准则示例1:
ENTITY student;
first_name : STRING;
last_name : STRING;
ssn : STRING;
UNIQUE
unique_ssn_rule : ssn;
END_ENTITY;
- 实体内部准则示例2:
ENTITY unit_vector;
a,b,c : REAL;
WHERE
unit_length_rule : a**2+b**2+c**2 = 1.0;
END_ENTITY;
-
-
-
- 函数定义(functions)
-
-
函数定义实例如下:
FUNCTION days_between( d1 : date, d2 : date ) : INTEGER;
(* returns the number of days between the two
input dates. If d1 is earlier than d2, a positive
number is returned *)
END_FUNCTION;
-
-
- 简单的例子
- 点、线示例
- 简单的例子
-
下图为点、线的EXPRESS Schema和对应的EXPRESS-G图形。
图 例子Schema及其对应的Express-G 图
通过该Schema方式定义的Part21文件如下图所示:
图 具体实例及其对应的Part 21文件
-
-
-
- 完整的person 示例
-
-
- EXPRESS-Schema
SCHEMA example;
TYPE date = ARRAY [1:3] OF INTEGER; END_TYPE;
TYPE hair_type = ENUMERATION OF (bald,dyed,natural,wig);
END_TYPE;
ENTITY person
SUPERTYPE OF(ONEOF(female,male));
first_name, last_name : STRING;
nickname : OPTIONAL STRING;
birthdate : date;
children : SET[0:?] OF person;
hair : hair_type;
DERIVE
age : INTEGER:=years(birthdate);
INVERSE
parents : SET[0:2] OF person FOR children;
END_ENTITY;
ENTITY female
SUBTYPE OF (person);
maiden_name : OPTIONAL STRING;
END_ENTITY;
ENTITY male
SUBTYPE OF (person);
END_ENTITY;
ENTITY married;
husband : male;
wife : female;
UNIQUE
no_polyandry : husband;
no_polygamy : wife;
END_ENTITY;
FUNCTION years(aDate:date) : INTEGER;
(* returns the number of years between aDate and today *)
END_FUNCTION;
END_SCHEMA;
- EXPRESS-G
原文地址:https://blog.csdn.net/lyalong0616/article/details/90312325
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。