Précédent   Forum du club des développeurs et IT Pro > Webmasters - Développement Web > Web sémantique > SPARQL
SPARQL Forum d'entraide sur SPARQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/10/2012, 21h27   #1
atchoum34
Invité de passage
 
Homme
Étudiant
Inscription : 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,...
atchoum34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2012, 12h35   #2
April Fool
Membre confirmé
 
Avatar de April Fool
 
Homme Information Inexacte
Fou d'avril
Inscription : février 2012
Messages : 97
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 : 97
Points : 206
Points : 206
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ô!
April Fool est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/10/2012, 09h14   #3
atchoum34
Invité de passage
 
Homme
Étudiant
Inscription : 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
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??
atchoum34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h06.


 
 
 
 
Partenaires

Hébergement Web