我正在向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的限制吗?
答案 0 :(得分:1)
简短的答案是,使用DTD语法获得所需的内容并不容易。
要将重复次数限制为一个特定的数字,您必须执行以下操作:
<!ELEMENT root
(p,
(p,
(p,
(p)?)?)?)
>
<!ELEMENT p EMPTY >
这适用于您的特定情况,但是您可以看到,如果您的要求更加复杂,则开始变得不可行。
通常,这种约束最好通过Schematron来完成,这使检查这些约束变得容易。