xmi ファイル (バージョン: OMG XMI 2.4.1) を EMF で読み込んで解析する必要がありますが、スタックしてしまいます。
OMG XMI Spec 2.4.1には、XMI スキーマXMI.xsdとXMI-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つのオプションを試しました:
- Enterprise Architect と Altova XMLspy を使用してUML.xmiをUML.xsdに変換しようとして、上記と同じことを行ってください。失敗しました。個人的には、この変換によって一部の情報が失われる可能性があると思います。
- ここで同様の質問を見つけました。
XMI XSD は OMG の Web サイト XMI XSD 2.1.1 にありますが、UML スキーマと MOF スキーマも必要です。UML XMI ファイルを読み書きするより良い方法は、Eclipse UML 実装を使用することです。単純な Java プログラムで Eclipse の外で簡単に使用できます: を参照してください。
私は答えに従い、Eclipse UML 実装に関するドキュメントを読みましたが、それは私が正確に望んでいるものではないと思いました。
だから、誰かが私にアドバイスをくれることを願っています。助けてくれてありがとう!