2011-12-10 57 views
1

假設我們有一個叫做根元素第一如何在DTD中爲XML中的同名元素聲明一個元素?

現在已經第2種元素稱爲第二和第三或只是文本(#PCDATA)

第二應始終之前聲明第三個元素

現在,第二個子元素可以具有另一個(ONLY ONE)第二個子元素或者只是文本(#PCDATA)

第三子元素只能有文本(#PCDATA)

因此,我們可以有這樣的事情:

 <first> 
      <second> I'm in second </second> 
      <third> I'm in third </third> 
     </first> 

或者是這樣的:

 <first> 
      <second> 
       <second> I'm in second </second> 
      </second> 
      <third> I'm in third </third> 
     </first> 

的困難的事情在這裏是,如何使第一個第二個元素只能接受一個第二個子元素 ,雖然第二個子元素也是第二個元素,但它將不能接受除文本之外的其他元素,澳洲英語已經是另一個元素的子元素

我試圖創造一些像這樣的

<!DOCTYPE first [ 

     <!ELEMENT first (second,third)> 
     <!ELEMENT second (#PCDATA | second, third)> 
     <!ELEMENT third (#PCDATA)> 
    ]> 

但不幸的是這不我用這個驗證所有

工作:http://validator.w3.org/check

與此代碼

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 

    <!DOCTYPE first [ 

     <!ELEMENT first (second,third)> 
     <!ELEMENT second (#PCDATA | second, third)> 
     <!ELEMENT third (#PCDATA)> 
    ]> 

     <first> 
      <second> I'm in second </second> 
      <third> I'm in third </third> 
     </first> 

它給我錯誤

有什麼想法嗎?

回答

2

無論何時您擁有混合內容模型(包括PCDATA和其他元素),都無法使用,(「後跟」)順序操作員/連接器指定順序。

您必須使用|(「或」)序列操作符/連接器。您也不能在同一組內混合使用,|。您還必須使用*(「零個或多個」)出現指示符。

<!DOCTYPE first [ 
<!ELEMENT first (second,third)> 
<!ELEMENT second (#PCDATA|second|third)*> 
<!ELEMENT third (#PCDATA)> 
]>