DITA DTD,允许相同的元素在彼此之后

DITA DTD, allow same element after each other

我正在向我们的 DITA DTD 添加一些元素(基于 dita 1.2 的 DTD 自定义)

我想要的是允许一个 p 元素在同一个实体元素内一个接一个地出现,但最多四次。

用户在 textcont-element 中必须有 1 个 P 元素,总共最多 4 个。

当使用下面的 DTD 时,我得到:

sect.mod: Non deterministic content model. An instance of element p could simultaneously match two or more tokens in the content model.

<!ENTITY % textcont.content
  "(%p;,
  %p;?,
  %p;?,
  %p;?)
">

有没有一种方法可以这样写,这样我就不会收到错误 - 基于最少 1 个 p 元素,最多 4 个 p 元素?

或者我必须使用

<!ENTITY % textcont.content
  "(%p;,(%p;)*)">

难道这是构建 DTD 的限制,对此?

简短的回答是用 DTD 语法得到你想要的东西并不容易。

要将重复次数限制为特定次数,您必须执行以下操作:

<!ELEMENT root 
   (p, 
     (p, 
       (p,
         (p)?)?)?)
>

<!ELEMENT p EMPTY >

这适用于您的具体情况,但您可以看到,如果您的要求更复杂,它就会开始变得不可行。

一般来说,这种约束最好通过 Schematron 来完成,这使得检查这类约束变得容易。