MOF 思考

 

MOF 概念总结

 

一、  概述

         元对象设施标准(Meta-Object Facility, MOF):在一个分布式环境下对元信息的管理进行定义的标准。在“MetaObjectFacility(MOF) Specification”中,由以下章节构成:

l    MOFUsage Scenarios:对MOF的使用场景进行了介绍

l    MOFConceptual Overview:对整个MOF4层架构进行了概述,然后对用来描述MOF模型的元素进行了介绍,最后介绍了MOF模型内部和外部的映射。

l    MOFModeland Interfaces:详细描述了MOF的自我描述模型元素。

l    TheMOFAbstractMapping:从M2M1的映射。

l    MOFtoIDLMapping:从MOFIDL的映射。

l    The ReflectiveModule:反射

二、  MOF框架结构

1.      传统的四层元数据架构

Four%20Layer%20Exm.JPG
1

2.      MOF架构

图二是用UMLIDL来表示MOF模型的一个例子。

l      MOF的模型描述是采用面向对象的方式进行, 使用UML进行描述。

l      在MOF中,元模型的层次是不定的。在图二是4层结构。

l      一个模型并不一定局限于在一个元模型层次。

l      MOF模型是自描述的。

MOF%20layer.JPG
图 二

 

三、  MOF框架模型元素

  model%20elements.JPG

图 三

MOF规范里面,按照Model ClassesModel AssociationsModel Data TypesModel ExceptionsModel ConstantsModel Constrains等几个方面进行描述。表一按照分类列出了所有的MOF元素,元素里面具体的内容除了IDL其他忽略。

表一

类别

元素

Model Classes

ModelElement

NamespaceGeneralizableElementTypedElementClassifierClassDataTypePrimitiveTypeCollectionTypeEnumerationTypeAliasTypeStructureTypeStructureFieldReferenceOperationAssociationAssociationEndPackageImportParameterConstraintConstantTag

 

Model Associations

ContainsGeneralizesRefersToIsOfTypeCanRaiseExposesAliasesDependsOnConstrains

 

Model Data Types

MultiplicityType

struct MultiplicityType {

long lower;

long upper;

boolean isOrdered;

boolean isUnique;

};

VisibilityKind

enum VisibilityKind {public_vis, private_vis, protected_vis};

 

DirectionKind

enum DirectionKind {in_dir, out_dir, inout_dir, return_dir};

 

ScopeKind

enum ScopeKind {instance_level, classifier_level};

 

AggregationKind

enum AggregationKind {none, shared, composite};

 

EvaluationKind

enum EvaluationKind {immediate, deferred};

 

Model Exceptions

NameNotFound, NameNotResolved

 

Model Constants

Unbounded

const long UNBOUNDED = -1;

The Standard DependencyKinds

 

 

Model Constrains

采用OCL(UML 1.4)来定义,具体待看

The PrimitiveTypes Package

BooleanIntegerLongFloatDoubleString

 

 

 

 

 

 

四、  几类映射(Mapping)

1.      MOF Abstract Mapping

        目前感觉还比较糊涂,没有理清细节。还需要多想像。

2.      MOF to IDL Mapping

3.      MOF to IDL XMI Mapping

 

五、  思考

 

在看了MDAMOF2个规范之后,明白了一件事:规范是非常抽象的东西,如果相关的经验不足的时候,很难看明白。但是,如果不是需要做规范实现方面的工作,或者照着规范的样式做一个类似的东西的时候,是不需要把规范的细节扣得很细的。只要明白一个概念性的东西就差不多了。

Meta这个概念类似与维度。假设有一个装有宇宙里面所有的数据仓库,那么如果要表示宇宙中的任何一个物体,一件事情,都可以从中找到一条数据满足。再假设有一个与这个数据仓库意义等价的元模型,这个元模型可以通过实例化(按照面向对象的思想)的方式来降低抽象程度,以致到最终可以表示任意指定的物体。对于数据仓库来说,通过往上面添加维度进行过滤就可以到最终的数据;对于元模型来说,是通过不断实例化来获得可以表示的数据。

一个类别与这个类别中某一个具体的实例的关系就和面向对象里面的classobject的关系一样,同时类似元模型里面的metadatadata的关系。在C,C++中,采用头文件来定义类型,这个就是元数据。只不过这个元数据与最终的执行代码是分开的。CORBRACOM采用IDL或者TBL来对接口进行描述,这个是组件层次的元数据。这个元数据也可以和组件分开。到了JAVA.NET,元数据就不在与执行代码分开,而是绑定在一起。由于这个原因,JAVAC#都不再把类型的申明和类型的实现分开。

