我正在读这个: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+)>
在第四行中,我徘徊为什么item
后跟+
,为什么rating
后跟?
?为什么需要这些递归算子,它们在这里意味着什么?
答案 0 :(得分:1)
也许这可能会对您有所帮助:DTD Elements
基本上:
+符号声明了子元素 “message”必须在元素内部出现一次或多次。
和
? sign声明了子元素 “message”可以在元素内部发生零次或一次。
观察每个qupte的必须和 之间的区别
答案 1 :(得分:1)
(X+|Y?)*
相当于(X|Y)*
。示例DTD中的运算符是冗余的。
答案 2 :(得分:0)
+
表示一个或多个 ?
表示零或一个 答案 3 :(得分:0)
在这种情况下,没有实际区别。通过选择元素,其中该选择的元素可以发生任意次数((…|…|…)*
),在任何成员上注释任何基数约束都没有意义。一个或多个事物的零次或多次与零或更多完全相同。一次或零次的零次或多次与零或更多完全相同。
如果使用序列((…,…,…)
)会有所不同。