IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Validation W3C avec xerces


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Par défaut Validation W3C avec xerces
    Bonjour, je suis en train de développer une application lourde dont l'une des fonctions et d'analysé le contenu d'une page html et d'en vérifier sa validité au W3C.
    Dans un premier temps je charge le contenu d'une page dont je donne l'adresse puis je l'enregistre dans un fichier html temporaire pour l'analyser.

    Pour cela j'utilise xerces dont voici le code que j'utilise (pour le moment)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DOMParser dp = new DOMParser();
    dp.setFeature("http://xml.org/sax/features/validation",false);
    dp.setFeature("http://apache.org/xml/features/dom/include-ignorable-whitespace",false);
    dp.parse("test.html");
    Ma page de test.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head><title>Titre</title></head>
    <body style="text-align:center; background-color:#000">
    <a href="lienr"><img src="/design/index.png" style="border:none"/></a>
    </body>
    </html>
    Le soucis est que lorsque j'ai la ligne du doctype j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.io.IOException: Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
    Alors que j'arrive à télécharger la dtd quand j'utilise mon navigateur web.

    Si je retire cette ligne pour la dtd je peux facilement parser ma page web et obtenir les infos que je veux.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par n1k00 Voir le message
    Le soucis est que lorsque j'ai la ligne du doctype j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.io.IOException: Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
    Alors que j'arrive à télécharger la dtd quand j'utilise mon navigateur web.
    Euh, ah bon ? Tu as de la chance, moi ça foire 9 fois sur 10.

    Ce qui n'a rien d'étonnant d'ailleurs, vu que c'est la DTD indiquée dans chaque document XHTML transitionnel du monde, et que des millions de parseurs s'amusent donc chaque seconde à aller la redemander, parce que par défaut ils vont chercher toutes les DTD externes qu'on leur indique.
    Rien d'étonnant à ce que le serveur du W3C ne tienne pas la charge.

    Vilains parseurs, vilains ! Au lit sans manger !

    Profite déjà du fait d'arriver à la télécharger, pour la sauvegarder quelque part sur ton disque dur. Puis, inclus-la comme ressource de ton programme (comme avec une icône ou un fichier de conf.)
    Puis, implémente une classe EntityResolver, qui à l'appel de resolveEntity où le systemId est "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", renvoie un InputSource construit avec un InputStream sur la version de cette DTD incluse dans ton programme : comme ça pas de connexion réseau et tout roule.
    Tant que tu y es, fais ça pour toutes les DTDs que tu risques d'utiliser.
    Enfin, indique à ton Parser d'utiliser cet EntityResolver.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Par défaut
    J'y avais penser au coup de télécharger les dtd nécessaire pour le transitionnal ou le strict mais j'aurais aimé quelque chose de plus générique pouvoir prendre en compte toutes les dtd possible

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ben -_-°. Le problème est que le serveur qui héberge cette DTD est surchargé.

    À la rigueur tu peux essayer d'aller fouiller dans le cache de Google au lieu de récupérer la DTD à l'URL indiquée, mais comme solution systématique je vois que ça.

    (Et puis, il faut croire que je suis seul au monde, mais je suis violemment opposé à l'idée que le monde entier, à chaque fois qu'une page XHTML est parsée, aille rechercher la même ressource réseau sur le même serveur au même endroit. Ça s'appelle un DDoS.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Par défaut
    Après recherche y a pas tant de fichier que ca à récupérer http://www.w3.org/TR/xhtml1/dtds.html . Je pense que je vais opter pour ta solution.

    Et comme toi je trouve ça con que pour un site internet les dtd soit chargé continuellement.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Par défaut
    C'est bon çà fonctionne en ayant les dtd en local maintenant reste plus qu'à faire en sorte que xerces accepte de lire mes fichiers même si y a des erreurs (Fatal errors ou Errors) histoire que le traitement soit fait quand même.

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    À ta place je corrigerais les XML au lieu d'essayer de convaincre Xerces de faire avec.

    Un XML est bien formé ou il ne l'est pas. S'il ne l'est pas, on ne sait pas trop ce que c'est que ce truc, mais un traitement dédié à du XML ne peut pas marcher dessus.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Par défaut
    Le problème c'est que j'ai pas la main sur les fichiers dont je télécharge le contenu vu que je télécharge des pages web pour ensuite les analysées tel qu'elles sont sur le net. J'ai essayé le features qui permet de continuer après une fatale error mais ça semble pas être pris en compte. Et vu le paquet de site qui sont pas valide...les modifier à la "main" ca risque d'être amusant

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Normalement Xerces ignore très bien les erreurs de validation si on lui demande de ne pas valider. Le problème, c'est les erreurs fatales, principalement causées par un document mal formé.

    Corriger, t'es pas obligé de le faire à la main, mais c'est pas la peine de compter sur un parseur XML. Il existe peut-être des outils pour ça. Ou peut-être qu'au lieu d'un parseur XML, un parseur HTML ferait l'affaire. J'en sais rien, c'est pas mon rayon.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Par défaut
    Ben j'ai utilisé xerces parce que je connais que celui la je vais tester voir si je trouve pas quelque chose de plus complaisant.

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Xerces est un parseur XML. Un parseur XML ne tolère que le XML.

    Pour des pages HTML avec des erreurs ou non-XML, il faut autre chose, ou alors transformer en XML d'abord.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pour la dtd il est normal que tu n'arrive pas à la télécharger. Je n'ai plus le document sous la main, mais le w3c est clair à ce sujet: Tout client qui n'est pas un browser web se voit refuser la page (503). Pourquoi? Parce que des tonnes d'applications mal conçues dans le monde demandent cette page, donc un jour il n'en pouvaient plus techniquement et financièrement (plusieurs centaines de gigas / jour bouffé par les dtd/xsd) et ont prit cette décision pour casser les mauvais clients. Il a toujours été clair de leur part que les dtd / xsd sont à télécharger une fois pour toute et à inclure dans ton application. Sinon, comment ton validateur fonctionnera le jour où il doit fonctionner sur une machine sans connexion internet??

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Sinon, comment ton validateur fonctionnera le jour où il doit fonctionner sur une machine sans connexion internet??
    Avec un site en local ou alors en chargeant directement un fichier html/php

  14. #14
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je voulais dire que si t'as pas les DTD en local, il ne marchera pas car il ne saura pas les charger C'est donc une bonne pratique de les fournir en local!

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Par défaut
    Ah ok ^^; ben j'ai réglé ce soucis je les ai prise en local ca va plus vite effectivement

    La pour le moment je bloque sur cette histoire d'erreur fatal qui m'empêche de continuer mes traitements...et vu le peu de site valide sur le net c'est embêtant

  16. #16
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le problème de la validation xml, c'est qu'elle a "en gros" pour but de dire, le fichier et valide, ou pas voilà la première erreur. Vouloir détecter toutes les erreurs d'un fichier et surtout les rendres compréhensible, ça va bien au delà du boulot du parseur xml

    Notez que le w3c fournis le code source de son validator


    http://validator.w3.org/source/#tarball

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Par défaut
    Ah merci je vais jetter un oeil à tout ça.

    Oui donc pour la récupération des informations dans ma page xerces est pas forcément le plus adapté. J'ai trouvé aussi cela http://htmlparser.sourceforge.net/ que je dois tester.

  18. #18
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pour fait un outil de validation c'est pas adapté. Mais si ton but et d'avir un DOM pour extraires des informations, tu as htmlparser, nekohtml, jtidy et d'autres appli qui lisent des "mauvais" HTML et en font des arbres DOM tout propre pour utiliser l'API xml de java :p

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Par défaut
    Ok je vais me pencher sur ça et voir ce que fournis la W3C comme code

    Merci en tout cas

Discussions similaires

  1. [W3C] validation W3C avec un formulaire
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/02/2008, 13h31
  2. [W3C] Problème validation w3c avec html/javascript
    Par mademoisellem dans le forum Balisage (X)HTML et validation W3C
    Réponses: 22
    Dernier message: 31/01/2008, 16h19
  3. pb validation w3c avec js
    Par Emcy dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/02/2007, 16h36
  4. Validation DOM avec Xerces et StackOverfFlow exception
    Par safae dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 27/11/2006, 13h09
  5. [CSS] Pb De Validation W3c Avec Ma Feuille Css
    Par fredylover dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 08/05/2006, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo