3

フリーでオープン ソースの Eclipse IDE の最近のバージョンでは、DTD ファイルと XSD ファイルから XML ドキュメントを生成できます。特定の *.dtd または *.xsd ファイルを右クリックし、[生成] -> [XML ファイル] を選択します。生成するルート要素と、オプションの属性と要素を生成するかどうかを選択できます。

このヘッドレスを (日食を開始せずに) 使用できますか?

4

2 に答える 2

3

実際の生成に必要なプラグインのみを含むヘッドレスRCPアプリケーションを作成できます。これらは主に、拡張ポイントなどを管理するために必要ないくつかのコア プラグインを備えた WTP プラグインです。

RCP アプリはコマンド ラインから実行でき、生成元のスキーマと出力ファイル名の引数を渡します。実動実装で必要な検証の多くが欠落していますが、それを行う方法を示しています。また、文字セットを UTF-8 にハードコーディングします。引数処理を拡張して、それをオプションのパラメーターなどにすることができます。

以下のスニペットは、新しいヘッドレス RCP アプリケーションに組み込むことができます。RCP アプリケーションを作成するには、まず新しいプラグイン プロジェクトを作成します。

  • 右クリック->新規->その他...->プラグイン開発->プラグインプロジェクト、次へを選択
  • プロジェクトの名前 ( name.seller.rich.xmlgen など) を入力し、[次へ] を選択します。
  • [このプラグインは UI に貢献します] のチェックを外し、[リッチ クライアント アプリケーション]で[はい]を選択して、[完了] をクリックします。
  • 必要な依存関係を追加するには、META-INF/Manifest.MF をダブルクリックし、エディターの [依存関係] タブを選択します。次のプラグインを [必要なプラグイン] セクションに追加します ([追加...] をクリックして、それぞれを追加します)。
    • org.eclipse.core.runtime、
    • org.eclipse.core.resources;bundle-version="3.5.0",
    • org.eclipse.wst.common.uriresolver;bundle-version="1.1.301",
    • org.eclipse.wst.sse.core;bundle-version="1.1.400",
    • org.eclipse.wst.xml.core;bundle-version="1.1.400",
    • org.eclipse.wst.xml.ui;bundle-version="1.1.0",
    • org.eclipse.xsd;bundle-version="2.5.0",
    • com.ibm.icu;bundle-version="4.0.1",
    • org.eclipse.wst.xsd.core;bundle-version="1.1.401",
    • org.eclipse.wst.xsd.ui;bundle-version="1.2.204",
    • org.eclipse.emf.ecore;bundle-version="2.5.0"
  • プロジェクトでは、Applicationクラスが表示されます。以下の Java コンテンツをソースのstart()メソッドにコピーしますApplication(およびファイルの先頭へのインポート)。

    java.io.ByteArrayOutputStream をインポートします。java.io.File をインポートします。java.io.FileInputStream をインポートします。java.io.FileOutputStream をインポートします。java.io.FileWriter をインポートします。java.net.URI をインポートします。java.net.URL をインポートします。

    org.eclipse.core.internal.utils.FileUtil をインポートします。org.eclipse.core.runtime.Platform をインポートします。org.eclipse.emf.ecore.plugin.EcorePlugin をインポートします。org.eclipse.equinox.app.IApplication をインポートします。org.eclipse.equinox.app.IApplicationContext をインポートします。org.eclipse.wst.xml.core.internal.contentmodel.CMDocument をインポートします。org.eclipse.wst.xml.ui.internal.wizards.NewXMLGenerator をインポートします。

    public Object start(IApplicationContext context) throws Exception { String[] args = Platform.getCommandLineArgs();

    String schemaFileName = args[0];// e.g. "C:\test\test.xsd"
    String xmlFileName = args[1];// e.g. "C:\test\test.xml"
    String rootName = args[2];//"myTestRoot";
    String charsetName = "UTF-8";
    
    try {
        //get the URI as a full URL path
        URI schemaUri = new File(schemaFileName).toURI();
        schemaFileName = schemaUri.toURL().toString();
    
        //TODO handle any errorInfo set into this array
        String[] errorInfo = new String[2];
        CMDocument cmDocument = NewXMLGenerator.createCMDocument(schemaFileName,
                errorInfo);
        NewXMLGenerator generator = new NewXMLGenerator(schemaFileName,
                cmDocument);
    
        generator.setRootElementName(rootName);
    
        ByteArrayOutputStream out = generator.createXMLDocument(xmlFileName,
                charsetName);
    
        //output the content to the file.
        File outFile = new File(xmlFileName);
    
        outFile.getParentFile().mkdirs();
    
        FileWriter writer = new FileWriter(outFile);
    
        writer.write(out.toString(charsetName));
    
        writer.flush();
        writer.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
    return IApplication.EXIT_OK;
    

    }

スタンドアロン アプリケーションを作成するには、 Product Configurationも作成する必要があります。

  • 右クリック->新規->その他...->プラグイン開発->製品構成
  • RCP プラグイン プロジェクトを選択します
  • [ファイル名:] フィールドにconfigと入力し、[完了] をクリックします。
  • config.product エディターの ID、バージョン、および名前フィールドに適切な値を入力します (ヘッドレス製品であるため、これらは重要ではありません)。
  • [ Product Definition ]セクションで、[ Product:]フィールドの横にある[ New... ] ボタンを選択します。デフォルト値で問題ないはずです ( Defining Plug-inが RCP プラグインであることを再確認してください)。[OK] を選択します。
  • 製品を保存する

次に、RCP アプリケーションをエクスポートする必要があります。

  • プロジェクトを右クリック->エクスポート...->プラグイン開発->Eclipse製品
  • アプリケーションの宛先ディレクトリを入力し、[ OK]を選択します。

これで、他のアプリケーションと同じように起動できるスタンドアロン アプリケーションが作成され、コマンド ライン パラメーターを渡してスキーマから XML ファイルを生成できます。

予想されるパラメータは次のとおりです。

  • 生成元のスキーマへの完全修飾パス
  • 作成するファイルの完全修飾名 (親ディレクトリも作成されます)。
  • ルート要素名 (ウィザードと同じ。これは、以下のコンテンツを生成する要素の名前です)。

: このプロセスは、単一のスキーマからのみファイルを生成します。スキーマが他のスキーマを参照している場合、現時点では失敗します。プロセスを拡張して、参照されているすべてのスキーマの場所をリストするプロパティ ファイルを取得し、それらをカタログ コントリビューションとして解決して、プロセスがスキーマを解決できるようにすることができます。以下に、これを行う方法と理由に関するいくつかのメモを示します。
機会があれば、これを実装することを検討し、それに応じて回答を更新します。


たとえば、Spring スキーマがある場合、さまざまな Spring 名前空間スキーマをスキーマ ファイルに含めることができます。Eclipse では、カタログ コントリビューションは、これらのスキーマ ID をスキーマ ファイルの場所にマップして解析できるようにする手段を提供します。それらのプラグインがある場合は、それらをアプリケーションにバンドルして、カタログの投稿を定義できます (投稿のヒントについては、ヘルプを参照してください)。

利用可能なカタログ コントリビューションがない場合、プロセスは代わりにプロパティ ファイルにキーと値のペアを定義して、ドライブ上のスキーマの場所を参照します。

内容例:

 http://www.springframework.org/schema/beans=c:\\schema\\spring-beans.xsd
 http://www.springframework.org/schema/tool=c:\\schema\\spring-tool.xsd
于 2009-10-08T16:25:00.250 に答える
0

この質問を見ましたか?特にヘッドレス環境について言及しているわけではありませんが、かなり似ています。

提案の 1 つはSun XMLGenerator ツールでした。私はそれを試してみましたが、それは魅力のように機能しました。

于 2009-10-05T20:28:28.000 に答える