gpt4 book ai didi

element - 写入 DTD : How to achieve this children setup

转载 作者:行者123 更新时间:2023-12-04 06:57:32 25 4
gpt4 key购买 nike

元素 tasklist最多可以包含一个 title最多一个 description ,另外任何数字(包括 0)task任何顺序的元素。

天真的方法不适用,因为顺序无关紧要:

<!ELEMENT tasklist (title?, description?, task*) >

或者,我可以明确命名所有可能的选项:
(title, description?, task*) |
(title, task+, description?, task*) |
(task+, title, task*, description?, task*) |
(description, title?, task*) |
(description, task+, title?, task*) |
(task+, description, task*, title?, task*) |
(task*)

但是,编写非确定性规则很容易,而且它看起来像是通往最黑暗疯狂的直接途径。任何想法,如何更优雅地做到这一点?

不,XSD 或 RelaxNG 不是选项。我需要一个普通的、旧的 DTD。

最佳答案

这总结了您需要的内容:

<!ELEMENT tasklist (task*, ((title?, task*, description?) |
(description?, task*, title?)), task*)>
title 的替代品出现之前/之后 description .

然而 ,这不是确定性的内容模型,如 @13ren explains in his answer . [这是微软的另一个例子]( http://msdn.microsoft.com/en-us/library/9bf3997x(VS.71).aspx) .

简而言之

您的要求是拥有一个非确定性模型,因此,您的场景没有可能的有效 DTD。

备择方案

如果您设置一个简单的限制,要么 taskdescription如果两个 task 都必须是最后一个元素和 description提供,您可以使用此确定性 DTD 声明:
<!ELEMENT tasklist (
task*,
((title, task*, description?) |
(description, task*, title?))?
)>

例子:
<!-- Valid -->
<tasklist>
<task></task>
<task></task>
<task></task>
<title></title>
<task></task>
<description></description>
</tasklist>
<!-- Valid -->
<tasklist>
<title></title>
<task></task>
<task></task>
<task></task>
</tasklist>
<!-- Invalid
<tasklist>
<task></task>
<title></title>
<task></task>
<description></description>
<task></task>
</tasklist>
-->

或者,可能更自然地,强制执行 titledescription element 必须是第一个元素,并且都是 titledescription元素必须存在或不存在。
<!ELEMENT tasklist (
((title, task*, description) |
(description, task*, title))?,
task*
)>

例子:
<!-- Valid -->
<tasklist>
<title></title>
<task></task>
<description></description>
<task></task>
<task></task>
</tasklist>
<!-- Invalid
<tasklist>
<task></task>
<title></title>
<description></description>
<task></task>
<task></task>
</tasklist>

<tasklist>
<title></title>
<task></task>
<task></task>
<task></task>
</tasklist>
-->

除此以外

否则,您需要使用 RELAX NG,它允许使用非确定性模型。

关于element - 写入 DTD : How to achieve this children setup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2371458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com