1

私はこれを読んでいます: ttp://emacspeak.googlecode.com/svn/trunk/html/rss-0.91.dtd :

<!ELEMENT rss (channel)>
<!ATTLIST rss
version     CDATA #REQUIRED> <!-- must be "0.91"> -->
<!ELEMENT channel (title | description | link | language | item+ | rating? | image? | textinput? | copyright? | pubDate? | lastBuildDate? | docs? | managingEditor? | webMaster? | skipHours? | skipDays?)*>
<!ELEMENT title (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT link (#PCDATA)>
<!ELEMENT image (title | url | link | width? | height? | description?)*>
<!ELEMENT url (#PCDATA)>
<!ELEMENT item (title | link | description)*>
<!ELEMENT textinput (title | description | name | link)*>
<!ELEMENT name (#PCDATA)>
<!ELEMENT rating (#PCDATA)>
<!ELEMENT language (#PCDATA)>
<!ELEMENT width (#PCDATA)>
<!ELEMENT height (#PCDATA)>
<!ELEMENT copyright (#PCDATA)>
<!ELEMENT pubDate (#PCDATA)>
<!ELEMENT lastBuildDate (#PCDATA)>
<!ELEMENT docs (#PCDATA)>
<!ELEMENT managingEditor (#PCDATA)>
<!ELEMENT webMaster (#PCDATA)>
<!ELEMENT hour (#PCDATA)>
<!ELEMENT day (#PCDATA)>
<!ELEMENT skipHours (hour+)>
<!ELEMENT skipDays (day+)>

4 行目で、なぜの後に がitem続き+、なぜの後に?ratingが続くのか不思議に思います。?これらの再帰演算子が必要な理由と、ここでの意味は何ですか?

4

4 に答える 4

1

(X+|Y?)*と同等(X|Y)*です。サンプル DTD の演算子は冗長です。

于 2013-07-30T10:15:41.980 に答える
1

多分これはあなたを助けるかもしれません:DTD要素

基本的:

+ 記号は、子要素「メッセージ」が要素内で 1 回以上発生する必要があることを宣言します。

? sign は、子要素「メッセージ」が要素内で 0 回または 1 回発生する可能性があることを宣言します。

各クプテのマストカン違いを観察する

于 2013-07-30T09:32:52.887 に答える
0
  • +1つ以上を意味します
  • ?0または1を意味します
于 2013-07-30T09:27:56.740 に答える
0

この場合、実質的な違いはありません。その選択の要素が任意の回数 ( (…|…|…)*) 発生する可能性がある要素の選択では、メンバーのいずれかにカーディナリティ制約に注釈を付けても意味がありません。1 つ以上のものの 0 回以上のラウンドは、0 回以上とまったく同じです。1 つまたは 0 のものの 0 回以上のラウンドは、0 または複数とまったく同じです。

シーケンス ( (…,…,…)) が使用されている場合は異なります。

于 2013-07-30T09:40:00.367 に答える