• # idée

    Posté par  (site web personnel) . Évalué à 2.

    Ben rajoute le DOCTYPE au début du fichier ^^
    • [^] # Re: idée

      Posté par  . Évalué à 1.

      J'adore ton humour :-)
      Qqn m'aurait posé cette question, j'aurais répondu de la même manière. Dans un 1er temps.

      Ensuite, j'aurais fait une réponse sérieuse ;-)
      • [^] # Re: idée

        Posté par  (site web personnel) . Évalué à 2.

        Bah c'est pas si bête que ca, c pas bien compliqué en Java d'ajouter une ligne dans un fichier... Et si la classe qui "valide" tiens absolument à trouver cette info pour valider, je ne vois même pas d'autre solution... Elle ne te paraît peut être pas élégante mais elle a l'avantage d'être simple et rapide à mettre en oeuvre.
        • [^] # Re: idée

          Posté par  . Évalué à 1.

          Merci pour tes précisions.

          Avant de me lancer dans cette solution, que je ne trouve effectivement pas élégante, je cherchais surtout à savoir s'il y avait mieux.

          Quant à la simplicité et la rapidité de la mise en oeuvre, c'est vite dit.
          En fait, les XML que je reçois sont susceptibles d'avoir une déclaration DOCTYPE ou pas. Donc c'est un peu chiant à gérer.

          Ne me demande pas pourquoi c'est comme ça, je n'ai pas la maitrise de cette partie là :-(
          • [^] # Re: idée

            Posté par  (site web personnel) . Évalué à 2.

            ouahou, va falloir que t'introduise un if pour gérer les 2 cas, effectivement c'est peut être trop compliqué en fin de compte ;)
            • [^] # Re: idée

              Posté par  (site web personnel) . Évalué à 1.

              Sinon, sur ce lien [http://java.sun.com/webservices/docs/1.0/tutorial/doc/JAXPSAX13.htm(...)] il semble qu'ils expliquent comment fournir un "schema" à ton parser. Et ils précisent qu'une DTD est considérée comme un schéma :

              There are multiple schema-definition languages, including RELAX NG, Schematron, and the W3C "XML Schema" standard. (Even a DTD qualifies as a "schema", although it is the only one that does not use XML syntax to describe schema constraints.) However, "XML Schema" presents us with a terminology challenge. While the phrase "XML Schema schema" would be precise, we'll use the phrase "XML Schema definition" to avoid the appearance of redundancy.



              Plus bas ils expliquent comment faire l'association :

              You can also specify the schema file in the application, using code like this:


              static final String JAXP_SCHEMA_SOURCE =
              "http://java.sun.com/xml/jaxp/properties/schemaSource(...)";

              ...
              SAXParser saxParser = spf.newSAXParser();
              ...
              saxParser.setProperty(JAXP_SCHEMA_SOURCE,
              new File(schemaSource));


              Il doit y avoir des options equivalentes pour un DOMParser. Il faut que ton implémentation du parseur supporte la propriété.

              Voila, en espérant que cela t'aide.

              Bon courage.
              • [^] # Même problème

                Posté par  . Évalué à 1.

                J'ai le même soucis, je souhaite valider un document XML en indiquant dynamiquement la DTD à utiliser.

                J'ai essayé la solution donnée ci dessus, mais j'obtiens un problème lors de l'appel de la méthode setProperty de la manière suivante :

                setProperty( "http://java.sun.com/xml/jaxp/properties/schemaSource", new File("monFichierDtd"));

                Je dois sûrement mal appeler cette méthode, mais je n'ai pas reçu à trouver de doc sur le net. Je ne sais pas exactement quelle propriété je dois initialiser...

                Avez vous de nouvelles pistes ?
                • [^] # Re: Même problème

                  Posté par  . Évalué à 1.

                  Je n'ai pas essayé ce que propose B r u n o car c'est arrivé trop tard. Par contre je sais faire ce que tu recherches.

                  C'est assez facile à faire, mais il y a une contrainte : ton XML doit avoir une déclaration DOCTYPE. Peu importe ce qu'elle contient, mais il doit y en avoir une.

                  Voici donc ce que j'ai fait -- en espérant que ça corresponde à que tu cherches.

                  Mon appli reçoit des XML validant différentes DTD. Je sais dire quelle DTD s'applique à tout XML reçu (c'est impératif pour la suite).

                  Pour parvenir à tes fins, il faut implémenter un EntityResolver dans lequel tu associes dynamiquement la bonne DTD. L'EntityResolver (va voir la javadoc qui va bien) est utilisé par ton parser XML en phase "pré", c'est-à-dire avant même de parser ton XML. Le but étant d'instancier les entités présentes dans ton XML.

                  Voici mon implémentation d'EntityResolver (que j'ai appelé DTDResolver) :

                  public class DTDResolver implements EntityResolver {

                  // the DTD file
                  private String DTD = null;

                  // constructor
                  public DTDResolver(String DTDfile) {
                  DTD = DTDfile;
                  }

                  public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
                  // substitute the DTD
                  // note it is correct behaviour to return null since this is the default fallback
                  return new InputSource(new FileInputStream(DTD));
                  }
                  }

                  A utiliser de cette manière (j'utilise JDOM donc tu pourrais avoir à l'adapter) :

                  // create the XML parser with validation on
                  SAXBuilder parser = new SAXBuilder(true);

                  // specify the Entity Resolver
                  parser.setEntityResolver(new DTDResolver(DTDfile));

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.