zoukankan      html  css  js  c++  java
  • SmartPlant Foundation 定制 Schema数据结构

    Schema是SPF的核心,用SPF做定制或集成,首先要理解它的结构。

    Schenma基本数据结构

    SPF的Schema基本数据结构包含4层,各层之间由关联关系连接。

    • Component Schema
    • ClassDef 类定义
    • InterfaceDef接口定义
    • PropertyDef属性定义

    Component Schema

    一类Schema的集合,每个工具软件有一个Component Schema。Component Schema可以自定义,例如定义一个Component将自定义的类归在一起。
    所有Component Schema文件保存在Site路径的 EFSchema4.02 文件夹下。

    ClassDef类定义

    工具软件中的每种对象有一个类定义,类定义是对一类对象的定义,可以实例化成实际对象。例如PipeRun就是一个类定义。

    ClassDef和多中对象有关联关系关系,但只需关注上图红框之内的两种关联关系(Compoment和Interface),其他关系很少使用(ShareObjDef已不再使用)。
    在Component Schema右键菜单Show Component Class Definitions可展开集合中的所有类定义。

    查看图纸中的对象的类定义:
    图纸右键菜单展开对象Expand Drawing Items

    Drawing Item界面默认有Class列,显示对象的类。

    也可查看对象的ExportData,第一行为对象所属类

    InterfaceDef 接口定义

    Interface的作用是建立关联关系。可以减少重复的属性定义,如果直接在Class上定义属性,不同类的相同属性需要重复定义例如管道的压力和设备的压力。将属性建到接口上,再按需求将接口连接到不同类上,可以实现不同类有相同的属性。

    下图是一个接口与多个ClassDef的链接。接口与类之间的关系是“实现Realizes”

    下图是两个ClassDef有共用的接口,也有各自特有的接口

    下图是拟人的方式展示ClassDef和InterfaceDef的关系。Interface可以有隐含关系Implies,隐含的Interface上的属性也可被实现。一个人的不同角色可视为不同接口。IHuman接口被IMan接口隐含,Ihuman虽然没有直接与ClassDef连接,上面的属性也可以被使用。

    实际使用中隐含的情况应用不多,一般是主Interface上的属性不能满足要求,需要用其他Interface接口的属性,但又不希望这个Interface直接连接到类对象上时使用。通常被隐含接口的是范围非常大的、最基础的接口,例如Iobject。隐含关系通常在建立Schema时预先规划好。
    下图表示的是,一般情况下定制Schema时,要让主接口隐含所有其他接口。

    下图中IInstrument是ClassDef PIDInstrument的主Interface,通过主Interface隐含了IsolidItem接口,使得PIDInstrument能够实现IsolidItem上的属性。

    另外如果类要和多个属性建立关系,可以在不同接口间建立关联关系
    每个类可以有多个接口,但主接口Primary Interface只有一个。

    类的主Interface不可用于其它类,可通过主Interfac唯一定位类。在定制查询方法或建立关联关系时,如在只想在两个对象间建立关联关系,不影响其他对象,需使用主Interface。

    RelDef 关联关系

    RelDef是关联关系RelationshipDefinition的简写
    要在两个类定义之间建立关联关系,需要在两个类的Interface之间建立关联关系。下图中,通过IEmplyee接口和Icompany接口之间的关联关系,Man和Company的实现了雇佣关系。

    关联关系是有方向的,当需要在图中表达关联关系方向时,用1表示起始,2表示终点。

    PropertyDef 属性定义

    属性与接口之间的关系是“暴露Exposes”。一个接口上可以有多个属性,也可以没有属性。

    在接口上右键菜单-Show Exposed Property Definitions,可以查看当前接口上定义的属性。

    Property Types 属性类型

    每个属性定义通过ScopedBy关联一个类型。字符型、日期、布尔值、下拉菜单(EnumList)等类型

    在属性上右键菜单-Show Scoped Property Definitions,可以在Class列查看当前属性的类型。

    或在ExportData中查看第一行内容

    Enum List Type下拉框类型

    下拉菜单类型的属性通过ScopedBy关联到EnumListType类型,EnumListType类型通过Contains包含了多种EnumEnum选项。

    下图是一个比较完整的多层下拉框形式数据结构。从类定义,到接口定义,到属性定义,到EnumListType,再到一层EnumListType,最后到EnumEnum选项。多层下拉框的典型应用是FluidSystem和FluidCode。

    UoMListType UoM类型

    UoMListType用于有不同表现形式的属性,例如温度的单位可以是摄氏度C、华氏度F、兰氏度Ra和绝对温度K。

    Meta Schema元数据结构

    Meta Schema是元数据结构,是最基本的数据结构。右侧示例中,ClassDef的类定义是ClassDef本身。在ExportData中查看,第一行就是ClassDef。

    元Schema实例化出来的是Schema,右侧示例中,EQDCentrifugalPump是一个具体的类定义,定义了一种离心泵。

    Schema实例化出来是具体的数据。右侧示例中,类定义实例化成了的一台具体的离心泵P-100,这台泵的类型是EQDCentrifugalPump。

    Model Def

    EdgeDef多层关联关系

    两个Interface之间直接相连的关系是Relationship,间接相连的线形关系是EdgeDef。
    下图中A和C之间隔了一层B,要从A找到C,就需要建立EdgeDef,将Rel1和Rel2组合一下。关联关系是有方向的,从1端到2端。从A到C需要先经过正方向的Rel1,再经过负方向的Rel2,所以这个Edge是+Rel1,-Rel2。

    在下图中类定义PIDProcessEquipment和PIDProcessPoint之间没有关联关系,可以通过红色箭头方向建立EdgeDef。

    GraphDef 发散关联关系

    GraphDef是发散的关联关系,可以沿不同路径建立有分叉的关联关系。
    下图中通过GraphDef +Rel1,-Rel2,+Rel3,A可以同时与C和D有关系

    ViewDef

    将GraphDef上的Interface的属性挑选出来,定义成一个集合用于在属性窗口浏览或出报表,就是ViewDef。

    DTC的属性窗口中,通过自定义ViewDef,可以定义属性的显示。用Extended按钮可以显示或隐藏属性。

    完整的数据模型

    图中举例的内容为Excel导入SPF属性时泵的属性。
    Schema集合为自定义的集合SPFExcelImportComponent。集合中定义了一个类定义EIPump。类定义有一个主接口IEI_Pump,又实现了四个其他接口。接口IEI_DesighnedItem和IEI_TaggedItem下各自有多个属性定义。接口IEI_HeldItem有了一个下拉框类型的属性定义。右侧IEI_PumpOcc接口实现了类定义与文档的关联关系。
    主接口IEI_Pump有一个下拉框类型的属性定义。通过关联关系与一个Unit上的属性ISPFContract连接。主接口还与一个EdgeDef、一个ViewDef和一个DirectedGraphDef相连。



    本文内容在不断修改完善中,未经许可请勿转载。

    博客地址:https://mizart.cnblogs.com
    原文地址:https://www.cnblogs.com/mizart/p/13755457.html
    如果您所浏览的链接不是博客园地址,可能是爬取作者的文章,为保证内容的有效性,请点击原文地址阅读,感谢!

  • 相关阅读:
    如何锻炼出最牛程序员的编码套路
    如果仔细观察他们,你会发现他们时时都在锻炼
    单纯地每天埋头于工作并不能算是真正意义上的锻炼
    把全世界的人们都联系在一起,提升人们的社交参与度
    HTML5十五大新特性
    html5的八大特性
    【贪心】【二维偏序】【权值分块】bzoj1691 [Usaco2007 Dec]挑剔的美食家
    【分块】【链表】bzoj2738 矩阵乘法
    【分块】bzoj3343 教主的魔法
    【线段树】bzoj3747 [POI2015]Kinoman
  • 原文地址:https://www.cnblogs.com/mizart/p/13755457.html
Copyright © 2011-2022 走看看