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

SPARQL Discussion :

Problème de requête


Sujet :

SPARQL

  1. #1
    Futur Membre du Club
    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 : 6
    Points
    6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 actif
    Avatar de April Fool
    Homme Profil pro
    Fou d'avril
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Fou d'avril

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Points : 215
    Points
    215
    Par défaut
    Je ne suis pas sûr de bien comprendre mais je vais essayer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Futur Membre du Club
    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 : 6
    Points
    6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
     
    <?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 : 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
    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??

Discussions similaires

  1. Réponses: 19
    Dernier message: 27/08/2003, 15h32
  2. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  3. Problème de requètes concurentes
    Par Emmanuel.G dans le forum XMLRAD
    Réponses: 3
    Dernier message: 08/08/2003, 16h51
  4. Réponses: 2
    Dernier message: 16/07/2003, 14h40
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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