哪个XML DTD有效

时间:2015-06-23 00:49:31

标签: xml database dtd

我在工作表中有这个问题,但我现在已经错了5次,有人可以帮忙吗?

这是一个XML DTD:

<!DOCTYPE meal [
    <!ELEMENT meal (person*,food*,eats*)>
    <!ELEMENT person EMPTY>
    <!ELEMENT food EMPTY>
    <!ELEMENT eats EMPTY>
    <!ATTLIST person name ID #REQUIRED>
    <!ATTLIST food name ID #REQUIRED>
   <!ATTLIST eats diner IDREF #REQUIRED dish IDREF #REQUIRED>
]>

以下哪些文件与DTD相符?

<meal>
    <person name="Alice"/>
    <food name="salad"/>
    <eats diner="Alice" dish="salad"/>
    <person name="Bob"/>
    <food name="salad"/>
    <eats diner="Bob" dish="salad"/>
    <person name="Carol"/>
    <food name="sandwich"/>
    <eats diner="Carol" dish="sandwich"/>
</meal>
<meal>
    <person name="Alice"/>
    <person name="Bob"/>
    <person name="Carol"/>
    <person name="Dave"/>
    <food name="salad"/>
    <food name="turkey"/>
    <food name="sandwich"/>
    <eats diner="Alice" dish="turkey"/>
    <eats diner="Bob" dish="salad"/>
    <eats diner="turkey" dish="Dave"/>
</meal>
<meal>
    <person name="Alice"/>
    <person name="Bob"/>
    <food name="salad"/>
    <eats diner="Alice" dish="food"/>
    <eats diner="Bob" dish="food"/>
</meal>
  • 只有第二个
  • 只有第二个和第三个
  • 只有第一个和第三个
  • 只有第一个

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

只有第二个。

第一个无效,因为meal必须包含零个或多个person,后跟零个或多个food后跟零个或多个eats

第三个无效,因为没有值food的ID类型属性。 (dish是属性类型IDREF

答案 1 :(得分:2)

第一个示例有两个元素,id属性的值相同。 重复<food name="salad"/>,因此无效。 (正如其他答案所述,顺序很重要)

第三个示例的idref属性值不是任何元素<eats diner="Bob" dish="food"/>的id属性 - &#34; food&#34;不是任何元素的id。

第二个,尽管我们看起来有些奇怪,因为用<eats diner="turkey" dish="Dave"/>解释它的人是有效的,因为这些属性都是其他地方的idref属性。 dtd没有指定idref必须是特定类型元素具有的id属性,即使这是对我们有意义的唯一方式。

相关问题