如何将相同的元素名称用于不同的目的(在XML和DTD中)?
我想为此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
<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)*>