1

同じ宣言を共有するDTDの要素をどのように定義できますか?

私はこれを試しましたが、構文エラーが発生しました:

<!ELEMENT (expression|condition) (code-text+)>

式と条件の宣言が同じである場合、それは同じサブ要素と属性を意味します。

4

1 に答える 1

2

(補足:原則として、DTDの代わりにXSDを使用することに同意します(または、RelaxNGを使用します。これは、XSDの優れた標準化された代替手段であり、はるかに簡潔で、理解と読み取りがはるかに簡単です)。拡張コード。非常に読みやすく、強力な表現力を提供します。テクノロジーによってブロックされるのではなく、必要なものを構築するのに役立ちます。VisualStudio、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;>

基本的にhelloworld要素にはまったく同じ属性とコンテンツのセットが含まれています。コンテンツとして必須ではない順序付けられていない要素の定義を使用しました。これにより、次のXMLドキュメントが上記のDTDで有効になります。

<?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>
于 2009-10-26T01:45:29.160 に答える