验证XML和DTD时的问题

问题描述:

我已经制作了这个配方列表,但由于某种原因,当我尝试验证Oxygen XML Editor中的文档时,出现大量错误消息。 氧气给了我以下错误:验证XML和DTD时的问题

元素类型“成分”不能声明不止一次 元素类型“名称”不得超过一次声明 元素类型“量”更不能被多次声明意想不到的元素“成分”。父元素的含量必须匹配: (姓名+,配料+,数量+,装潢,说明书,neccessity,准备)

这里是我的代码:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<!DOCTYPE recipes SYSTEM "recipes.dtd"> 

<recipes> 
    <cocktail> 

     <name>Hells Bells</name> 

     <ingredients>Batida de Coco</ingredients> 
     <quantity> 4cl </quantity> 

     <ingredients>caramel sirup</ingredients> 
     <quantity> 2 cl </quantity> 

     <ingredients>Milk</ingredients> 
     <quantity> 8 cl </quantity> 

     <ingredients>Strawberry puree</ingredients> 
     <quantity> 4 cl </quantity> 

     <decoration>Decoration: Strawberry blood with spiders.</decoration> 
     <instructions>Instructions: All ingredients should be shaken.</instuctions> 

     </cocktail> 

     <cocktail> 

     <name>Feuerzangenbowle</name> 

     <ingredients>red wine</ingredients> 
     <quantity> 1000 ml </quantity> 

     <ingredients>cinnamon</ingredients> 
     <quantity> 1 </quantity> 

     <ingredients>Carnations</ingredients> 
     <quantity> 3 </quantity> 

     <necessity>500 ml Pott</necessity> 

     <preparation>Season with cinnamon stick and cloves.</preparation> 

    </cocktail> 

    <appetizer> 

     <name>Fresh glass</name> 

     <ingredients>avocado</ingredients> 
     <quantity> 1 </quantity> 

     <ingredients>salmon</ingredients> 
     <quantity> 100 g </quantity> 

     <ingredients>chives</ingredients> 
     <quantity> stems </quantity> 

     <ingredients>lemon</ingredients> 
     <quantity> 1 </quantity> 

    </appetizer> 

    <appetizer> 

     <name>Merceiles Hummus</name> 

     <ingredients>Chickpeas</ingredients> 
     <quantity> 400 g </quantity> 

     <ingredients>olive oil</ingredients> 
     <quantity> 2 TS </quantity> 

     <ingredients>salt</ingredients> 
     <quantity> 1 TS </quantity> 

     <ingredients>Pepper powder</ingredients> 
     <quantity> 1 TS </quantity> 

    </appetizer> 

    <maindish> 

     <name>Pickled salmon</name> 

     <ingredients>salmon</ingredients> 
     <quantity> 2,5 kg </quantity> 

     <ingredients>pepper</ingredients> 
     <quantity> 1 TS </quantity> 

     <ingredients>salt</ingredients> 
     <quantity> 4 TS </quantity> 

     <ingredients>honey</ingredients> 
     <quantity> 4 TS </quantity> 

    </maindish> 

    <maindish> 

     <name>Beef fillet</name> 

     <ingredients>Beef fillet</ingredients> 
     <quantity> 1,5 kg </quantity> 

     <ingredients>Butterfelt</ingredients> 
     <quantity> 20 g </quantity> 

     <ingredients>thyme</ingredients> 
     <quantity> 4 branches </quantity> 

    </maindish> 

    <dessert> 

     <name>Chocolate Muffins</name> 

     <ingredients>chocolate</ingredients> 
     <quantity> 225 g </quantity> 

     <ingredients>butter</ingredients> 
     <quantity> 115 g </quantity> 

     <ingredients>vanillasuger</ingredients> 
     <quantity> 1 TS </quantity> 

     <ingredients>sugar</ingredients> 
     <quantity> 100 g </quantity> 

    </dessert> 

    <dessert> 

    <name>Tiramisu</name> 

    <ingredients>sugar</ingredients> 
    <quantity> 100 g </quantity> 

    <ingredients>yolk</ingredients> 
    <quantity> 4 </quantity> 

    <ingredients>egg whites</ingredients> 
    <quantity> 2 </quantity> 

    <ingredients>Amaretto</ingredients> 
    <quantity> 2 cl </quantity> 

    </dessert> 

