1

最後に「*」を追加する必要がある mixet コンテンツ要素 (dtd 内) を知っている人はいますか?

例えば:<!ELEMENT note (#PCDATA|to|from|header|message)*>

もう一度何も繰り返したくない場合について言及しています... #PCDATA と他の要素のどちらかを選択できるようにしたいだけです。

宣言の最後に「*」をドロップすると、DTD 宣言が不適切になることはわかっています...しかし、その理由はわかりません...

理由を知っている人はいますか?

4

2 に答える 2

6

混合コンテンツ モデルでは、要素の順序や数ではなく、発生する要素のみを制限できるため、この制限に達しています。残念ながら、これはXML 仕様自体によって要求されています。

混合コンテンツは難しいと思います。このモデルはドキュメントを念頭に置いて設計されています。インライン テキストを考えるときは理にかなっていますが、他の多くの場合はそうではありません。選択肢がある場合、ベスト プラクティスでは、PCDATA を含む要素を作成することをお勧めします。それができない場合は、混合コンテンツ モデルの限界にとらわれているのではないかと思います (別のスキーマ言語を使用してもあまり役に立ちません)。

于 2010-12-14T06:45:50.070 に答える
0

あなたはANYを使いたい

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE things [
    <!ELEMENT things ANY>
]>
<things>
    <person name="a" />
    <cats />
    <dogs />
    <animals><a rel="gogo" /></animals>
</things>

また、*は 0 回以上のオカレンスの演算子です。したがって、(element|element2)*どちらかまたは/およびと言っています

于 2010-12-13T20:50:33.780 に答える