我想在DTD中描述一个元素 MYELEMENT ,它必须由 elementA , elementB 和任何其他元素。为此我尝试了语法:
<!ELEMENT MYELEMENT (elementA | elementB | ANY)*>
但是当elementA或elementB以外的元素出现时,这不起作用。有人可以帮助DTD使用正确的语法吗?
可以使用XSD架构完成吗?
此致
答案 0 :(得分:0)
当你说“MYELEMENT ......必须由elementA,elementB和任何其他元素组成”时,你的意思是
elementA
,elementB
或其他任何内容。或
elementA
的孩子,至少有一个名为elementB
的孩子,并且可能还有其他孩子。或
elementA
的孩子,一个名为elementB
的孩子,任何一个顺序,也可能有其他孩子。如果在DTD中关键字ANY
是一种通配符,它匹配任何元素而不管名称,那么您显示的内容模型将匹配可能性(A)。但是,这不是关键字的含义,因此您显示的声明并不能达到您想要的效果:您提供的声明只是意味着任何MYELEMENT的出现都可能包含零个或多个元素,只要MYELEMENT的每个子节点都被命名为elementA
或elementB
或ANY
。
如果(A)是您想要的,则根本不需要指定elementA
或elementB
;你需要的只是一个匹配任何元素的通配符。 DTD没有这样的通配符,但如果您不介意允许字符数据以及子元素,则声明
<!ELEMENT MYELEMENT ANY >
接近你的规格。在XSD中,您将使用xsd:any
通配符。
如果你想要的是(B)或(C),那么XSD 1.0可以接近;您可以使用带有namespace="##other"
的通配符来允许您命名的元素以及不同命名空间中的任何元素。
如果订单没有任何意义,如果指定任意序列,您会发现内容模型更容易指定。 (当传递信息时,变量序列是必要的;当它不传达信息时,它只会使生活变得复杂并打开一个隐蔽的通道。)