元素内部元素的 DTD

DTD for elements inside an element

我需要一个 DTD 来验证这样的 XML 文档:

<recipes>
     <recipe>
          <difficulty>2</difficulty>
          <people>4</people>
          <procedure>Break an egg and fry it</procedure>
          <ingredients>
               <ingredient>Egg</ingredient>
               <ingredient>...</ingredient>
          </ingredients>
     </recipe>
     ...
</recipes>

这是我的 DTD:

<!ELEMENT recipe(difficulty, people, procedure)>
<!ELEMENT difficulty #PCDATA>
<!ELEMENT people #PCDATA>
<!ELEMENT procedure #PCDATA>

不允许声明 <ingredients> 元素,因此 XML 文档不会被验证。如何修改我的 DTD 以实现我的目标?

我的想法是:

<!ELEMENT recipe(difficulty, people, procedure, ingredients)>
<!ELEMENT difficulty #PCDATA>
<!ELEMENT people #PCDATA>
<!ELEMENT procedure #PCDATA>

<!ELEMENT ingredients(ingredient)>
<!ELEMENT ingredient #PCDATA>

但我不确定这是正确的解决方案。

您使用 + 运算符表示您可以在另一个元素中包含多个同名元素。在这种情况下,它看起来像这样:

<!ELEMENT ingredients (ingredient+)>
<!ELEMENT ingredient (#PCDATA)>

完整的 DTD 可能如下所示:

<!ELEMENT recipes (recipe+)>
<!ELEMENT recipe (difficulty, people, procedure, ingredients)>
<!ELEMENT difficulty (#PCDATA)>
<!ELEMENT people (#PCDATA)>
<!ELEMENT procedure (#PCDATA)>
<!ELEMENT ingredients (ingredient+)>
<!ELEMENT ingredient (#PCDATA)>