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

XSL/XSLT/XPATH XML Discussion :

parser des vcards en xslt


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Par défaut parser des vcards en xslt
    Bonjour,

    j'ai besoin d'extraire des champs de vcards qui sont incluses dans des fichiers xml.
    Mes données ont cette allure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <entity>
    <![CDATA[BEGIN:VCARD
    VERSION:3.0
    FN:Alain Dupont
    N:Dupont, Alain
    ORG:Association abcd
    END:VCARD ]]>
    </entity>
    J'aurais besoin d'extraire :
    Alain Dupont (Association abcd)
    Sachant qu'il peut y avoir bien d'autres champs, et dans n'importe quel ordre, avec ou sans sauts de ligne.
    Ma contrainte est d'utiliser xslt 1.0.
    Actuellement j'utilise une très longue suite d'instructions qui coupent peu à peu la chaine avec substring-before:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <xsl:variable name="temp" select="$aftername1" />
    		<xsl:variable name="aftername2">
    			<xsl:choose>
    				<xsl:when test="contains($temp, 'N:')  ">
    					<xsl:value-of select="substring-before($temp, 'N:')" />
    				</xsl:when>
    				<xsl:otherwise>
    					<xsl:value-of select="$temp" />
    				</xsl:otherwise>
    		</xsl:choose>
    </xsl:variable>
    Mais cette solution marche mal, elle pose une contrainte sur l'ordre des champs et ne marche pas quand j'ai des indications de format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N;ENCODING=8BIT;CHARSET=UTF-8;LANGUAGE=fr-FR:Dupont Alain

    Merci si vous avez des idées.

  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
    Bonjour,

    Mon idée, ce serait de confier l'analyse de cet élément à autre chose que XSLT ! Un petit programme Java ou C# tout simple, par exemple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Par défaut
    Le problème c'est que compte tenu de l'architecture du système où ce script xslt est exécuté je n'ai pas le trop choix.
    Je pourrais laisser la vcard telle quelle dans la page web et la passer dans une expression régulière en javascript mais cela pose un problème : si javascript est désactivé (accessibilité), cela ne donne pas un balisage acceptable.
    J'ai trouvé en ligne (http://suda.co.uk/projects/X2V/) la transformation inverse :
    http://suda.co.uk/projects/microform...html2vcard.xsl
    Il me faudrait vcardtoxhtml.xsl ou même vcardtohcard.xsl.
    http://microformats.org/wiki/hcard-fr
    Si ce n'est pas faisable effectivement il me faudra essayer de prendre le problème autrement.

  4. #4
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Il y a une submission à w3c pour représenter vCard en rdf:
    http://www.w3.org/TR/vcard-rdf/

    On appréciera plus la virtue de markup tenant compte la maturité et disponibilité de parseur quoique non-spécialisé.

    Si on regarde le xsl que vous posez la réference qui fait une transformation en brut force, c'est bien compliqué et c'est bien évident pour faire respecter toutes les complications qui peuvent être là dedans en général.

    Si c'est fait côté serveur, vous pouvez considérer faire xsl extension branchant le travail avec une méthode java ou d'autre. Les façons de faire xsl extension sont assez matures, bien documentées et faciles à trouver.

    Ce qui manque dans la chaîne c'est un parseur spécialisé pour parser vCard document pour faciliter le travail. Je pense il va venir nombreux bientôt. Je peux vous suggérer de voir si ce projet vous porte soulagement de la besogne.
    http://code.google.com/p/ez-vcard/

    En somme, utilsez xsl extension pour faire appeler à une methode avec l'argument de celui d'entity CDATA. La méthode utilse ev-vcard pour le parser et sortir la donnée désirée.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Par défaut
    Merci pour ces réponses.
    Mes données XML sont régies par le standard IEEE (learning object metadata) et le type de l'élément concerné est "vCard, as defined by IMC vCard 3.0 (RFC 2425, RFC 2426)".
    Je pense que ce standard ne changera pas pour les 10 ans à venir... Donc même si un binding rdf apparaît cela ne résoudra pas mon problème.
    Le sript xslt est exécuté tantôt côté serveur, tantôt côté client. Il s'agit en effet d'une application internet riche avec un "fallback" pour l'accessibilité. C'est ce qui me limite à xslt 1.0 sans pouvoir utiliser d'extension ni de language procédural.
    Donc pour l'instant ce que je veux faire m'a l'air tout bonnement impossible, à moins que quelqu'un de très doué sur un plan logique arrive à écrire un algorithme en utilisant seulement l'outillage xslt 1.0.

  6. #6
    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
    C'est tout à fait possible, XSLT 1.0 étant Turing-Complete.

    Par contre, c'est sans doute atrocement compliqué, abominablement impossible à maintenir, et la XSLT qui gèrerait tout ça serait probablement immense, genre un bon mégaoctet au moins... Ce qui risque de poser des problèmes d'échelle.
    ... En fait, peut-être que c'est pas possible, en y réfléchissant mieux.

    Mais si je devais essayer, je ferais un programme qui transcrit une analyse de chaîne de caractère, en langage XSLT. Au lieu d'écrire la XSLT moi-même.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Par défaut
    Bon. Merci pour vos avis détaillés.
    je pense que je vais prendre le problème autrement : je vais passer un paramètre "parsevcard" au script, défaut à false.
    Côté serveur je mettrai ce paramètre à true et il transformera la vcard en html avec des expressions régulières en XSLT2.0.
    Côté client le xslt ne fera rien et c'est javascript qui parsera la vcard avec https://github.com/mattt/vcard.js/blob/master/vcard.js

Discussions similaires

  1. Librairie java pour parser des expressions XSLT
    Par daytona955 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 26/03/2007, 09h46
  2. Serait il possible de parser des ficheirs xml avec c++ ,
    Par jlassira dans le forum Bibliothèques
    Réponses: 11
    Dernier message: 04/01/2006, 12h58
  3. Réponses: 2
    Dernier message: 04/08/2005, 21h37
  4. parser des fichier .xml en perl
    Par djibril dans le forum Modules
    Réponses: 13
    Dernier message: 18/05/2004, 17h08
  5. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19

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