验证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
元素是不合适的。 ingredients
(cocktail
)的父级必须与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
的部分也应在模型更新的appetizer
,maindish
,并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>