sapa / performing-arts-ch-sparnatural

0 stars 0 forks source link

Exemple de requête : video #4

Open b2d3c opened 7 months ago

b2d3c commented 7 months ago

Voici un exemple de requête que notre SPARQL EndPoint n'arrive pas, en l'état, à traiter mais que vous arriverez peut-être à améliorer et que nous souhaiterions utiliser comme un exemple de requête pour Sparnatural :

PREFIX rico: <https://www.ica.org/standards/RiC/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT *
WHERE {
  ?RR (rdf:type|(rdf:type/rdfs:subClassOf)) <https://www.ica.org/standards/RiC/ontology#RecordResource>; a ?type; rico:isOrWasIncludedIn* <http://data.performing-arts.ch/r/ceb13c5e-4996-4356-a078-92b949c3252f>; rico:hasDocumentaryFormType <http://vocab.performing-arts.ch/dfwrq>.
  OPTIONAL {?RR rico:name ?name}.
  OPTIONAL {?RR rico:identifier ?ID}.
  ?type rdfs:label ?typeLabel.
}
b2d3c commented 7 months ago

En fait la requête ne fonctionne pas car si les Record Set et les Record sont bien inclus (rico:isOrWasIncludedIn) dans "Archive", les Record Part sont d'abord rico:isOrWasConstituentOf d'un Record et non pas inclus à l'intérieur d'eux.

Si vous arrivez à trouver un moyen pour contourner cette difficulté j'en serais très heureux.

tfrancart commented 7 months ago

Voici une requête SPARQL optimisée, sans le rico:isOrWasConsituentOf, mais qui ne fonctionne toujours pas. Evidemment elle n'est plus transitive, le nombre de niveaux est fixe (5) mais cela n'est pas très gênant si votre arbre de classification ne bouge pas.

PREFIX rico: <https://www.ica.org/standards/RiC/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?RR ?name ?ID ?type
WHERE {
  ?RR a ?type .
  VALUES ?type { <https://www.ica.org/standards/RiC/ontology#Record> <https://www.ica.org/standards/RiC/ontology#RecordSet> <https://www.ica.org/standards/RiC/ontology#RecordPart> }.
  ?RR rico:isOrWasIncludedIn|(rico:isOrWasIncludedIn/rico:isOrWasIncludedIn)|(rico:isOrWasIncludedIn/rico:isOrWasIncludedIn/rico:isOrWasIncludedIn)|(rico:isOrWasIncludedIn/rico:isOrWasIncludedIn/rico:isOrWasIncludedIn/rico:isOrWasIncludedIn)|(rico:isOrWasIncludedIn/rico:isOrWasIncludedIn/rico:isOrWasIncludedIn/rico:isOrWasIncludedIn/rico:isOrWasIncludedIn) <http://data.performing-arts.ch/r/ceb13c5e-4996-4356-a078-92b949c3252f>.
  ?RR rico:hasDocumentaryFormType <http://vocab.performing-arts.ch/dfwrq>.
  OPTIONAL {?RR rico:name ?name}.
  OPTIONAL {?RR rico:identifier ?ID}.
}

Cependant j'ai l'impression que cela ne lui plait toujours pas - à moins que le serveur soit planté, il me semble ? le serveur ne répond plus à rien. A suivre

Une solution possible pour répondre à ce type de requête est d'activer l'inférence dans le triplestore, au moins pour la transitivité de cette propriété.

D'une façon générale il est possible de configurer ces property paths dans une configuration "customisée manuellement" de Sparnatural.

tfrancart commented 7 months ago

Le serveur étant revenu à la normale, j'ai pu tester que la requête récursive fonctionne, y compris sur des RecordPart avec isOrWasIncludedIn:

PREFIX rico: <https://www.ica.org/standards/RiC/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?RR ?name ?ID ?type
WHERE {
  ?RR a ?type .
  VALUES ?type { <https://www.ica.org/standards/RiC/ontology#Record> <https://www.ica.org/standards/RiC/ontology#RecordSet> <https://www.ica.org/standards/RiC/ontology#RecordPart> }.
  ?RR (rico:isOrWasIncludedIn|rico:isOrWasConstituentOf)* <http://data.performing-arts.ch/r/ceb13c5e-4996-4356-a078-92b949c3252f>.
  ?RR rico:hasDocumentaryFormType <http://vocab.performing-arts.ch/dfwrq>.
  OPTIONAL {?RR rico:name ?name}.
  OPTIONAL {?RR rico:identifier ?ID}.
}
b2d3c commented 7 months ago

Super! Merci pour l'aide SPARQL ! Je vais y travailler encore pour en faire un bon exemple et je vous redirai.