OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Referring to external DTD's



RamMohan wrote, in HTML format (naughty! use plain text):
> I want to refer an external DTD in the current DTD. 
> [...]
> <!ELEMENT secondroot( ****Here I want the firstroot of
>      the first.dtd****)

The example you gave is problematic because the text of the included
document, except for the text declaration at the top, is going to go in
there, and you cannot have an <!ELEMENT> declaration inside another
<!ELEMENT> declaration.

Also, you have <!DOCTYPE> in your DTD. <!DOCTYPE> is something that goes in
an XML document entity, not in a DTD. Do this instead:

first.dtd:
<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT firstroot (child1, child2) >

second.dtd:
<?xml version="1.0" encoding="utf-8"?>
<!ENTITY % firstDTD SYSTEM "first.dtd">
%firstDTD;
<!ELEMENT secondroot( firstroot )>

doc.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE secondroot SYSTEM "second.dtd" [
  <!ELEMENT child1 (#PCDATA)>
  <!ELEMENT child2 (#PCDATA)>
]>
<secondroot>
  <firstroot>
     <child1/><child2/>
  </firstroot>
</secondroot>

Note that since child1 and child2 were referenced in the document, I had to
declare them to maintain validity. I put these declarations in the internal
subset, but I could have just as easily put them in either of the DTD files.


   - Mike
____________________________________________________________________
Mike J. Brown, software engineer at            My XML/XSL resources: 
webb.net in Denver, Colorado, USA              http://skew.org/xml/