如何将相同的元素名称用于不同的目的(在XML和DTD中)?

如何将相同的元素名称用于不同的目的(在XML和DTD中)?,xml,xsd,dtd,Xml,Xsd,Dtd,我想为此xml文档创建DTD架构: <root> <student> <name> <firstname>S1</firstname> <lastname>S2</lastname> </name> </student> <course> <name

我想为此xml文档创建DTD架构:

<root>

    <student>
        <name>
            <firstname>S1</firstname>
            <lastname>S2</lastname>
        </name>
    </student>

    <course>
        <name>CS101</name>
    </course>

</root>

当我想要验证它时,我得到一个错误,因为课程的
名称
与学生的
名称
具有不同的结构

我的问题:

  • 如何在不使用DTD而不是xml模式更改元素
    name
    名称的情况下为这种情况制定变通解决方案。

谢谢。

对不起!这是DTD的主要限制之一:给定的元素名称始终具有相同的内容模型

您所能做的就是放弃对该特定元素的完全验证,并允许所有可能的内容:

<!ELEMENT name (#PCDATA|lastname|firstname)*>


谢谢@bobince,我将使用您编写的内容作为解决方法,它比XML模式更简单。使用PCDATA时,这是您能做的最好的方法,但如果这三种可能性都是元素,您可以获得更好的结果。考虑元素<代码> < P> < /代码>。元素
可以包含元素
,也可以包含元素
。我们可以指定这一点,但它不会与上下文相关(即,依赖于
的父项)<代码>。PCDATA必须作为混合内容或全部单独使用;不幸的是,这不可能是非此即彼的情况。
<!ELEMENT name (#PCDATA|lastname|firstname)*>