</recipes> 

这里是DTD:

<!-- DTD document recipes.xml --> 

<!ELEMENT recipes (cocktail+, appetizer+, maindish+, dessert+)> 

<!ELEMENT cocktail (name+, ingredients+, quantity+, decoration, instructions, neccessity, preparation)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT ingredients (#PCDATA)> 
<!ELEMENT quantity (#PCDATA)> 
<!ELEMENT decoration (#PCDATA)> 
<!ELEMENT instructions (#PCDATA)> 
<!ELEMENT neccessity (#PCDATA)> 
<!ELEMENT preparation (#PCDATA)> 

<!ELEMENT appetizer (name+, ingredients+, quantity+)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT ingredients (#PCDATA)> 
<!ELEMENT quantity (#PCDATA)> 

<!ELEMENT maindish (name+, ingredients+, quantity+)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT ingredients (#PCDATA)> 
<!ELEMENT quantity (#PCDATA)> 

<!ELEMENT dessert (name+, ingredients+, quantity+)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT ingredients (#PCDATA)> 
<!ELEMENT quantity (#PCDATA)> 

我真的不知道该做什么,真的很感谢您的帮助! 非常感谢您的回答!

P.S - 新XML

element type "ingredients" must not be declared more than once 
element type "name" must not be declared more than once 
element type "quantity" must not be declared more than once 

这些错误是相当自我解释;您只能在DTD中声明一个元素(<!ELEMENT声明)。

unexpected element "ingredients". The content of the parent element must match: 
(name+, ingredients+, quantity+, decoration, instructions, neccessity, preparation) 

此错误是说,ingredients元素是不合适的。 ingredientscocktail)的父级必须与DTD中的模型匹配。在这种情况下,cocktail必须具有:依次

  • 一个或多个ingredients元件随后
  • 一个或多个quantity元件随后
  • 恰好一个decoration元件随后

    • 一个或多个name元件
    • 恰好一个instructions元素后面
    • 恰好一个neccessity elemen其次是
    • 只有一个preparation元素

    看你的XML T,这看起来并不像你想要什么。你可能想要的东西,看起来更像是这样的:

    (name+, (ingredients, quantity)+, decoration?, instructions?, necessity?, preparation?) 
    

    这是:其次是

  • 一个或多个
    • 只有一个ingredients元素之后

      • 一个或多个name元素
      • 恰好一个quantity元素
    • 随后
    • 零个或一个decoration元件随后
    • 零个或一个instructions元件随后
    • 零个或一个necessity元件随后
    • 零个或一个preparation元件

    您在DTD和XML中拼写为necessity的方式不同;他们需要匹配。

    您还在第一个cocktail中拼写instructions结束标记。

    那里之后quantity一次或多次ingredients的部分也应在模型更新的appetizermaindish,并dessert

    这里有一个更新的DTD:

    <!ELEMENT recipes (cocktail+, appetizer+, maindish+, dessert+)> 
    
    <!ELEMENT cocktail (name+, (ingredients, quantity)+, decoration?, instructions?, necessity?, preparation?)> 
    <!ELEMENT appetizer (name+, (ingredients, quantity)+)> 
    <!ELEMENT maindish (name+, (ingredients, quantity)+)> 
    <!ELEMENT dessert (name+, (ingredients, quantity)+)> 
    
    <!ELEMENT name (#PCDATA)> 
    <!ELEMENT ingredients (#PCDATA)> 
    <!ELEMENT quantity (#PCDATA)> 
    <!ELEMENT decoration (#PCDATA)> 
    <!ELEMENT instructions (#PCDATA)> 
    <!ELEMENT necessity (#PCDATA)> 
    <!ELEMENT preparation (#PCDATA)> 
    

    和XML文件:

    <!DOCTYPE recipes SYSTEM "recipes.dtd"> 
    <recipes> 
        <cocktail> 
    
         <name>Hells Bells</name> 
    
         <ingredients>Batida de Coco</ingredients> 
         <quantity> 4cl </quantity> 
    
         <ingredients>caramel sirup</ingredients> 
         <quantity> 2 cl </quantity> 
    
         <ingredients>Milk</ingredients> 
         <quantity> 8 cl </quantity> 
    
         <ingredients>Strawberry puree</ingredients> 
         <quantity> 4 cl </quantity> 
    
         <decoration>Decoration: Strawberry blood with spiders.</decoration> 
         <instructions>Instructions: All ingredients should be shaken.</instructions> 
    
        </cocktail> 
    
        <cocktail> 
    
         <name>Feuerzangenbowle</name> 
    
         <ingredients>red wine</ingredients> 
         <quantity> 1000 ml </quantity> 
    
         <ingredients>cinnamon</ingredients> 
         <quantity> 1 </quantity> 
    
         <ingredients>Carnations</ingredients> 
         <quantity> 3 </quantity> 
    
         <necessity>500 ml Pott</necessity> 
    
         <preparation>Season with cinnamon stick and cloves.</preparation> 
    
        </cocktail> 
    
        <appetizer> 
    
         <name>Fresh glass</name> 
    
         <ingredients>avocado</ingredients> 
         <quantity> 1 </quantity> 
    
         <ingredients>salmon</ingredients> 
         <quantity> 100 g </quantity> 
    
         <ingredients>chives</ingredients> 
         <quantity> stems </quantity> 
    
         <ingredients>lemon</ingredients> 
         <quantity> 1 </quantity> 
    
        </appetizer> 
    
        <appetizer> 
    
         <name>Merceiles Hummus</name> 
    
         <ingredients>Chickpeas</ingredients> 
         <quantity> 400 g </quantity> 
    
         <ingredients>olive oil</ingredients> 
         <quantity> 2 TS </quantity> 
    
         <ingredients>salt</ingredients> 
         <quantity> 1 TS </quantity> 
    
         <ingredients>Pepper powder</ingredients> 
         <quantity> 1 TS </quantity> 
    
        </appetizer> 
    
        <maindish> 
    
         <name>Pickled salmon</name> 
    
         <ingredients>salmon</ingredients> 
         <quantity> 2,5 kg </quantity> 
    
         <ingredients>pepper</ingredients> 
         <quantity> 1 TS </quantity> 
    
         <ingredients>salt</ingredients> 
         <quantity> 4 TS </quantity> 
    
         <ingredients>honey</ingredients> 
         <quantity> 4 TS </quantity> 
    
        </maindish> 
    
        <maindish> 
    
         <name>Beef fillet</name> 
    
         <ingredients>Beef fillet</ingredients> 
         <quantity> 1,5 kg </quantity> 
    
         <ingredients>Butterfelt</ingredients> 
         <quantity> 20 g </quantity> 
    
         <ingredients>thyme</ingredients> 
         <quantity> 4 branches </quantity> 
    
        </maindish> 
    
        <dessert> 
    
         <name>Chocolate Muffins</name> 
    
         <ingredients>chocolate</ingredients> 
         <quantity> 225 g </quantity> 
    
         <ingredients>butter</ingredients> 
         <quantity> 115 g </quantity> 
    
         <ingredients>vanillasuger</ingredients> 
         <quantity> 1 TS </quantity> 
    
         <ingredients>sugar</ingredients> 
         <quantity> 100 g </quantity> 
    
        </dessert> 
    
        <dessert> 
    
         <name>Tiramisu</name> 
    
         <ingredients>sugar</ingredients> 
         <quantity> 100 g </quantity> 
    
         <ingredients>yolk</ingredients> 
         <quantity> 4 </quantity> 
    
         <ingredients>egg whites</ingredients> 
         <quantity> 2 </quantity> 
    
         <ingredients>Amaretto</ingredients> 
         <quantity> 2 cl </quantity> 
    
        </dessert> 
    
    </recipes>