Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 所需的标签可以是随机顺序,只能出现一次_Xml_Dtd - Fatal编程技术网

Xml 所需的标签可以是随机顺序,只能出现一次

Xml 所需的标签可以是随机顺序,只能出现一次,xml,dtd,Xml,Dtd,我想为XML文件定义DTD,如下所示: <!ELEMENT item (title | link | description | author? | pubDate?)*> <!ELEMENT item (title | link | description | author? | pubDate?)> <!ELEMENT item (title, link, description, author?, pubDate?)> 项目标签包括标题标签、链接标

我想为XML文件定义DTD,如下所示:

<!ELEMENT item (title | link | description | author? | pubDate?)*>
<!ELEMENT item (title | link | description | author? | pubDate?)>
<!ELEMENT item (title, link, description, author?, pubDate?)>
项目标签包括标题标签、链接标签和描述标签;这些标签是必需的,只能出现一次,但可以按任何顺序排列。author标记和pubDate标记是可选的

在我的DTD中,我写道:

<!ELEMENT item (title | link | description | author? | pubDate?)*>
<!ELEMENT item (title | link | description | author? | pubDate?)>
<!ELEMENT item (title, link, description, author?, pubDate?)>
我必须在标题标签、链接标签和描述标签之间进行选择

如果我这样写:

<!ELEMENT item (title | link | description | author? | pubDate?)*>
<!ELEMENT item (title | link | description | author? | pubDate?)>
<!ELEMENT item (title, link, description, author?, pubDate?)>
我必须遵守命令


那么我该如何编写DTD呢?

不幸的是,没有一个好的简写法来表示元素在DTD中可以是任意顺序的,因此您必须写出标题、链接和描述的所有组合,并将它们以子序列的形式组合在由|分隔的序列中,其功能如下:

<!ELEMENT item ( ( 
   (title,link,description)|
   (link,description,title)|
   (description,title,link)|
   (title,description,link)|
   (description,link,title)|
   (link,title,description) ), author?, pubDate?)>

如果你想让author和pubDate也出现在任何地方,你必须创建这五个标记的所有可能组合

i-alarmed-alien是正确的,您需要指定所有可能的内容模型组合,但给出的示例并非如此。这意味着,如果不向前看,XML处理器就无法知道匹配的是哪个模型

下面是一个确定性示例:

<!ELEMENT item ((
                (title, ((link,description)|(description,link)))|
                (link, ((title,description)|(description,title)))|
                (description, ((link,title)|(title,link)))
                ),author?,pubdate?)>
下面是另一个答案,对决定论有更好的解释: