DITA DTD,允许相同的元素互相

时间:2019-03-08 13:00:15

标签: dtd dita

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

我想要的是在同一个实体元素内允许一个p元素多于一个,但是最多四个。

用户在一个textcont元素内必须具有一个P元素,总共最多四个。

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

  

sect.mod:非确定性内容模型。元素p的实例可以同时匹配内容模型中的两个或多个令牌。

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

有没有办法写这个,所以我不会得到错误-基于最少1个p元素,最多4个p元素?

还是我必须使用

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

就此而言,这可能是建立DTD的限制吗?

1 个答案:

答案 0 :(得分:1)

简短的答案是,使用DTD语法获得所需的内容并不容易。

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

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

<!ELEMENT p EMPTY >

这适用于您的特定情况,但是您可以看到,如果您的要求更加复杂,则开始变得不可行。

通常,这种约束最好通过Schematron来完成,这使检查这些约束变得容易。