質問
同じ宣言を共有する要素をDTDで定義するにはどうすればよいですか
構文エラーにつながるこれを試しました:
<!ELEMENT (expression|condition) (code-text+)>
式と条件の宣言が同じ場合、つまり同じサブ要素と属性を意味します。
解決
(補足:原則として、DTDの代わりにXSDを使用することに同意します(あるいは、 RelaxNG は、XSDの標準化された優れた代替手段であり、はるかに簡潔で理解しやすく、読みやすくなっています。拡張コードについてはあまり心配しないでください。非常に読みやすく、強力な表現力を提供します。 Visual Studio、EclipseなどのIDEには、モデルを構築するためのグラフィカルデザインツールがあり、XSDを簡単に作成できます。)
しかし、それはあなたの質問には答えません。 DTDで定義を再利用するのは非常に簡単です。 HTML DTD を見てください。時間。重要なのは、パラメータエンティティを使用することです。以下に簡単な例を示します。
<!-- the "model" -->
<!ENTITY % commoncontent
"content | xxx">
<!ENTITY % commonattrs
"att1 CDATA #IMPLIED
att2 CDATA #IMPLIED">
<!-- elements -->
<!ELEMENT root ANY>
<!ELEMENT content ANY>
<!ELEMENT xxx EMPTY>
<!-- elements that share the same model -->
<!ELEMENT hello (%commoncontent;)+>
<!ELEMENT world (%commoncontent;)+>
<!-- adding the attributes to the elements with the same model -->
<!ATTLIST hello %commonattrs;>
<!ATTLIST world %commonattrs;>
基本的に hello
および world
要素には、まったく同じ属性とコンテンツのセットが含まれます。コンテンツとして非必須および順序付けされていない要素の定義を使用しました。これにより、上記のDTDで次のXMLドキュメントが有効になります。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root SYSTEM "multipleSharedDefinitions.dtd">
<root>
<hello att1="bla">
<content />
</hello>
<world att1="bla" att2="blabla">
<content />
<xxx />
</world>
</root>
所属していません StackOverflow