Espacios de nombres en DTD
EJEMPLO Dado el siguiente documento XML (visto en el apartado espacios de nombres del tutorial de XML) bien formado, pero no validado, donde se utilizan dos espacios de nombres (XML Namespaces):
<?xml version="1.0" encoding="UTF-8"?>
<e1:ejemplo xmlns:e1="http://www.abrirllave.com/ejemplo1">
<e1:carta>
<e1:palo>Corazones</e1:palo>
<e1:numero>7</e1:numero>
</e1:carta>
<e2:carta xmlns:e2="http://www.abrirllave.com/ejemplo2">
<e2:carnes>
<e2:filete_de_ternera precio="12.95"/>
<e2:solomillo_a_la_pimienta precio="13.60"/>
</e2:carnes>
<e2:pescados>
<e2:lenguado_al_horno precio="16.20"/>
<e2:merluza_en_salsa_verde precio="15.85"/>
</e2:pescados>
</e2:carta>
</e1:ejemplo>
Se podría escribir dicho documento XML con una DTD interna como se muestra a continuación:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE e1:ejemplo [
<!ELEMENT e1:ejemplo (e1:carta, e2:carta)>
<!ATTLIST e1:ejemplo xmlns:e1 CDATA #FIXED "http://www.abrirllave.com/ejemplo1">
<!ELEMENT e1:carta (e1:palo, e1:numero)>
<!ELEMENT e1:palo (#PCDATA)>
<!ELEMENT e1:numero (#PCDATA)>
<!ELEMENT e2:carta (e2:carnes, e2:pescados)>
<!ATTLIST e2:carta xmlns:e2 CDATA #FIXED "http://www.abrirllave.com/ejemplo2">
<!ELEMENT e2:carnes (e2:filete_de_ternera, e2:solomillo_a_la_pimienta)>
<!ELEMENT e2:pescados (e2:lenguado_al_horno, e2:merluza_en_salsa_verde)>
<!ELEMENT e2:filete_de_ternera EMPTY>
<!ATTLIST e2:filete_de_ternera precio CDATA #REQUIRED>
<!ELEMENT e2:solomillo_a_la_pimienta EMPTY>
<!ATTLIST e2:solomillo_a_la_pimienta precio CDATA #REQUIRED>
<!ELEMENT e2:lenguado_al_horno EMPTY>
<!ATTLIST e2:lenguado_al_horno precio CDATA #REQUIRED>
<!ELEMENT e2:merluza_en_salsa_verde EMPTY>
<!ATTLIST e2:merluza_en_salsa_verde precio CDATA #REQUIRED>
]>
<e1:ejemplo xmlns:e1="http://www.abrirllave.com/ejemplo1">
<e1:carta>
<e1:palo>Corazones</e1:palo>
<e1:numero>7</e1:numero>
</e1:carta>
<e2:carta xmlns:e2="http://www.abrirllave.com/ejemplo2">
<e2:carnes>
<e2:filete_de_ternera precio="12.95"/>
<e2:solomillo_a_la_pimienta precio="13.60"/>
</e2:carnes>
<e2:pescados>
<e2:lenguado_al_horno precio="16.20"/>
<e2:merluza_en_salsa_verde precio="15.85"/>
</e2:pescados>
</e2:carta>
</e1:ejemplo>