.NET中,IL的元数据是由41张表组成的,描述了类型相关的所有信息。关系表与面向对象模型的实质上是一回事。用MOF的标准来衡量,.NET的元数据处于M1的层次,定义元数据格式的schema处于M2的层次。因此,如果要在JAVA.NET中进行mapping,那么可以先在M2层次进行mapping,建立mapping规则,再在M1层次进行mapping

类,类的实例,类的元数据,继承类等几个概念的关系。首先,类的元数据,类,类的实例在元模型中是从上到下(最上面最抽象)垂直的关系。类的元数据相对于类来说,就是类,类相对于元数据来说就是实例。类这个词的意思就是一类具有相同事物的总称,这是一个抽象的概念。类的实例化就是指定这个类别中的某一个事物的过程。那么什么是继承类?继承类就是在某个类中又加入一些新的限定或者划定一个范围而形成的一个新的抽象。这个抽象是属于之前那个抽象。考虑一个简单的例子。文档模板可以想像成是一个类,它是所有具有类似结构(这个结构可能是文档的排版结构等)的文档的抽象。那么它的实例就是填写这个文档模板而形成的一个文档。文档模板的类或者元数据就是在更高层次上抽象许许多多文档模板而形成的类。文档模板的继承可以在这个文档模板的基础上加入新的格式而形成新的文档模板。

Meta直觉上觉得可以用lisp语言进行描述,有什么优点缺点还没有考虑,只是先mark一下。

先思考到这里,有了想法再更新。

 

 

一、  例子

下面考虑了UML ModelC# Model.NET metamodel之间的MOF层次的对应关系。在UML模型中,采用图形的半形式化的方式来对逻辑进行建模,具有不精确性。静态视图采用类图进行表示,动态试图采用顺序图,活动图等进行表示;C#代码采用面向对象的方式来精确描述逻辑;.NET metadata采用表格的方式对执行代码的类型进行了定义,中间代码(IL, intermediate language)表现了业务逻辑的具体实现。

问题:UML中的顺序图模型,C#中的逻辑操作代码和.NET程序集中的IL是属于M1还是M0?感觉应该是属于M0。因为要进行具体业务逻辑的表示的时候,需要使用M1中定义的类型的实例来进行交互来描述业务逻辑。如果是M1中类型的实例的话,那么抽象层次就降低了,应该属于M0

                                       MOF%20Example.JPG                                    
 图

在图中有纵向和横向的mapping关系。UML ModelC# Model.NET metamodel都具有从M2M1的纵向mapping关系,从M1也可以反射出M2的模型。考虑一个正常的UML建模到生成C#代码,再到编译生成.NET程序集的过程。UML Models对业务逻辑进行了可视化的建模,当转换到C#的代码的时候,需要在M2的层次上建立UML元模型到C#元模型之间的映射,从而为如何从UML Models转换到C# Type建立基础。当C#的代码编译生成.NET程序集,其中绑定了对应代码的元数据。从C#代码到IL中间代码的过程也需要在M2层次上进行C#IL代码的映射。

 

Layer

UML Model

C# Model

.NET Model

M1

UMLM1.JPG

Class MOFModel {

  public int no;

  private void selfReflect();

}

TypeDef

Name

FieldList

MethodList

MOFModel

F1

M1

FieldDef

Name

Type

Flag

ID

no

integer

public

F1

MethodDef

Name

RetType

Flag

Parms

ID

selfRef

lect

void

public

null

M1

M2

UMLM2.JPG

MetaClass Type {

  string name;

  List <”Field”>;

  List <”Method”>;

}

MetaClass Field {

  string name;

  string flag;

  Type type;

}

MetaClass Method {

  string name;

  string flag;

  Type retype;

  Param par;

}

MetaClass Param {

  ……

}

 

TabName

Column

ColType

TypeDef

Name

string

TypeDef

FiledList

Integer

TypeDef

MethodList

integer

FieldDef

Name

String

FieldDef

Type

String

FieldDef

Flag

String

FieldDef

ID

String

MethodDef

Name

String

MethodDef

RetType

String

MethodDef

Flag

String

MethodDef

Parms

integer

MethodDef

ID

String

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/oiunt/archive/2005/11/28/285825.html

