Могу ли я сослаться на внешний DTD для структуры ELEMENT в DTD? - PullRequest
4 голосов
/ 07 июня 2011

Можно ли определить 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 с внешними ссылками.

1 Ответ

8 голосов
/ 07 июня 2011

Да, и вы очень близки со своим примером. Вам просто нужно сослаться на параметры объекта . Вот пример 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>
...