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

Abd*_*lah 8 xml xsd dtd

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

<root>

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

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

</root>
Run Code Online (Sandbox Code Playgroud)

你可以看到,该元素namecourse包含纯文本,但该元素namestudent复杂类型(第一姓,名).以下是DTD:

<!ELEMENT root (course|student)*>

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

<!ELEMENT course (name)>
Run Code Online (Sandbox Code Playgroud)

当我想验证它时,我得到一个错误,因为该课程的name结构与学生的结构不同name.

我的问题:

  • 如何在不name使用DTD而不是xml架构更改元素名称的情况下为此情况制定解决方案.

谢谢.

bob*_*nce 10

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

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

<!ELEMENT name (#PCDATA|lastname|firstname)*>
Run Code Online (Sandbox Code Playgroud)