DTD または XSD からサンプル XML ドキュメントを生成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/17106

  •  08-06-2019
  •  | 
  •  

質問

私たちは、大量の XML 変換を伴うアプリケーションを開発しています。適切な入力テスト データ自体はなく、DTD または XSD ファイルのみがあります。これらのファイルからテスト データを自分で生成したいと考えています。それを行う簡単/無料の方法はありますか?

編集

これを行うための無料ツールはないようですが、OxygenXML がこれに最適なツールの 1 つであることに私は同意します。

役に立ちましたか?

解決

酸素だと思います(http://www.oxygenxml.com/) も同様に機能しますが、これは別の商用製品です。それはいいことなのですが…。XML 作業を多く行う人には、これを強くお勧めします。優れた Eclipse プラグインも付属しています。

フル機能を備えた 30 日間の無料試用版があると思います。

他のヒント

Visual Studio 2008 SP1 以降では、 XML スキーマ エクスプローラー いくつかの基本的なサンプル データを使用して XML ドキュメントを作成できます。

  1. XSD ドキュメントを開きます
  2. XML スキーマ エクスプローラーに切り替える
  3. ルートノードを右クリックし、「サンプルXmlの生成」を選択します。

Screenshot of the XML Schema Explorer

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

もちろん、Eclipse を使用して DTD および XSD スキーマ ファイルを作成および編集することもできます。また、プラグインをインストールする必要はありません。標準配布物に含まれています。

Intellij Idea ユーザーの場合:

「ツール」→「XML アクション」を見てください。

enter image description here

(私がテストした限りでは)非常にうまく機能しているようです。

編集:

@naXa が述べたように、XSD ファイルを右クリックして、[XSD スキーマから XML ドキュメントを生成...] をクリックすることもできるようになりました。

Sourceforge.net で入手可能なカムプロセッサは、任意の XSD の XML テスト ケースを生成します。独自のテスト サンプルを生成する方法を示すチュートリアルが用意されています。これには、ランダムなジャンク サンプルではなく現実的なサンプルを保証するためのコンテンツ ヒントの使用も含まれます。

チュートリアルはここから入手できます。http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf

また、OASIS コンテンツ アセンブリ メカニズム (CAM) 標準を使用して XSD をより XSLT フレンドリーな構造にリファクタリングするこのツールの詳細については、リソース Web サイトから見つけることができます。 http://www.jcam.org.uk

楽しんでください、DW

XML インスタンス ジェネレーターを使用できます。 Sun/Oracle マルチスキーマ検証ツール.

README.txt には次のように記載されています。

Sun XMLジェネレーターは、いくつかの種類のスキーマからさまざまなXMLインスタンスを生成するJavaツールです。DTD、リラックスネームスペース、リラックスコア、TREX、およびW3C XMLスキーマパート1のサブセットをサポートします。[...]

これは、スキーマから有効なインスタンスと無効なインスタンスの両方を生成できるコマンドラインツールです。特定のスキーマに準拠する必要があるXMLアプリケーションのテストケースを生成するために使用できます。

ダウンロードして解凍する xmlgen.zip から msvダウンロードページ 次のコマンドを実行して、詳細な使用手順を確認します。

java -jar xmlgen.jar -help

このツールは BSD ライセンスに基づいてリリースされているようです。ソースコードには以下からアクセスできます ここ

XMLスパイ 無料ではありませんが...

私はそれを信じています リキッド XML スタジオ これは無料で行われますが、私はテスト データの作成に個人的に使用したことはありません。

今のところ誰もその質問に答えることができなかったようです:)

EclipseLinkのMOXyを使用してバインディング・クラスを動的に生成し、バインドされた型を再帰的に処理します。これはやや重いですが、オブジェクト ツリーがインスタンス化されると XPath 値の挿入が可能になります。

InputStream in = new FileInputStream(PATH_TO_XSD);
DynamicJAXBContext jaxbContext = 
            DynamicJAXBContextFactory.createContextFromXSD(in, null, Thread.currentThread().getContextClassLoader(), null);
