在DTD中定义XML元素,其中内容模型依赖于属性值

时间:2015-05-15 18:44:19

标签: xml dtd

如何从XML文档定义DTD语句,其中特定元素具有属性,并且根据此属性,具有不同的子元素。

例如在这种情况下:

<tv_program>
<!-- Various elements here -->
<program type = "live chat">
<presenter></presenter>
<guests></guests>
</program>
<program type = "documentary">
<short_descrip></short_descrip>
</program>
<program type = "film">
<title></title>
<genre></genre>
<rating></rating>
</program>
</tv_program> 

在DTD中的每个特定属性类型(实时聊天,纪录片,电影)中声明子元素(演示者,访客等)的结构是什么?

1 个答案:

答案 0 :(得分:0)

您正在描述的内容(现在)名称为 Conditional Type Assignment 。 DTD无法做到这一点。甚至不可能使用XSD 1.0。您需要XSD 1.1来进行条件类型分配,例如让内容模型依赖于属性的值。

有关XSD 1.1中CTA的示例,请参阅this answer

如果您坚持使用DTD或XSD 1.0,那么您必须

  1. 在架构之外执行此类检查,或
  2. 通过名称而非@type消除元素类型的歧义 属性。
  3. 如果可能,请使用选项#2;它被认为是XML中的最佳实践,可以区别对不同元素进行命名。