DTDを別ファイルにして共有することができる。DTDの内容を外部のファイルにしたものは、外部サブセットと呼ばれる。
内部サブセット(internal subset)
sample.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE music[
<!ELEMENT music (rock+)>
<!ELEMENT rock (name,album?,price,description,img)>
<!ATTLIST rock id CDATA #REQUIRED>
<!ATTLIST rock from (japan|others) "japan">
<!ELEMENT name (#PCDATA)>
<!ELEMENT album (#PCDATA)>
<!ELEMENT price (yen|pond)>
<!ELEMENT yen (#PCDATA)>
<!ELEMENT pond (#PCDATA)>
<!ELEMENT description (#PCDATA|em)*>
<!ELEMENT em (#PCDATA)>
<!ELEMENT img EMPTY>
<!ENTITY cgroup "all in the mind">
]>
<music>
・・・
</music>
外部サブセット(exteral subset)
sample.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE music SYSTEM "dtdSample.dtd">
<music>
・・・
</music>
dtdSample.dtd(拡張子が変更されている点に注意)
<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT music (rock+)>
<!ELEMENT rock (name,album?,price,description,img)>
<!ATTLIST rock id CDATA #REQUIRED>
<!ATTLIST rock from (japan|others) "japan">
<!ELEMENT name (#PCDATA)>
<!ELEMENT album (#PCDATA)>
<!ELEMENT price (yen|pond)>
<!ELEMENT yen (#PCDATA)>
<!ELEMENT pond (#PCDATA)>
<!ELEMENT description (#PCDATA|em)*>
<!ELEMENT em (#PCDATA)>
<!ELEMENT img EMPTY>
<!ENTITY cgroup "all in the mind">
外部サブセット使う構文
<!DOCTYPE ルート要素名 SYSTEM "DTDファイルのURI">