フリーでオープン ソースの Eclipse IDE の最近のバージョンでは、DTD ファイルと XSD ファイルから XML ドキュメントを生成できます。特定の *.dtd または *.xsd ファイルを右クリックし、[生成] -> [XML ファイル] を選択します。生成するルート要素と、オプションの属性と要素を生成するかどうかを選択できます。
このヘッドレスを (日食を開始せずに) 使用できますか?
実際の生成に必要なプラグインのみを含むヘッドレスRCPアプリケーションを作成できます。これらは主に、拡張ポイントなどを管理するために必要ないくつかのコア プラグインを備えた WTP プラグインです。
RCP アプリはコマンド ラインから実行でき、生成元のスキーマと出力ファイル名の引数を渡します。実動実装で必要な検証の多くが欠落していますが、それを行う方法を示しています。また、文字セットを UTF-8 にハードコーディングします。引数処理を拡張して、それをオプションのパラメーターなどにすることができます。
以下のスニペットは、新しいヘッドレス RCP アプリケーションに組み込むことができます。RCP アプリケーションを作成するには、まず新しいプラグイン プロジェクトを作成します。
プロジェクトでは、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 アプリケーションをエクスポートする必要があります。
これで、他のアプリケーションと同じように起動できるスタンドアロン アプリケーションが作成され、コマンド ライン パラメーターを渡してスキーマから 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