2015-06-23 73 views
0

我在工作表中有這個問題,但現在我錯了5次,有人可以幫忙嗎?哪個XML DTD有效

下面是一個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> 
  • 只有第二
  • 只有第二和第三
  • 只有第一和第三
  • 只有第

謝謝您的幫助

回答

3

只有第二。

首先是無效的,因爲meal必須包含後跟零個或多個person零個或多個food後跟零個或多個eats

第三個是無效的,因爲沒有ID值屬性,值爲food。 (dish是屬性類型IDREF

2

第一個示例具有兩個元素,它們對於id屬性具有相同的值。 <food name="salad"/>重複,所以這是無效的。 (正如在其他答案中提到的那樣,順序很重要)

第三個示例的idref屬性值不是任何元素的id屬性<eats diner="Bob" dish="food"/> - 「food」不是任何元素的id。

第二,儘管它看起來有點奇怪,因爲人們用<eats diner="turkey" dish="Dave"/>來解釋它是有效的,因爲這些屬性都是其他地方的idref屬性。 dtd沒有指定idref必須是特定類型的元素所具有的id屬性,儘管這是唯一對我們有意義的方法。

+0

第一個實例中的重複ID很好。我一直在看我的手機,一旦找到明顯的問題就停止尋找問題。 +1 –