DATAtourisme

Aide pour requête de flux sparql

Bonjour,

J’ai trouvé ici Aide pour requête de flux - Application diffuseur - DATAtourisme une requête que je souhaite améliorer.

Je souhaite, pour chaque POI, savoir si c’est un restaurant, un festival, etc; en d’autre terme sa catégorie. Je souhaite également générer la description fr et en ( et des autres langues disponible, si possible)
Je ne sais pas si ma requête est « « optimisé » » ou pas.
Pourriez-vous m’aider à améliorer cette requête ? merci

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 ?poi ?nom ?descri ?longitude ?latitude ?cp ?ville ?contacts ?types ## tous les contacts (email et telephone) du ?poi sérialisés
WHERE {
?poi a :PointOfInterest;
: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 {
## 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
}
}

Optional { ?poi :hasDescription ?description.
?description :shortDescription ?descri.
}
Optional {
{ select ?poi (group_concat(distinct ?type;SEPARATOR="|") as ?types) where {
?poi rdf:type ?type.
} group by ?poi
}
}
}