9

.xsd-filesを-filesに変換する最良の方法は何.ecoreですか?

そのためのEclipseプラグインはありますか?

4

4 に答える 4

6

スキーマを ECore モデルとしてインポートするたびに新しい MDT プロジェクトを作成したくない場合は、これを行う別の方法もあります。

  • 新規 -> EMF ジェネレーター モデル(「Eclipse モデリング フレームワーク」内)
  • 次へを押します
  • フォルダーを選択し、ファイル名を指定します(拡張子「genmodel」が必要です)。
  • 次へを押します
  • モデルインポーターとして「 XML スキーマ」を選択します
  • 次へを押します
  • XSDへの URI を選択します
  • (オプションで、.xsd2ecore マップ ファイルを生成する場合は、[Create XML Schema to Ecore Map] チェック ボックスを選択します)
  • 次へを押します
  • 必要なすべてのルート パッケージを選択します
  • プレスフィニッシュ
于 2012-05-23T12:11:09.457 に答える
4

サンプルクラス。私は輸入品を片付けませんでした。

 

import org.eclipse.emf.common.util.URI;

import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;

import org.eclipse.emf.ecore.*;
import org.eclipse.xsd.*;
import org.eclipse.xsd.ecore.XSDEcoreBuilder;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.xmi.*;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.edit.ui.*;


public class Xsd2Ecore {

    public static void main(String[] args) {
        Xsd2Ecore x2e = new Xsd2Ecore();
        x2e.go("UMLVersions/V1.0.0/UML2XMI.xsd", "UMLVersions/V1.0.0/UML2100.xmi");
    }


    public void go(String sourcename, String targetname) {

        System.out.println("Starting");

        XSDEcoreBuilder xsdEcoreBuilder = new XSDEcoreBuilder();
        ResourceSet resourceSet = new ResourceSetImpl();
        Collection eCorePackages = xsdEcoreBuilder.generate(URI.createFileURI(sourcename));

        resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
        Resource resource = resourceSet.createResource(URI.createFileURI(targetname));

        for (Iterator iter = eCorePackages.iterator(); iter.hasNext();) {
            EPackage element = (EPackage) iter.next();
            resource.getContents().add(element);
        }

        try {
            resource.save(null);
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Finished");

    }

}

于 2011-01-06T10:41:36.550 に答える