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 :

Moteur de recherche XSL


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 67
    Points : 54
    Points
    54
    Par défaut Moteur de recherche XSL
    Bonjour;

    J'ai un document XML naratif qui représente un mélange XHTML pour le formatage (des balises <b>, <font>) et des balises XML propre a mon document et voici un exemple type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?xml version="1.0" encoding="iso-8859-1"?>
     
    <Polycopié
    	Module		="4"
    	Titre		="Généralités en Odontologie conservatrice"
    	Cours		="1"
    	Chapitre	="?"
    	DateTime	="21/11/2004 13:00"
    	Description	="?"
    >
    		<Partie
    		DateTime	="Début"
    		Description	="Court en une seule séance"
    		>
    			<Paragraphe Titre="Introduction">
    			L'<Important Type="mot nouveau" Non="true">odontologie conservatrice</Important> est une thérapeutique réalisée dans le but de conserver l'<Important>organe dentaire</Important>.
    			<Retour tir="no" espace="no"/><br/> Depuis ces 20 dernières années, la <Important Type="spécial">dentisterie conservatrice</Important> classique s'est développée dans différentes directions.
    			<Retour/>
    			La vrai conservation est obtenue à l'utilisation régulière de moyen moderne de <b>prévention</b>.
    			<Retour jump="no" />
    			Les nouveaux matériaux utilisés sont parfaitement <Important>esthétique</Important>, quasiment <b>invisible</b> et leurs indications se sont élargies pendant que nos connaissance sur les obturations classiques se sont concilédés.<Retour jump="no" />
    			Grâce à l'analyse de la <b>fonction occlusale</b> lors de l'obturation, nous réalisons une thérapie restauratrice en harmonie avec une <Important Type="mot nouveau">gnathologie</Important> rationnelle.
     
    			<br/><Retour tir="no" espace="no"/>
    			La dentisterie conservatrice tend à intégrer et à ce rapprocher des <b>spécialités voisines</b> et à se perfectionner pour ce moderniser dans la pratique,
    			<Retour />
    			l'odontologie conservatrice permet actuellement la restauration de dents très délabrées qui était condamnées il y a quelques années et permet leur conservation sur l'arcade et l'élaboration de prothèse moins <Important Type="spécial">mutilante</Important>.
    			<Retour jump="no"/>
    			L'odontologie conservatrice permet par ses traitements à éviter des complications parodontales à travers l'Apex et à traiter toutes les atteintes <Important>ondo-parodentales</Important>.
    			<Retour jump="no"/>
    			L'odontologie conservatrice nous permet de traiter des dents douloureuses qui autrefois était sacrifier, la restauration des dents antérieures délabrées est aussi facilité par nos thérapeutique.
    			<Retour jump="no" />
    			L'odontologie conservatrice est rentrée effectivement dans les thérapeutiques de l'esthétique grâce à la prise en charge des fractures accidentelles ou occasionnelles ou de rétablir l'aspect fonctionnel et esthétique.
    			<Retour jump="no" tir="no" />Ces dernière années, les techniques de blanchissement ont permit l'amélioration des colorations des dents qu'elle que soit <Important Type="mot nouveau">iatrogène</Important>, chimique ou organique.
    			<br/><Retour tir="no" espace="no"/>
    			L'odontologie conservatrice et la <Important>prothèse</Important> sont sérieusement liés par rapport au traitement <Important Type="spécial">canalaire</Important> des piliers nécessaires pour avoir une bonne prothèse.
    			</Paragraphe>
     
    			....
    		</Partie>
     
    </Polycopié>
    Ce que je fait maintenant est dans une première étape, une première transformation XSL de ce fichier Xml en fichier XML pur (suppression de XHTML pour avoir uniquement le contenu)

    Est-ce qu'il y a une commande XSL ou XPATH pour chercher uniquement une partie du text du fichier XML car dans la recommandation je n'ai trouvé que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select="//..text()=traitement canalaire"
    Merci d'avance

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Une variation sur ce xsl permet de n'obtenir que les balises que tu desires

    http://www.developpez.net/forums/viewtopic.php?t=239000

    exemple

    mon xsl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
    	<xsl:template match="b|i"><!-- ici les balises dont on ne souhaite pas l'appartion mais simplement conserver le texte-->
    		<xsl:apply-templates select="*|text()"/>
    	</xsl:template>
     
     
    	<xsl:template match="*">
    		<xsl:copy>
    			<xsl:apply-templates select="*|@*|text()"/>
    		</xsl:copy>
    	</xsl:template>
     
     
    	<xsl:template match="@*">
    		<xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>
    	</xsl:template>
     
     
    	<xsl:template match="text()">
    		<xsl:value-of select="."/>
    	</xsl:template>
    </xsl:stylesheet>
    xml de depart
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="UTF-8"?>
    <D>
    	<a>abcd<b>efgh</b>ij<i>klmn</i>opq</a>
    </D>
    xml d'arrivée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="UTF-8"?>
    <D>
    	<a>abcdefghijklmnopq</a>
    </D>

  3. #3
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 67
    Points : 54
    Points
    54
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="UTF-8"?>
    <D>
    	<a>abcd<b>efgh</b>ij<i>klmn</i>opq</a>
    </D>
    xml d'arrivée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="UTF-8"?>
    <D>
    	<a>abcdefghijklmnopq</a>
    </D>

    J'ai déja arrivé à ce résultat mais prenant ton exemple, sur mon site un utilisateur entre des mots clef par exemple “ghij” quel commande XSL doit-je utiliser pour repérer ce mot dans le document XML d'arrivé, un peut comme fait
    de l'SQL

    Merci

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    xpath:
    Function: boolean contains(string, string)

    The contains function returns true if the first argument string contains the second argument string, and otherwise returns false.
    http://www.w3.org/TR/xpath#function-contains

    tu as la descriptions des fonctions xpath

  5. #5
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 67
    Points : 54
    Points
    54
    Par défaut
    Dans ce cas, je doit supprimer toutes les balises du documents puis récupérer le document en text() et le comparer, y a t'il une solution meilleure? je veut dire parser un document hiérarchique naratif relativement complex

  6. #6
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Pas du tout necessaire, d'ailleurs la suppression des balises html ne l'etait pas non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="C:\Documents and Settings\amoureux erwan\Mes documents\xml\testxml\recherche.xslt"?>
    <racine>
    	<a>cccc<b>aa</b>ccccc</a>
    </racine>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    	<xsl:variable name="contenu" ><xsl:value-of select="/racine"></xsl:value-of></xsl:variable>
    	<xsl:template match="/">
    	<xsl:choose>
    		<xsl:when test="contains($contenu,'aa')">
    		present
    		</xsl:when>
    		<xsl:otherwise>absent</xsl:otherwise>
    	</xsl:choose>
     
    	</xsl:template>
    </xsl:stylesheet>
    resultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="UTF-8"?>present
    si tu veux plus de detail
    http://erwy.developpez.com/boucle/#L1.1.2

    http://erwy.developpez.com/variable/#L1.3

  7. #7
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 67
    Points : 54
    Points
    54
    Par défaut
    Je pense que c'est bon, merci beaucoup Erwy, je vais essayer de l'adapté a mes besoins, mais je crois ainsi, on aura un petit problème:

    <variable récupère tout le document XML, si j'aurai alors un élément de mon document appelé
    <Paragraphe ...> et qu'un visiteur entre graphe comme mot clef, le résultat soit positive, je veut donc rechercher en séparant le contenu de la structure.

    Merci.

  8. #8
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    perdu

    lis le premier lien que je t'ai donné, tu verras comment fonctionne un value_of sur ce type de noeud

  9. #9
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 67
    Points : 54
    Points
    54
    Par défaut
    La réponse est simple, si un xpath sélectionne plusieurs noeuds seul le premier est affiché. Que se passerait-il par contre si le xpath sélectionné était celui d'un noeud qui en contient d'autres, comme les balises personnes ? Et bien ce serait le contenu text() de toutes les balises contenues qui s'afficherait :
    Ok, C'est moi qui a créer le problème


    Dit moi Erwy, juste une question de performance avant de me lancer dans la réalisation du moteur de recherche,
    ça ne vas pas être lourd d'ouvrir environ 500 polycop (fichier XML, 15KO chaqu'un en moyenne) les parser et utiliser contains pour chaque fichier pour une recherche, si ça vas être terrible, peut-tu m'orrienter vers une technique d'indexation du text général la mieux adaptée pour XML

    Merci.
    ----
    PS: le programme est en C#

  10. #10
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Hum c'est ouvrir-fermer qui sera peut être le plus long
    Personnellement j'ai deja fait ce type de recherche sur un fichier de pres de 2 Mega .Par contre la recherche etait plus complexe, car c'etait des description arborescente et il fallait que je trouve les branches ou étaient presente tous les mots que je cherchais (sans compter ignorer les accents), puis les recopier.
    Jamais plus de 4-5 secondes sur des recherches complexes.

  11. #11
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 67
    Points : 54
    Points
    54
    Par défaut
    Faut-il que je met tous les polycop dans un seul fichier de quelque MO pour éviter les ouvrir-fermer?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Info]moteur de recherche full text en environnement j2ee
    Par ddams dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/11/2004, 19h39
  2. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07
  3. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07
  4. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41

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