1

XMLを使用して、ダイアグラム作成ツールに表示できるコンテンツを制御するためのスキーマを定義しています。スキーマファイルは、ダイアグラムに配置できるオブジェクトの種類、それらをリンクする方法、およびこれらのオブジェクトが持つプロパティ(つまり、エディターに表示される設定可能なプロパティ)を指定します。

新しい種類の図が必要になると、新しいスキーマが作成され、.xsdに対して検証されます。スキーマファイルをよりモジュール化して保守しやすくするために、<!ENTITY>宣言を使用して個別のファイルを含めています。特定のダイアグラム要素に一緒に属しているが、スキーマの複数の場所に表示される可能性のあるプロパティなどのリストは、別のXMLファイルに書き込まれ、関連する場所に含まれます。言う:

<!-- Nameing etc. just as an example -->
<!ENTITY CommonProerties1 SYSTEM "file:../CommonProperties1.xml">
<!ENTITY CommonProerties2 SYSTEM "file:../CommonProperties2.xml">

そして、スキーマのどこか:

<Node shape="Square">
    &CommonProperties1;
    <!-- Specific properties go here -->
</Node>

これにより、メンテナンスを困難にする多くのコピー貼り付けが防止され、共通のプロパティを複数のスキーマと共有することもできます。

問題は、現在、一部の共通プロパティにもフラグや列挙型のグループなどの基本要素が含まれていることです。各ファイル(「CommonProperties1.xml」など)に、次のような別の基本セットから含めることができるようにしたいと思います。 「CommonEnums.xml」と同じですが、!ENTITY宣言を使用してこれを行うことはできないと思います。

!DOCTYPEヘッダーの外側で!ENTITYを宣言することはできません。ヘッダーを追加すると、ファイルの1.2通りの方法でヘッダー宣言が取得されるため、最上位のXMLファイルが無効になります。

誰かが同じようなことをしようとしたことがありますか?問題を回避/解決するために何をしましたか?私が見逃しているより良いオプションはありますか?

4

1 に答える 1

3

一般的なシステムエンティティは、テキストインクルード/置換メカニズムとして使用されるように設計されています。非常に複雑な定型文を含む、深くネストされた構造を見てきました。

それでは、問題の説明をもう少し深く掘り下げてみましょう。

あなたの例では、含まれているエンティティが解析されるときにエンティティ参照&CommonEnumsが認識されるように、ドキュメント型宣言にCommonEnumsの!ENTITY宣言を含めることができないのはなぜだと思いますか?宣言に問題があるこれらのシステムエンティティの何が特別ですか?ドキュメントプロローグの解析中にそれらを宣言する必要を回避することが目標である場合、いいえ、それを回避することはできません。

!DOCTYPEヘッダーの外で!ENTITYを宣言することはできません

これはある意味では真実ですが、便利な抜け穴があります。外部DTDで一般エンティティを宣言できます。その場合、それらの宣言はドキュメントプロローグに物理的に表示されません。これがあなたの状況で役立つかどうかはわかりませんが、DTDで外部の一般的なシステムエンティティを宣言すると、それらを参照するドキュメントインスタンスやフラグメントからそれらを「隠す」ことができます。

私があなたの目標が再利用性、モジュール性、そして簡潔さであると思うなら、私はあなたが外部DTDによってあなたが望むことをすることができると思います。ただし、この機能を活用するには、XMLプロセッサを満たすために必要な範囲で、多かれ少なかれDTDを作成するすべての作業を行う必要があります。これにより、おそらくDTDに対してドキュメント構造を検証する必要があります。

于 2009-05-05T03:59:07.180 に答える