DATAtourisme

Aide pour requête de flux


#1

Bonjour,
Est-il possible d’avoir une aide pour une requête de flux en .CSV?

Il me faudrait en poi : Bowling , avec comme informations : Nom ; Description courte ; Lattitude ; Longitude ; Cp ; Ville ; Telephone ; Email ; Site-web.

Mes requêtes ne me sortent que des doublons :

PREFIX : <https://www.datatourisme.gouv.fr/ontology/core#> 

PREFIX schema: http://schema.org/
PREFIX rdfs: http://www.w3.org/2000/01/rdf-schema#
PREFIX rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
PREFIX dc: http://purl.org/dc/elements/1.1/
PREFIX ebucore: http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#
PREFIX owl: http://www.w3.org/2002/07/owl#
PREFIX foaf: http://xmlns.com/foaf/0.1/
Select ?nom ?descri ?longitude ?latitude ?cp ?ville ?telephone ?email
WHERE {
?poi a :BowlingAlley;
:isLocatedAt ?place;

 ## qui est localisé à ?place
   rdfs:label ?nom.     ## et a pour nom ?nom.
   FILTER langMatches( lang(?nom), "fr" )   ## en français  
   Filter LangMatches( Lang(?descri), "fr") 

?place schema:geo ?geo.## ?place a pour coordonnées géographiques ?geo
?geo schema:longitude ?longitude; ## ?geo a pour longitude ?longitude
schema:latitude ?latitude. ## et a pour latitude ?latitude

?place schema:address ?adress.
?adress schema:addressLocality ?ville;
schema:postalCode ?cp.

Optional{ ?poi :hasContact ?contact.}
?contact schema:email ?email;
schema:telephone ?telephone.

Optional { ?poi :hasDescription ?description.
?description :shortDescription ?descri.
} }

Merci :slight_smile: .


#2

Bonjour,

Il faut intégrer les propriétés de vos contacts dans l’ensemble Optional. (Sinon il vas chercher des emails et téléphones sans forcement de relation avec le POI)

Ensuite ces POI peuvent avoir plusieurs contacts et eux même plusieurs emails et téléphones. En CSV cela se traduit par défaut en multipliant les lignes avec juste les colonnes des contacts qui changent (les doublons que vous avez détectés).
Vous pouvez le prendre en compte lors du chargement de votre CSV.

Une autre approche est de “sérialiser” les contacts du POI en utilisant une sous requête.

optional {
      ## sérialisation des contacts
      {select ?poi (group_concat(?contact;SEPARATOR="|") as ?contacts) where { 
        ?poi <https://www.datatourisme.gouv.fr/ontology/core#hasContact> ?contactUri.
        ## sérialisation des propriétés qui peuvent être multiples ou absentes
        {select ?contactUri (concat(group_concat(distinct ?telephone;SEPARATOR="#"),"##",group_concat(distinct ?email;SEPARATOR="#")) as ?contact) where {
          ?contactUri a <https://www.datatourisme.gouv.fr/ontology/core#Agent>.
          optional {
            ?contactUri schema:email ?email.
            }
          optional {
            ?contactUri schema:telephone ?telephone.
            }      
          } group by ?contactUri
         }
        } group by ?poi 
      }
    }

Pour votre requête cela donnerai :

Cordialement.