我可以定义一个DTD,使其中的元素在外部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中定义的.
解决方法
是的,你和你的榜样非常接近.您只需要引用
parameter entities.这是一个3 DTD和XML实例的示例.我只将#PCDATA用于MessageHdr和MessageBody,但这可以是您定义的任何结构.
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>