<think>嗯,用户想了解MOF规范在元数据管理中的实现方式。这个问题涉及数据仓库和系统建模的核心标准,需要从规范定义、技术实现和应用场景三个层面展开。用户可能正在设计企业级元数据管理系统,或者需要解决异构系统的元数据整合问题。从ta引用的资料看,特别关注了CWM标准和MOF的层次结构,说明需要具体的技术实现指导而非单纯理论。关于MOF规范本身,重点要解释清楚它的四层元建模架构。引用[2]提到MOF没有固定层次但通常采用M3到M0的分层,这个描述很关键。在实现层面,元数据仓库的构建通常需要三个核心组件:首先是元模型定义工具,用于创建M2层的CWM元模型;其次是元数据存储库,推荐使用支持XMI格式的数据库;最后是元数据交换引擎,这里要强调XMI序列化的作用。注意到用户提供的引用[3]提到"元数据联合/共享"的新趋势,这在实现时需要特别说明联邦式架构的优势。针对技术落地,应该给出两种典型实现路径:对于Java技术栈推荐使用EclipseModelingFramework,而.NET体系则可以用MetaDataServices。用户没有明确说明应用场景,但根据问题特征,补充了金融行业和电信行业的应用案例会比较实用。最后生成的相关问题特意加入了"联邦式架构"这个用户引用中提及但未深入的方向,可能正好切中ta潜在的需求点。</think>以下是关于 **MOF规范在元数据管理中的实现方式** 的详细解答: --- ### **一、MOF规范的核心概念** **MOFMeta-Object Facility)** 是OMG(对象管理组织)制定的元数据管理标准,核心目标是**统一元数据的定义、存储和交换**。其关键特性包括: 1. **四层元建模架构**(M0-M3) - **M3层(MOF自身)**:定义元元模型(如`Class`、`Attribute`等基础概念)[^2] - **M2层(元模型层)**:如CWM(数据仓库元模型)、UML(统一建模语言) - **M1层(模型层)**:具体业务模型(如“客户关系模型”) - **M0层(实例层)**:实际数据对象(如一条客户记录) > 通过分层实现元数据的自描述性,确保不同层级元数据可追溯[^2]。 2. **XMI(XML Metadata Interchange)** MOF规定使用**XMI格式**序列化元模型,实现跨平台元数据交换。例如CWM模型可通过XMI文件在不同ETL工具间迁移[^4]。 --- ### **二、元数据管理的实现方式** 基于MOF的元数据管理系统通常包含以下组件: #### 1. **元模型定义工具** - 使用MOF元语言定义领域元模型(如数据仓库的`CWM`模型)。 - 示例:定义表结构的MOF片段 ```java Class Table { attribute String name; attribute Column[] columns; } ``` #### 2. **元数据存储库(Repository)** - **物理存储**:采用支持XMI的关系数据库(如Oracle、DB2)或专用元数据存储引擎。 - **联邦式架构**:通过MOF接口聚合多来源元数据(数据库、API、文件等),形成逻辑统一视图[^3]。 #### 3. **元数据交换引擎** - 通过**XMI序列化/反序列化**实现工具间元模型同步(如将PowerDesigner模型导入Talend)。 - 支持**CWM标准包**(`Relational`、`OLAP`等)确保语义一致性[^1]。 #### 4. **元数据服务层** - **MOF反射API**:动态访问元模型(如`MetaClass.getAttributes()`)。 - **查询服务**:支持OCL(Object Constraint Language)查询元数据关系。 > 例:查找所有包含“客户ID”字段的表 $$ \text{Table.allInstances()->select(t | t.columns->exists(c | c.name='客户ID'))} $$ --- ### **三、典型技术实现** | **技术栈** | **实现方案** | **适用场景** | |------------------|------------------------------------------|--------------------------| | **Java生态** | Eclipse Modeling Framework (EMF) | 构建基于MOF的元数据工具 | | **.NET生态** | Meta Data Services (MDS) | 微软体系元数据管理 | | **开源方案** | Apache Atlas(集成CWM与MOF原则) | 大数据环境元数据治理 | > 示例:用EMF实现MOF元模型 > ```java > // 定义MOF元类 > EPackage pkg = EcoreFactory.eINSTANCE.createEPackage(); > EClass tableClass = EcoreFactory.eINSTANCE.createEClass(); > tableClass.setName("Table"); > pkg.getEClassifiers().add(tableClass); > ``` --- ### **四、应用场景** 1. **数据仓库标准化** 通过`CWM`实现ETL工具、BI平台与数据库的元数据互通,消除信息孤岛[^1]。 2. **DevOps元数据链** 将需求(ReqIF)、设计(UML)、测试(XMI)元数据串联,支持全生命周期追溯。 3. **云资源治理** 用MOF模型描述云资源(AWS/Azure元模型),实现跨云平台资源目录统一管理[^3]。 --- ### **五、挑战与优化方向** - **挑战**:复杂模型导致XMI文件庞大,需优化解析性能。 - **优化**: - 采用**增量元数据同步**(仅传输变更部分) - 使用**图数据库**存储元数据关系(如Neo4j替代关系库)[^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值