2012-09-04 22 views
0

我的XML可以包含多個param條目,每個keyvalue屬性喜歡這一點:如何定義可選元素的屬性?

<entry id="entry1"> 
    <classParams> 
     <param key="pluginid" value="monitorPlugin" /> 
     <param key="pluginid2" value="monitorPlugin2" /> 
    </classParams> 
</entry> 

和/或一個單一classParams只包含一個字符串是這樣的:

<entry id="entry2"> 
    <classParams> 
     Im a string 
    </classParams> 
</entry> 

我DTD:

<!ELEMENT classParams (#PCDATA | param*)* > 
<!ATTLIST id CDATA #REQUIRED value CDATA #REQUIRED > 
<!ELEMENT param (#PCDATA) > 

如何正確定義我的DTD,涉及到兩個條目只有一種類型的類型和屬性定義?

回答

0

我這個定義使得它。我現在只使用id並將值設置爲param

<!ELEMENT classParams (#PCDATA | param)* > 
     <!ELEMENT param (#PCDATA) > 
     <!ATTLIST param 
      id CDATA #REQUIRED 
     > 
1

該DTD應該工作...

<!ELEMENT entry (classParams)> 
<!ATTLIST entry 
      id CDATA #REQUIRED> 

<!ELEMENT classParams (#PCDATA|param)*> 

<!ELEMENT param (#PCDATA)> 
<!ATTLIST param 
      key CDATA #REQUIRED 
      value CDATA #REQUIRED> 
+0

感謝您的回答。 'EMPTY'定義了什麼?如果我希望'key'或'id'是一個屬性,那麼這個定義是什麼?在同一時間不允許同時允許但至少總是需要一個? – Patrick

+0

'EMPTY'意味着它是一個空的元素。在你的情況下,這應該是'#PCDATA'。 (我會編輯。)在DTD中,你不能對屬性聲明做「或」。你可以做的最好的做法是使兩者都有暗示,並以其他方式進行檢查。 –

+0

感謝您的解釋。 – Patrick

相關問題