我可以定义一个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中定义的。
答案 0 :(得分:8)
是的,你和你的榜样非常接近。您只需要引用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>