私はEMFを3週間使用しています。 実行中のEclipseアプリケーションを使用してメタモデルとインスタンスを作成しました。私の問題は、Eclipseの実行中のインスタンスによって複数のXMIファイルが保存されており、xmiファイル内のデータを処理する別のテキストファイルを作成するためにそれらを解析したいということです。 EMMIのXMIResource APIを使用しています。他のxmiドキュメントとの相互参照がなくてもファイルをロードすると、すべてうまく行きます。しかし、他のxmiドキュメントへの相互参照を持つxmiドキュメントを読み込むと、すべての相互参照がJavaモデルに正しく保存されません。複数のxmiファイルをEMFでロードする
私は、XMIファイルをロードするためのコードのこの部分を使用:あなたがオブジェクト「環境」は正しくすべてELISTのオブジェクトが含まれている必要があり、すべてのメタモデルの私のルートオブジェクトで見ることができるように
XMIResource resourceInTy = new XMIResourceImpl(URI.createURI("file:/runtime-New_configuration/ApplicationInstance/instancesTypes.model"));
resourceInTy.load(null);
Environment env1 = (Environment) resourceInTy.getContents().get(0);
XMIResource resourceContRel = new XMIResourceImpl(URI.createURI("file:/runtime-New_configuration/ApplicationInstance/ContextRelations.model"));
resourceContRel.load(null);
Environment env2 = (Environment) resourceContRel.getContents().get(0);
env.setTypes(env1.getTypes());
env.setInstances(env1.getInstances());
env.setContextRelations(env2.getContextRelations());
を私はxmiファイルを解析した後に設定します。
ここでの問題は、EList "ContextRelations"の中に、オブジェクトタイプへの参照を持つ "Parameter"という別のオブジェクトへの参照があることです。私が型を取得しようとすると、null参照が出てきます! 私は深くこの問題について別の質問で検索が、私が見つけた最も近いものは、このリンクで入手可能な無答えた質問だった: ContextRelations.model
<parameters number="5">
<type href="instancesTypes.model#//@types.0"/>
</parameters>
<parameters number="6">
<type href="instancesTypes.model#//@types.4"/>
</parameters>
<contextRelations name="in"parameters="//@parameters.0//@parameters.1">
<initialComplexEvent href="Events.model#//@events.0"/>
<endingComplexEvent href="Events.model#//@events.1"/>
</contextRelations>
:ここでは、2つのXMIファイルがある
Loading Multiple files using EMF resource load?
InstancesTypes.model
<types name="Emp"/>
<types name="Cam"/>
<types name="Comp"/>
<types name="Fi"/>
<types name="Loc"/>
<types name="St"/>
<types name="Read"/>
<instances name="Alice" type="//@types.0"/>
<instances name="r01" type="//@types.4"/>
<instances name="Bob" type="//@types.0"/>
<instances name="cctv1" type="//@types.1"/>
<instances name="doc" type="//@types.3"/>
<instances name="m1" type="//@types.2"/>
<instances name="m2" type="//@types.2"/>
<instances name="m3" type="//@types.2"/>
<instances name="nfc01" type="//@types.6"/>
<instances name="usb1" type="//@types.5"/>
セカンダリ質問:
ご覧のとおり、私は3つのルートオブジェクトを使用します:env1とenv2は、その内容をメインルートオブジェクト(env)に入れる一時変数として使用されます。 すべてのxmiファイルを同時に解析して、ただ1つのルートオブジェクトを作成する方法がわからないので、私はそれを行います。
誰かが私を助けることができますか?