Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Discussion: Problème de requête

  1. #1
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2012
    Messages : 12
    Points : 1
    Points
    1

    Par défaut Problème de requête

    Bonjour,
    débutant dans le domaine du web sémantique, je dois réaliser un projet dans le cadre de ma formation.

    J'ai déjà réalisé mon rdf et ses ontologies, et je me retrouve a devoir faire une requête en sparql mais je sais pas trop comment faire.

    Pour être claire, je suis dans le cas où l'utilisateur souhaite réaliser une recherche sur le site.
    -------------------------------------------------------------------------
    Je récupère bien le champ que la personne saisie, l’intègre dans ma requête PHP, puis j'utilise un FILTER =>
    Code :
    1
    2
    $query= 'PREFIX monument: <http://decouvertedupatrimoine.org/monument/>
    			 Select * where { ?p ?s ?g FILTER regex(?g, "'.$posts->search.'", "i")} 	LIMIT 2000';
    $posts->search === A la recherche de l'utilisateur

    -----------------------------------------------------------------------
    Cela fonctionne très bien, mais mon problème et que je voudrais récupérer tous les champs possible et pas juste le champ contenant la même chaine de caractère que celle saisie par l'user.

    Il s'agit dans ce cas de monument, donc la recherche de l'user me donne bien la correspondance dans le champ nom, mais je souhaiterais aussi récupérer pour se même nom, le n° Merimee, l'adresse,...

  2. #2
    Membre confirmé Avatar de April Fool
    Homme Profil pro Information Inexacte
    Fou d'avril
    Inscrit en
    février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Nom : Homme Information Inexacte
    Localisation : France

    Informations professionnelles :
    Activité : Fou d'avril

    Informations forums :
    Inscription : février 2012
    Messages : 99
    Points : 214
    Points
    214

    Par défaut

    Je ne suis pas sûr de bien comprendre mais je vais essayer.
    Code :
    1
    2
    3
    4
    5
    SELECT ?s ?p ?o WHERE {
        ?s ?p ?o;
            ?q ?g .
        FILTER REGEX(?g, "chaine de l'utilisateur", "i")
    } LIMIT 2000
    Est-ce cela ? Ou bien peut-être même :
    Code :
    1
    2
    3
    4
    5
    SELECT ?s ?p ?o WHERE {
        ?s ?p ?o;
            ex:nom ?g .
        FILTER REGEX(?g, "chaine de l'utilisateur", "i")
    } LIMIT 2000
    Edit : dans le REGEX, on peut utiliser STR(?g) au lieu de ?g pour également comparer des termes qui ne sont pas des chaines de caractères.
    7susd bl'ham owsql wuul pô!

  3. #3
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2012
    Messages : 12
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par April Fool Voir le message
    Je ne suis pas sûr de bien comprendre mais je vais essayer.
    Code :
    1
    2
    3
    4
    5
    SELECT ?s ?p ?o WHERE {
        ?s ?p ?o;
            ?q ?g .
        FILTER REGEX(?g, "chaine de l'utilisateur", "i")
    } LIMIT 2000
    Est-ce cela ? Ou bien peut-être même :
    Code :
    1
    2
    3
    4
    5
    SELECT ?s ?p ?o WHERE {
        ?s ?p ?o;
            ex:nom ?g .
        FILTER REGEX(?g, "chaine de l'utilisateur", "i")
    } LIMIT 2000
    Edit : dans le REGEX, on peut utiliser STR(?g) au lieu de ?g pour également comparer des termes qui ne sont pas des chaines de caractères.


    Merci de ton aide mais cela ne fonctionne pas, mon rdf est du type :
    Code :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <rdf:RDF
    	xml:base="http://decouvertedupatrimoine.org/"
    	xmlns:monument="http://decouvertedupatrimoine.org/monument/"
    	xmlns:owl="http://www.w3.org/2002/07/owl"
    	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
     
    <monument:Monument rdf:about="PA00091553">
    	<monument:ref>PA00091553</monument:ref>
    	<monument:nom>Chapelle de la Vraie-Croix de Langroës</monument:nom>
    	<monument:type>Chapelle de la Vraie-Croix de Langroës</monument:type>
    	<monument:siecle>16</monument:siecle>
    	<monument:siecle>17</monument:siecle>
    	<monument:adresse rdf:resource="PA00091553_adresse" />
    </monument:Monument>
    <monument:Adresse rdf:about="PA00091553_adresse">
    	<monument:region>Bretagne</monument:region>
    	<monument:dpt rdf:resource="PA00091553_departement" />
    	<monument:ville>Plumergat</monument:ville>
    	<monument:rue></monument:rue>
    </monument:Adresse>
    <monument:Departement rdf:about="PA00091553_departement">
    	<monument:numDpt>56</monument:numDpt>
    	<monument:nomDpt>Morbihan</monument:nomDpt>
    </monument:Departement>
    </rdf:RDF>
    et en faite la requête que je cherche est plus de la forme:
    Code :
    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
    PREFIX monument: <http://decouvertedupatrimoine.org/monument/>
    SELECT * WHERE
    {
    	?x monument:ref ?ref.
    	?x monument:nom ?nom.
    	?x monument:type ?type.
    	?x monument:siecle ?siecle.
    	?x monument:adresse ?adresse.
    	?adresse monument:region ?region.
    	?adresse monument:dpt ?Dpt.
    	?adresse monument:ville ?ville.
    	?adresse monument:rue ?rue.
    	?Dpt monument:numDpt ?numDpt.
    	?Dpt monument:nomDpt ?nomDpt.
    	FILTER
    	(
    		regex(?ref, "'.$posts->search.'", "i")
    		|| regex(?nom, "'.$posts->search.'", "i")
    		|| regex(?type, "'.$posts->search.'", "i")
    		|| regex(?region, "'.$posts->search.'", "i")
    		|| regex(?numDpt, "'.$posts->search.'", "i")
    		|| regex(?nomDpt, "'.$posts->search.'", "i")
    		|| regex(?ville, "'.$posts->search.'", "i")
    		|| regex(?rue, "'.$posts->search.'", "i")
    	)
    } LIMIT 20

    Il ne me reste qu'un seul souci que je n'arrive pas a régler, c'est que je n'arrive pas à récupérer tous les siècles possible pour un même champ, exemple siècle qui en possède deux, il me renvoie bien tout mais en répétant tous deux fois sauf le siècle. J'ai cherché a utilisé des Group_Concat comme en SQL, mais je n'ai connu que l'échec.

    Quelqu'un aurait-il une idée??

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •