在内容模型取决于属性值的 DTD 中定义 XML 元素
Define XML element in DTD where content model depends on attribute value
您将如何从 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 中声明每个特定属性类型(实时聊天、纪录片、电影)中的子元素(主持人、嘉宾等)的结构是什么?
您(现在)所描述的内容的名称为 Conditional Type Assignment。在 DTD 中不可能这样做。使用 XSD 1.0 甚至是不可能的。您需要 XSD 1.1 来进行条件类型分配,例如让内容模型依赖于属性的值。
有关 XSD 1.1 中 CTA 的示例,请参阅 。
如果您受困于 DTD 或 XSD 1.0,则必须
- 在您的模式之外执行此类检查,或者
- 通过名称而不是
@type
来消除元素类型的歧义
属性。
如果可能,选择选项 #2;在 XML 中,以不同方式命名不同的元素被认为是最佳做法。
您将如何从 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 中声明每个特定属性类型(实时聊天、纪录片、电影)中的子元素(主持人、嘉宾等)的结构是什么?
您(现在)所描述的内容的名称为 Conditional Type Assignment。在 DTD 中不可能这样做。使用 XSD 1.0 甚至是不可能的。您需要 XSD 1.1 来进行条件类型分配,例如让内容模型依赖于属性的值。
有关 XSD 1.1 中 CTA 的示例,请参阅
如果您受困于 DTD 或 XSD 1.0,则必须
- 在您的模式之外执行此类检查,或者
- 通过名称而不是
@type
来消除元素类型的歧义 属性。
如果可能,选择选项 #2;在 XML 中,以不同方式命名不同的元素被认为是最佳做法。