我想知道您是否有任何关于如何在dtd文件中使属性类型自由的想法,例如
<!ELEMENT Attribute (#PCDATA)>
<ATTLIST name (code | permission)>
例如,如果我有几种类型的属性名称,我无法在ATTLIST声明中指定所有属性名称。 如何修改ATTLIST声明,以便即使xml文件仍然有效 我在DTD中没有枚举类型,例如
<Attribute name="code">30</Attribute>
<Attribute name="non_declared_name_type>"value"</Attribute>
提前谢谢。
答案 0 :(得分:1)
如果您希望name
元素上的Attribute
属性与code
或permission
或任何XML名称中的任何一个匹配,则相当于您想要它匹配任何XML名称。使用DTD的最接近的近似值是
<!ATTLIST Attribute name NMTOKEN #REQUIRED>
此声明假定应该需要该属性。
对于这样的半封闭式&#39;值列表,具有一些枚举值但可以接受其他值,在使用DTD时通常有两种方法。
(a)可以如上所示声明它们,并确保DTD的用户知道枚举值,以便他们在适当时使用这些值,并且不会发明拼写这些名称的新方法,通过列出文档中的枚举值和/或在DTD中添加注释:
<!--* Expected values include
*
* 'code' (to be used when ... or ...)
* 'permission' (to be used for ... and ...).
*
* Use other values only if necessary. *-->
<!ATTLIST Attribute name NMTOKEN #REQUIRED>
(b)可以将属性拆分为两个:一个用于已知值,另外一个特殊值,如&#39;其他&#39;,另一个用于其他值。
<!ATTLIST Attribute
name (code | permission | other) #REQUIRED
other_name NMTOKEN #IMPLIED >
这明确地将枚举值放入DTD,并允许使用枚举的软件找到它们(例如,将它们放入用户界面中的选择列表中),同时仍然允许其他值。然后使用未声明的值变为
<Attribute name="other" other_name="non_declared_name_type"
>"value"</Attribute>