2011-06-06 78 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