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 来完成,这使得检查这类约束变得容易。
我正在向我们的 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 来完成,这使得检查这类约束变得容易。