In fact, you can use both internal and external DTDs at the same time by using these forms of the <!DOCTYPE> element: <!DOCTYPE rootname SYSTEM URL [ DTD ]> for private external DTDs, and <!DOCTYPE rootname PUBLIC FPI URL [ DTD ]> for public external DTDs. In this case, the external DTD is specified by URL and the internal one by DTD . Here's an example in which I've removed the <PRODUCT> element from the external DTD ch03_10.dtd: <!ELEMENT DOCUMENT (CUSTOMER)*> <!ELEMENT CUSTOMER (NAME,DATE,ORDERS)> <!ELEMENT NAME (LAST_NAME,FIRST_NAME)> <!ELEMENT LAST_NAME (#PCDATA)> <!ELEMENT FIRST_NAME (#PCDATA)> <!ELEMENT DATE (#PCDATA)> <!ELEMENT ORDERS (ITEM)*> <!ELEMENT ITEM (PRODUCT,NUMBER,PRICE)> <!ELEMENT NUMBER (#PCDATA)> <!ELEMENT PRICE (#PCDATA)> Now I'll specify that I want to use this external DTD in the document's <!DOCTYPE> element and then also add square brackets, [ and ] , to enclose an internal DTD: <?xml version = "1.0" standalone="no"?> <!DOCTYPE DOCUMENT SYSTEM "ch03_10.dtd" [ . . . ]> <DOCUMENT> <CUSTOMER> <NAME> <LAST_NAME>Smith</LAST_NAME> <FIRST_NAME>Sam</FIRST_NAME> </NAME> <DATE>October 15, 2003</DATE> <ORDERS> <ITEM> <PRODUCT> <PRODUCT_ID> 198348209 </PRODUCT_ID> </PRODUCT> <NUMBER>8</NUMBER> <PRICE>.25</PRICE> </ITEM> . . . <ITEM> <PRODUCT> <PRODUCT_ID> 198348206 </PRODUCT_ID> </PRODUCT> <NUMBER>6</NUMBER> <PRICE>.50</PRICE> </ITEM> </ORDERS> </CUSTOMER> </DOCUMENT> Next, I add the declaration of the <PRODUCT> element to the internal part of the DTD, like this: <?xml version = "1.0" standalone="no"?> <!DOCTYPE DOCUMENT SYSTEM "ch03_10.dtd" [ <!ELEMENT PRODUCT (PRODUCT_ID)> <!ELEMENT PRODUCT_ID (#PCDATA)> ]> <DOCUMENT> <CUSTOMER> <NAME> <LAST_NAME>Smith</LAST_NAME> <FIRST_NAME>Sam</FIRST_NAME> </NAME> <DATE>October 15, 2003</DATE> <ORDERS> <ITEM> <PRODUCT> <PRODUCT_ID> 198348209 </PRODUCT_ID> </PRODUCT> <NUMBER>8</NUMBER> <PRICE>.25</PRICE> </ITEM> . . . <ITEM> <PRODUCT> <PRODUCT_ID> 198348206 </PRODUCT_ID> </PRODUCT> <NUMBER>6</NUMBER> <PRICE>.50</PRICE> </ITEM> </ORDERS> </CUSTOMER> </DOCUMENT> And that's all it takes; now this DTD uses both internal and external parts .
|