2011-12-19 35 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

相关问题