2011-06-06 43 views
4

我可以定义一个DTD,使其中的元素在外部DTD中定义它们的结构吗? 我的意思是类似以下内容(这是我所知道的是在几个方面无效的例子,但希望会给你什么,我期待一个想法):我可以参考DTD中ELEMENT结构的外部DTD吗?

<?xml version="1.0" encoding="UTF-8"?> 
<!ENTITY % MessageHdr-DTD SYSTEM "./messagehdr.dtd"> 
<!ENTITY % MessageBody-DTD SYSTEM "./messagebody.dtd"> 
<!ELEMENT Message (MessageHdr, MessageBody)> 
<!ELEMENT MessageHdr (MessageHdr-DTD)> 
<!ELEMENT MessageBody (MessageBody-DTD)> 

这里的尝试是代表Message需要MessageHdr和MessageBody,但这两个元素是在外部引用的DTD中定义的。

回答

8

是的,你和你的例子非常接近。你只需要参考parameter entities。这里有一个3个DTD和一个XML实例的例子。我只使用#PCDATA代替MessageHdrMessageBody,但这可以是您定义的任何结构。

message.dtd

<!ENTITY % MessageHdr-DTD SYSTEM "./messagehdr.dtd"> 
<!ENTITY % MessageBody-DTD SYSTEM "./messagebody.dtd"> 
%MessageHdr-DTD; 
%MessageBody-DTD; 
<!ELEMENT Message (MessageHdr, MessageBody)> 

messagehdr.dtd

<!ELEMENT MessageHdr (#PCDATA)> 

messagebody.dtd

<!ELEMENT MessageBody (#PCDATA)> 

message.xml

<!DOCTYPE Message SYSTEM "message.dtd"> 
<Message> 
    <MessageHdr>header info</MessageHdr> 
    <MessageBody>body info</MessageBody> 
</Message> 
+0

非常好...我正在寻找的答案。我试了一下,它完美验证。谢谢。 – BitMask777 2011-06-07 16:46:30