Article View: fr.comp.text.xml
Article #9819Re: Localisation du DTD
From: Jean-Pierre Briand
Date: Tue, 06 Feb 2001 11:40
Date: Tue, 06 Feb 2001 11:40
46 lines
2838 bytes
2838 bytes
merci,
Alain Ketterlin wrote:
>
> Jean-Pierre Briand <briand.jean-pierre@wanadoo.fr> writes:
>
> > je voudrais que mon application Java, a priori autonome, lise et ecrive
> > ses donnees au format XML en se referant au DTD fourni dans le .jar de
> > l'application, donc disponible comme ressource relative au CLASSPATH et
> > non comme fichier ou URL.
>
> Il me semble qu'on peut utiliser resource://mon/package/mon.dtd (pas
> sur).
j'ai essaye plusieurs variantes autour de cette idee, sans succes :-(
En revanche j'ai trouve une solution qui me satisfait pour l'instant en
appelant setEntityResolver(monResolver) pour mon objet DocumentBuilder.
Ce resolver (monResolver) intercepte la recherche du DTD par un code du
type:
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException
{
if (systemId != null)
if (systemId.endsWith("monappli.dtd"))
{
return new
InputSource(this.getClass().getResourceAsStream("../resources/monappli.dtd"));
}
return null; // resolver par defaut
}
Remarques:
- Le choix de endsWith() pour la resolution du DTD permet d'etre laxiste
sur l'URL effectivement utilisee pour le specifier.
- Une declaration de type <!DOCTYPE racine SYSTEM "monappli.dtd">, i.e.
URI relative, fonctionne avec le code ci-dessus lors de l'appel a la
methode parse(String uri), mais echoue lors de l'appel a la methode
parse(InputStream instr). Et ceci qqsoit la facon d'ecrire le code de
resolveEntity() car le parser detecte qu'il ne peut resoudre une URI
relative a une stream interne, et ne tente pas la resolution. Il est
donc preferable d'ecrire un entete du style <!DOCTYPE racine SYSTEM
"http://sitebidon.com/monappli.dtd"> couple au code ci-dessus.
Technical Details
Message-ID:
<3A7FE2B0.3606F379@wanadoo.fr>Path:
arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!isdnet!wanadoo.fr!not-for-mailReferences:
<3A7FCF71.2A6649A0@wanadoo.fr> <wyelxcjdf4.fsf@polya.u-strasbg.fr>Show Full Headers
Complete Article Headers
X-Google-Language: FRENCH,ASCII-7-bit X-Google-Thread: 114f60,82f2faf1530a086f X-Google-Attributes: gid114f60,public X-Google-ArrivalTime: 2001-02-06 03:41:57 PST Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!isdnet!wanadoo.fr!not-for-mail From: Jean-Pierre Briand <briand.jean-pierre@wanadoo.fr> Newsgroups: fr.comp.text.xml Subject: Re: Localisation du DTD Date: Tue, 06 Feb 2001 12:40:32 +0100 Organization: Wanadoo, l'internet avec France Telecom Lines: 46 Message-ID: <3A7FE2B0.3606F379@wanadoo.fr> References: <3A7FCF71.2A6649A0@wanadoo.fr> <wyelxcjdf4.fsf@polya.u-strasbg.fr> NNTP-Posting-Host: mix-velizy-108-4-214.abo.wanadoo.fr Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: wanadoo.fr 981459714 9222 193.250.247.214 (6 Feb 2001 11:41:54 GMT) X-Complaints-To: abuse@wanadoo.fr NNTP-Posting-Date: 6 Feb 2001 11:41:54 GMT X-Mailer: Mozilla 4.5 [en] (Win98; I) X-Accept-Language: en