如何编写DTD避免元素顺序?

时间:2013-01-27 21:12:02

标签: xml dtd

我想验证以下XML。分支机构可以没有或多个经理和/或会计师。他们的订单是随机的。我试过的内容如下:

 <!ELEMENT branch (office, manager*, accountant*)>

但我收到错误,我知道上面的陈述是严格的命令。我怎样才能避免经理和会计师的命令。

XML:

<branch name = "south">
<office>
    <addr>St. 32, Downtown</addr>
</office>
<manager>
    <username>
        knitemorgan
    </username>
</manager>
<accountant>
    <username>
        johnsmith
    </username>
</accountant>
<manager>
    <username>
        jenifer
    </username>
</manager>
<accountant>
    <username>
        fclark
    </username>
</accountant>
   <branch>
  <branch name = "north">
<office>
    <addr>St. 328, Downtown</addr>
</office>
<accountant>
    <username>
        rogerbentley
    </username>
</accountant>
<manager>
    <username>
        wendymaria
    </username>
</manager>
    <branch> 

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

<!ELEMENT branch (office,(manager|accountant)*)>

这意味着只有一个office后跟零个或多个manageraccountant

由于manager,订单与accountant|无关。

答案 1 :(得分:0)

您可能不知道内容模型可以嵌套在其中的模型。所以这样的事情应该有用

<!ELEMENT branch (office, (manager | accountant )*) > 

但是,作为一项规则,设计不好不将重复元素分组到不同的容器元素中:如果这样做,您会发现处理更容易管理。

<!ELEMENT branch (office, staff) >
<!ELEMENT staff (manager|accountant)*>