如何使DTD文件中的属性列表可扩展

时间:2016-06-10 13:28:04

标签: java dtd

我想知道您是否有任何关于如何在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>

提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果您希望name元素上的Attribute属性与codepermission或任何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>