1

重複した要素があり、要素が同一でない無効な DTD ファイルを受け取りました。

<!ELEMENT Data (Name, address?)>
<!ELEMENT Data (Name, age)>

そして、DTD を読み取り、次のような要素をマージするユーティリティを作成する必要があります。

<!ELEMENT Data (Name, address?, age)>

一度に 1 つの要素を解析するだけの Java ライブラリを見つけることができないようです (SAX など)。

私が本当に求めているのは<!ELEMENT Data (Name, address?)>、配列のマップなどのデータ構造に を読み込むことです。

どんなポインタでも大歓迎です。

4

1 に答える 1

1

一度にすべての DTD ELEMENT を読み取る必要があるようです。そうしないと、例で示したようにそれらをペアにすることはできません。

DTD 記述では (...) 正規表現を任意にネストできるため、理論上は役に立ちません。実際問題として、ほとんどの DTD の ELEMENTS には (...) の層が 1 つまたは 2 つしかないため、機能する可能性があります。問題の大部分が示されているように見える場合は、文字列のハッキングだけでこれを実行し、残りを手動で修正できます。(1 行を読むだけでは意味がありません。ELEMENT の説明は複数の行にまたがり、"...>" で終わる場合があり、それを見つける必要があります)。

信頼できる自動化されたアプローチが必要な場合は、プログラム変換システムに相当するものが必要です。DTD は、形式システムの特定のタイプです。正式な記述のインスタンスを読み取り、インスタンスを表すデータ構造 (通常は抽象構文ツリーを呼び出します) を読み取って更新し、結果を有効なソース テキストとして書き直すことができるツールが必要です。

Java ではありませんが、当社のDMS Software Reengineering Toolkitはそのようなプログラム変換エンジンです。これには、DTD を解析できる XML フロント エンドがあり、実際に、これらの DTD を使用してコード ジェネレーターを構築しました。

于 2012-05-28T05:52:31.600 に答える