2011-12-19 36 views
2

在DTD文件中,我該如何聲明元素必須具有屬性。 此屬性必須是下列三者之一:SI,SL或ii元素的屬性必須存在,並且是dtd文件中定義的列表之一

<bla si="foo"> 
<bla ii="foo"> 
<bla sl="foo"> 

是有效的,並且:

<bla> or 
<bla somthing="foo"> or 
<bla si="foo" ii="bar"> 

都應該無效

在此先感謝

編輯:

這不是訣竅,但它是關閉e:

<!ATTLIST bla si CDATA #REQUIRED 
       sl CDATA #REQUIRED 
       ii CDATA #REQUIRED 
> 

它需要所有的屬性在那裏,但我想強制,只有一個屬性在那裏。

回答

4

在DTD屬性不能相互依賴。您可以使用#REQUIRED#IMPLIED將任何屬性設置爲強制性或可選屬性,但不能以其他方式強制必須存在的屬性數量。

通常,一個好的設計實踐是使用屬性只列出元素的特徵,而不是改變元素的含義,並保持相互獨立的屬性。如果這些是你的目標,考慮製作它們(備用)子元素或提供你的「主機」元素的備用版本,以便它們可以具有不同的屬性集。

+0

allright ..此屬性不會改變相應元素的含義..它只是該元素的一個屬性......是否可以聲明某事。像通過xsd? – Stephan 2011-12-20 12:27:28

+1

@Stephan無法使用XSD(除非我忘記了一些技巧)。具有諷刺意味的是,這種限制的一個例子是XML-Schema本身的模式:xsd元素''只能有一個屬性'default'或'fixed',但這個限制並不是由xml模式文件強制執行的模式,只是在建議的案文中說明。 – jasso 2011-12-20 18:05:18

相關問題