🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.text.xml
Article #9819

Re: Localisation du DTD

#9819
From: Jean-Pierre Briand
Date: Tue, 06 Feb 2001 11:40
46 lines
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-mail
References: <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