DynamicType rootType = jaxbContext.getDynamicType(YOUR_ROOT_TYPE);
DynamicEntity root = rootType.newDynamicEntity();
traverseProps(jaxbContext, root, rootType, 0);

TraverseProps は非常に単純な再帰メソッドです。

private void traverseProps(DynamicJAXBContext c, DynamicEntity e, DynamicType t, int level) throws DynamicException, InstantiationException, IllegalAccessException{
        if (t!=null) {
            logger.info(indent(level) + "type [" + t.getName() + "] of class [" + t.getClassName() + "] has " + t.getNumberOfProperties() + " props");
            for (String pName:t.getPropertiesNames()){
                Class<?> clazz = t.getPropertyType(pName);
                logger.info(indent(level) + "prop [" + pName + "] in type: " + clazz);
                //logger.info("prop [" + pName + "] in entity: " + e.get(pName));

                if (clazz==null){
                    // need to create an instance of object
                    String updatedClassName = pName.substring(0, 1).toUpperCase() + pName.substring(1);
                    logger.info(indent(level) + "Creating new type instance for " + pName + " using following class name: " + updatedClassName );
                    DynamicType child = c.getDynamicType("generated." + updatedClassName);
                    DynamicEntity childEntity = child.newDynamicEntity();
                    e.set(pName, childEntity);
                    traverseProps(c, childEntity, child, level+1);
                } else {
                    // just set empty value
                    e.set(pName, clazz.newInstance());
                }
            }
        } else {
            logger.warn("type is null");
        }
    }

すべてを XML に変換するのは非常に簡単です。

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);

ここにあるXMLPad(無料で使用できます)を使用することもできます http://www.wmhelp.com XML サンプルを生成します。メニューから:XSD -> サンプル XML ファイルを生成します。

Microsoftはサンプルとして「ドキュメントジェネレーター」ツールを公開している。 これは記事です サンプル アプリのアーキテクチャと操作について詳しく説明します。

サンプル生成ツールを実行したいだけの場合は、 ここをクリック そしてMSIをインストールします。

それは無料です。ソースは入手可能です。.NET Framework を実行する必要があります。XSD でのみ動作します。(リラックスNGやDTDではありません)。

XML-XIG:XML インスタンス ジェネレーター

http://xml-xig.sourceforge.net/

このオープンソースは役に立つでしょう。

Microsoft Officeには「インフォパス' を使用すると、XSD をインポートとして受け取り、XML ファイルを作成するためのフォームベースのエディターを迅速かつ簡単に定義できます。これには 2 つのモードがあります。1 つはフォームを定義するモード、もう 1 つはフォームに記入して XML ファイルを作成するモードです。これは最初に Office 2003 に付属していたと思いますが、ほとんどの人はインストールしたことがありません。私がそれをどれほど気に入っているかにショックを受けています。

XMLBlueprint 7.5 では次のことが可能です。-DTDからサンプルXMLを生成 - リラックスNGスキーマからサンプルXMLを生成 - XMLスキーマからサンプルXMLを生成します

のオープンソースバージョン SoapUI WSDL (XSD タイプ定義を含む) から SOAP リクエストを生成できるため、この機能のオープンソース実装があるようです。残念ながら、どのライブラリがこれに慣れているかはわかりません。

Liquid XML Studio には、 XML サンプル ジェネレーター XML スキーマからサンプル XML ファイルを構築するウィザード。結果のデータはスキーマに準拠しているようです (正規表現パターンのデータを生成できないだけです)。

Generate an XML Sample from an XSD

OpenXSD ライブラリには、XSD に基づいた XML インスタンスの生成がサポートされていると記載されています。それをチェックしてください。

完全を期すために追加します http://code.google.com/p/jlibs/wiki/XSInstance, 、これは同様の(ただし Java 固有の)質問で言及されています。 XSD からサンプル XML を生成するための Java "API" はありますか?

XML ブループリントもこれを行います。ここの指示

http://www.xmlblueprint.com/help/html/topic_170.htm

無料ではありませんが、10 日間の無料トライアルがあります。速くて効率的だと思われます。残念ながらWindowsのみです。

それもあります http://xsd2xml.com/, 、オンライン XSD から XML ジェネレーター

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top