2011-06-02 88 views
3

比方说,我有以下XML:如何在DTD中定义具有不同父元素的同名元素?

<data> 
    <authors> 
    <author> 
     <name> 
     <first_name>Stephen</first_name> 
     <last_name>Baxter</last_name> 
     </name> 
    </author> 
    <author> 
     <name> 
     <first_name>Joe</first_name> 
     <last_name>Haldeman</last_name> 
     </name> 
    <author> 
    </authors> 
    <books> 
    <book> 
     <name>The Time Ships</name> 
    </book> 
    <book> 
     <name>The Forever War</name> 
    <book> 
    </books> 
</data> 

在我的DTD,我怎么会考虑的“名称”元素用于作者和书籍,可以有不同的子元素的事实 - 像这个?

<!ELEMENT name (#PCDATA|first_name,last_name)> 

回答

4

由于您的name元素混合内容(子元素或#PCDATA),你将有你的元素声明改成这样:

<!ELEMENT name (#PCDATA|first_name|last_name)*> 

这意味着,你会必须使用除DTD以外的内容来强制执行name包含#PCDATA一个first_name后跟一个last_name