Tu crées (ça peut être en mémoire) un fichier qui
1) définit et inclus la DTD (le plus souvent comme une entité parametre externe)
2) définit et inclus ton document a valider, (le plus souvent comme une entité externe)
Et c'est ça que tu parses pour validation
Code :
<?xml version="1.0" standalone="no"?> <!DOCTYPE myroot [ <!ENTITY % mydtd SYSTEM "http://www.mysite.com/mydoc.dtd"> <!-- ou SYSTEM "./mydoc.dtd" etc --> <!ENTITY mydoc SYSTEM "http://www.mysite.com/mydoc.xml"> <!-- ou SYSTEM "./mydoc.xml" etc --> %mydtd; <!-- inclusion par appel comme entité systeme parametre --> ]> &mydoc; <!-- inclusion par appel comme entité systeme normale -->
|
La seule chose à laquelle il faut faire attention, c'est que myroot soit le bon nom de la racine du document xml.
Si on n'a pas accès au nom de la racine, on peut recourir à le technique suivante:
Code :
<?xml version="1.0" standalone="no"?> <!DOCTYPE dummyroot [ <!ELEMENT dummyroot ANY> <!ENTITY % mydtd SYSTEM "http://www.mysite.com/mydoc.dtd"> <!ENTITY mydoc SYSTEM "http://www.mysite.com/mydoc.xml"> %mydtd; ]> <dummyroot>&mydoc;</dummyroot>
|
Et il faut créér un nom d'élément pseudo racine dont on est sur qu'il n’apparaît pas comme nom d'élément de la dtd.
Bon, bien entendu, tout ça suppose que ta dtd n'a pas de déclaration initiale de <!DOCTYPE mais c'est assez habituel de nos jours, sauf à vouloir vivre dangereusement.
A+,
Message édité par gilou le 07-03-2011 à 11:11:02
---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --