我正在为DITA DTD添加一些元素(基于dita 1.2的DTD定制)
我想要的是在同一个实体元素中允许p元素在一个接一个之后,但最多允许四次。
用户必须在textcont元素中有一个P元素,总共最多4个元素。
当使用下面的DTD时,我得到:
sect.mod:非确定性内容模型。元素p的实例可以同时匹配内容模型中的两个或更多个标记。
<!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 >
这适用于您的具体情况,但您可以看到,如果您的要求更复杂,它将开始变得不可行。
通常,这种约束最好通过Schematrons完成,这样可以很容易地检查这些类型的约束。