介绍复杂技术的最简洁途径就是举例说明。我们先来看一段EC类的定义:
<ECClass typeName="CimObject" isDomainClass="True" isCustomAttributeClass="False" isStruct="False"> <ECProperty propertyName="DesignPhase" typeName="int" displayLabel="Design Phase"/> <ECProperty propertyName="Name" typeName="string" displayLabel="Object Name"/> <ECArrayProperty propertyName="DoubleArray" typeName="double" displayLabel="LongiMargin" minOccurs="0" maxOccurs="unbounded" /> </ECClass>
从上面的内容可以看出,它代表的是EC类的定义,所包含的信息如下:
一个<ECClass></ECClass>类型的节点代表一个EC类的定义,其中的属性字段含义如下:
typeName: EC类的类型名称,必选,它用于在当前Schema范围内标识一个EC类,若要在当前Schema范围外表示此EC类,则需要按照 <命名空间前缀>:<EC类名称> 方式来标识;
isDomainClass: 是否为域类,必选,其取值通常都是True;
isCustomAttributeClass: 是否为自定义属性类,可选,默认为False;自定义属性类,意味着这个类专用于为EC Schema或EC类或EC属性提供自定义属性,而不是作为独立EC类来使用的;
isStruct: 是否为结构体定义,可选,默认为False;当被标记为结构体时,此EC类就可以作为自定义属性类型来使用,否则不能用作自定义属性的类型;
此EC类中包含2个<ECProperty></ECProperty>类型的节点,每个此类型的节点代表一个EC类的数据成员(或称EC属性);此外,还包含1个<ECArrayProperty></ECArrayProperty>类型的节点,每个此类型节点代表一个数组类型的EC类数据成员。其中的各个属性字段含义如下:
propertyName: EC属性的名称,必选,用于在代码层面唯一标识特定属性,所以这个名称在类中不能重名,包括在类的所有基类中;
typeName: 属性的值类型,必选,它可以是任何内置的值类型,也可以是任何标记为结构体(也就是带有isStruct=”True”属性的EC类)的自定义类型;对于数组类型的属性而言,它指的是数组中元素的类型。目前支持的内置类型有:
int: 32位整型数
long: 64位整型数
double: 64位双精度浮点数
boolean: 布尔值
string: 字符串值
point2d: 2D点坐标
point3d: 3D点坐标
binary: 二进制数据块
dateTime: 时间日期
displayLabel: 属性的显示标签,可选,用于指示在属性面板中显示此属性时应使用的显示名称,此被忽略时将使用propertyName作为其显示名称;
minOccurs: 数组中最少可容纳的元素个数,必选,取值应为大于等于0的整数;
maxOccurs: 数组中最多可容纳的元素个数,必选,取值通常应为大于0的整数,但也可以用unbounded来表示不受限制;