【问题标题】:DITA DTD, allow same element after each otherDITA DTD,允许同一元素一个接一个
【发布时间】:2019-03-08 13:00:15
【问题描述】:

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

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

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

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

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

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

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

还是我必须使用

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

这可能是对构建 DTD 的限制吗?

【问题讨论】:

  • 考虑迁移到 Relax NG 语法。在这里你有更大的灵活性,你也可以直接在语法中包含 schematron 规则。

标签: dtd dita


【解决方案1】:

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

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

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

<!ELEMENT p EMPTY >

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

一般来说,这种约束最好通过 Schematrons 来完成,这样可以很容易地检查这些类型的约束。

【讨论】:

    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2012-03-31
    • 2011-09-23
    • 1970-01-01
    • 2012-07-14
    • 2020-04-23
    相关资源
    最近更新 更多