0

xmi ファイル (バージョン: OMG XMI 2.4.1) を EMF で読み込んで解析する必要がありますが、スタックしてしまいます。

OMG XMI Spec 2.4.1には、XMI スキーマXMI.xsdXMI-model.xmi があります。たとえば、ここでは、EMF によってXMI-model.xmiを読み込んで解析する必要があります。

私がしたことは次のとおりです。

  • Eclipse で EMF プロジェクトを新規作成する
  • xmi スキーマ: XMI.xsdをインポートし、 xmi.genmodelファイルを取得します。
  • xmi.genmodelを使用して、Eclipse ですべてのコードを生成します。モデル コードが生成されます。
  • Junit4 テスト ケースを新規作成し、XMI-model.xmiファイルをJunit プラグイン テストでロードしようとしましたが、失敗しました。以下は私のコードです。

    @Test
    public void test() throws IOException {
        URI uri = URI
                .createFileURI("/home/pzhengshuai/Desktop/15Feb-19Feb/XMI-model.xmi");
        _20110701ResourceFactoryImpl factory = new _20110701ResourceFactoryImpl();
        Resource resource = factory.createResource(uri);
        Map<String, Boolean> options = new HashMap<String, Boolean>();
        options.put(XMLResource.OPTION_KEEP_DEFAULT_CONTENT, Boolean.TRUE);
        resource.load(options);
        EObject model = (EObject) resource.getContents().get(0);
        Assert.assertNotNull(model);
    }
    

例外は次のとおりです。

org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Feature 'XMIType' not found. (file:/home/pzhengshuai/Desktop/15Feb-19Feb/XMI-model.xmi, 2, 164)

さて、それでは xsd ファイルと xmi ファイルを読み込もうとしたところ、 XMI-model.xmixmlns:uml="http://www.omg.org/spec/UML/20110701"内に名前空間があることがわかったので、uml スペースのリンクに移動して、UML のスキーマを見つけようとしました。残念ながら、このリンクでは、UML に関するすべてのファイルが en 形式の XMI です。

だから私はさらに2つのオプションを試しました:

  1. Enterprise Architect と Altova XMLspy を使用してUML.xmiUML.xsdに変換しようとして、上記と同じことを行ってください。失敗しました。個人的には、この変換によって一部の情報が失われる可能性があると思います。
  2. ここで同様の質問を見つけました。

XMI XSD は OMG の Web サイト XMI XSD 2.1.1 にありますが、UML スキーマと MOF スキーマも必要です。UML XMI ファイルを読み書きするより良い方法は、Eclipse UML 実装を使用することです。単純な Java プログラムで Eclipse の外で簡単に使用できます: を参照してください。

私は答えに従い、Eclipse UML 実装に関するドキュメントを読みましたが、それは私が正確に望んでいるものではないと思いました。

だから、誰かが私にアドバイスをくれることを願っています。助けてくれてありがとう!

4

1 に答える 1