Xml 用任意和必需的元素声明DTD元素

Xml 用任意和必需的元素声明DTD元素,xml,xsd,xsd-validation,dtd,Xml,Xsd,Xsd Validation,Dtd,我想在DTD中描述一个元素MYELEMENT,它必须由elementA、elementB和任何其他元素组成。为此,我尝试了以下语法: <!ELEMENT MYELEMENT (elementA | elementB | ANY)*> 但当元素A或元素B以外的元素出现时,这不起作用。有人可以帮助您使用DTD的正确语法吗 这可以使用XSD模式来完成吗 当你说“MYELEMENT…必须由elementA、elementB和任何其他元素组成”时,你的意思是 (A) MYELEMENT

我想在DTD中描述一个元素MYELEMENT,它必须由elementAelementB任何其他元素组成。为此,我尝试了以下语法:

<!ELEMENT MYELEMENT (elementA | elementB | ANY)*>

但当元素A或元素B以外的元素出现时,这不起作用。有人可以帮助您使用DTD的正确语法吗

这可以使用XSD模式来完成吗

当你说“MYELEMENT…必须由elementA、elementB和任何其他元素组成”时,你的意思是

  • (A) MYELEMENT的出现可能没有或有更多的孩子;每个子级可以命名为
    elementA
    elementB
    ,或其他任何名称

  • (B) MYELEMENT的每次出现都应该至少有一个子元素名为
    elementA
    ,至少有一个子元素名为
    elementB
    ,并且可能还有其他子元素

  • (C) MYELEMENT的每次出现都应该有一个子元素名为
    elementA
    ,一个子元素名为
    elementB
    ,并且可以有其他子元素
如果在DTD中,关键字
ANY
是一种通配符,与任何元素匹配,而不考虑名称,那么您显示的内容模型将匹配可能性(a)。但是,这不是关键字的意思,因此您显示的声明并不是您想要的:您给出的声明仅仅意味着MYELEMENT的任何出现都可能包含零个或多个元素,只要MYELEMENT的每个子元素都被命名为
elementA
elementB
any

如果(A)是您想要的,则根本不需要指定
elementA
elementB
;您只需要一个匹配任何元素的通配符。DTD没有这样的通配符,但是如果您不介意允许字符数据和子元素,声明

<!ELEMENT MYELEMENT ANY >

在XSD中,您将使用
XSD:any
通配符

如果您想要的是(B)或(C),那么XSD1.0可以接近;您可以使用带有
namespace=“###other”
的通配符来允许您命名的元素以及其他命名空间中的任何元素

如果顺序没有任何意义,那么如果指定任意序列,您会发现更容易指定内容模型。(当变量序列传递信息时,它是必要的;当它不传递信息时,它只会使生活复杂化并打开一个隐蔽的通道。)

当你说“MYELEMENT…必须由elementA、elementB和任何其他元素组成”,你的意思是

  • (A) MYELEMENT的出现可能没有或有更多的孩子;每个子级可以命名为
    elementA
    elementB
    ,或其他任何名称

  • (B) MYELEMENT的每次出现都应该至少有一个子元素名为
    elementA
    ,至少有一个子元素名为
    elementB
    ,并且可能还有其他子元素

  • (C) MYELEMENT的每次出现都应该有一个子元素名为
    elementA
    ,一个子元素名为
    elementB
    ,并且可以有其他子元素
如果在DTD中,关键字
ANY
是一种通配符,与任何元素匹配,而不考虑名称,那么您显示的内容模型将匹配可能性(a)。但是,这不是关键字的意思,因此您显示的声明并不是您想要的:您给出的声明仅仅意味着MYELEMENT的任何出现都可能包含零个或多个元素,只要MYELEMENT的每个子元素都被命名为
elementA
elementB
any

如果(A)是您想要的,则根本不需要指定
elementA
elementB
;您只需要一个匹配任何元素的通配符。DTD没有这样的通配符,但是如果您不介意允许字符数据和子元素,声明

<!ELEMENT MYELEMENT ANY >

在XSD中,您将使用
XSD:any
通配符

如果您想要的是(B)或(C),那么XSD1.0可以接近;您可以使用带有
namespace=“###other”
的通配符来允许您命名的元素以及其他命名空间中的任何元素

如果顺序没有任何意义,那么如果指定任意序列,您会发现更容易指定内容模型。(当可变序列传递信息时,它是必要的;当它不传递信息时,它只会使生活复杂化,并打开一个隐蔽的通道。)