assemblee-virtuelle / assemblee-virtuelle/semapps

Ne plus utiliser le default graph

Open
#996 2 comments 0 reactions 0 assignees View on GitHub
fuseki
Dominant language
TypeScript
Stars
103
Forks
14
Avg merge
1m
Merged PRs (30d)
2

Description

Comme l'explique très bien [cet article](https://blog.metaphacts.com/the-default-graph-demystified), la spec actuelle de SPARQL ne permet pas de facilement sélectionner le graph par défaut. L'article recommande au final de ne pas utiliser le default graph:

> Until this is resolved, however, a simple trick to avoid the problem in the first place is this: always use a named graph to add your data. Don’t rely on the default graph.

@nikoPLP confirme que ce serait mieux de n'avoir que des named graph.

Les avantages seraient des requêtes plus lisibles et plus performantes. Pour rechercher à la fois sur le graph principal (graph par défaut) et le graph miroir, il suffirait de faire ça (les lignes importantes sont celles commençant par `FROM`):

```sparql
PREFIX ldp:
PREFIX pair:
CONSTRUCT {
?s1 ?p1 ?o1.
?s1 pair:hasLocation ?se2f1423562035830ba0bc9f64fa5b561.
?se2f1423562035830ba0bc9f64fa5b561 ?pe2f1423562035830ba0bc9f64fa5b561 ?oe2f1423562035830ba0bc9f64fa5b561.
?se2f1423562035830ba0bc9f64fa5b561 pair:hasPostalAddress ?seee8d9476de0ffb03e7f91283ffe6ae8.
?seee8d9476de0ffb03e7f91283ffe6ae8 ?peee8d9476de0ffb03e7f91283ffe6ae8 ?oeee8d9476de0ffb03e7f91283ffe6ae8.
?s1 pair:organizationOfMembership ?s3fc64308af5e2b95c72d7488ef20c980.
?s3fc64308af5e2b95c72d7488ef20c980 ?p3fc64308af5e2b95c72d7488ef20c980 ?o3fc64308af5e2b95c72d7488ef20c980.
}
FROM # Named graph qui remplacerait le default graph
FROM # Seule ligne nécessaire pour ajouter le graph mirror dans la requête
WHERE {
FILTER(?containerUri IN())
?containerUri ldp:contains ?s1.
FILTER(ISIRI(?s1))
{ ?s1 ?p1 ?o1. }
UNION
{
?s1 pair:hasLocation ?se2f1423562035830ba0bc9f64fa5b561.
?se2f1423562035830ba0bc9f64fa5b561 ?pe2f1423562035830ba0bc9f64fa5b561 ?oe2f1423562035830ba0bc9f64fa5b561.
}
UNION
{
?se2f1423562035830ba0bc9f64fa5b561 pair:hasPostalAddress ?seee8d9476de0ffb03e7f91283ffe6ae8.
?seee8d9476de0ffb03e7f91283ffe6ae8 ?peee8d9476de0ffb03e7f91283ffe6ae8 ?oeee8d9476de0ffb03e7f91283ffe6ae8.
?s1 pair:hasLocation ?se2f1423562035830ba0bc9f64fa5b561.
}
UNION
{
?s1 pair:organizationOfMembership ?s3fc64308af5e2b95c72d7488ef20c980.
?s3fc64308af5e2b95c72d7488ef20c980 ?p3fc64308af5e2b95c72d7488ef20c980 ?o3fc64308af5e2b95c72d7488ef20c980.
}
}
```

Alors qu'actuellement une bonne partie de la requête WHERE doit être doublée via un UNION:

```sparql
PREFIX ldp:
PREFIX pair:
CONSTRUCT {
?s1 ?p1 ?o1.
?s1 pair:hasLocation ?se2f1423562035830ba0bc9f64fa5b561.
?se2f1423562035830ba0bc9f64fa5b561 ?pe2f1423562035830ba0bc9f64fa5b561 ?oe2f1423562035830ba0bc9f64fa5b561.
?se2f1423562035830ba0bc9f64fa5b561 pair:hasPostalAddress ?seee8d9476de0ffb03e7f91283ffe6ae8.
?seee8d9476de0ffb03e7f91283ffe6ae8 ?peee8d9476de0ffb03e7f91283ffe6ae8 ?oeee8d9476de0ffb03e7f91283ffe6ae8.
?s1 pair:organizationOfMembership ?s3fc64308af5e2b95c72d7488ef20c980.
?s3fc64308af5e2b95c72d7488ef20c980 ?p3fc64308af5e2b95c72d7488ef20c980 ?o3fc64308af5e2b95c72d7488ef20c980.
}
WHERE {
FILTER(?containerUri IN())
?containerUri ldp:contains ?s1.
FILTER(ISIRI(?s1))
{
{ ?s1 ?p1 ?o1. }
UNION
{
?s1 pair:hasLocation ?se2f1423562035830ba0bc9f64fa5b561.
?se2f1423562035830ba0bc9f64fa5b561 ?pe2f1423562035830ba0bc9f64fa5b561 ?oe2f1423562035830ba0bc9f64fa5b561.
}
UNION
{
?se2f1423562035830ba0bc9f64fa5b561 pair:hasPostalAddress ?seee8d9476de0ffb03e7f91283ffe6ae8.
?seee8d9476de0ffb03e7f91283ffe6ae8 ?peee8d9476de0ffb03e7f91283ffe6ae8 ?oeee8d9476de0ffb03e7f91283ffe6ae8.
?s1 pair:hasLocation ?se2f1423562035830ba0bc9f64fa5b561.
}
UNION
{
?s1 pair:organizationOfMembership ?s3fc64308af5e2b95c72d7488ef20c980.
?s3fc64308af5e2b95c72d7488ef20c980 ?p3fc64308af5e2b95c72d7488ef20c980 ?o3fc64308af5e2b95c72d7488ef20c980.
}
}
UNION
{
GRAPH {
{ ?s1 ?p1 ?o1. }
UNION
{
?s1 pair:hasLocation ?se2f1423562035830ba0bc9f64fa5b561.
?se2f1423562035830ba0bc9f64fa5b561 ?pe2f1423562035830ba0bc9f64fa5b561 ?oe2f1423562035830ba0bc9f64fa5b561.
}
UNION
{
?se2f1423562035830ba0bc9f64fa5b561 pair:hasPostalAddress ?seee8d9476de0ffb03e7f91283ffe6ae8.
?seee8d9476de0ffb03e7f91283ffe6ae8 ?peee8d9476de0ffb03e7f91283ffe6ae8 ?oeee8d9476de0ffb03e7f91283ffe6ae8.
?s1 pair:hasLocation ?se2f1423562035830ba0bc9f64fa5b561.
}
UNION
{
?s1 pair:organizationOfMembership ?s3fc64308af5e2b95c72d7488ef20c980.
?s3fc64308af5e2b95c72d7488ef20c980 ?p3fc64308af5e2b95c72d7488ef20c980 ?o3fc64308af5e2b95c72d7488ef20c980.
}
}
}
}
```

Contributor guide

No contributing guide indexed for this repository

Research direction

No repository files, tests, or implementation entry points are named; begin by locating the SPARQL query and graph-storage code corresponding to the main and mirror graph URIs. Done would mean consistently using named graphs instead of the default graph and validating that queries covering both graphs still return the intended data.

Written by the indexing model from the issue text.

Assessment

Domain
databases
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.