InseeFr / InseeFr/Metadata-API

Service ascendant Iris

Open
#105 3 comments 0 reactions 1 assignee Assigned to @JeromeMBourgeois View on GitHub
Dominant language
Java
Stars
1
Forks
7
Avg merge
21h 42m
Merged PRs (30d)
1

Description

## **Services territoires ascendants**
### **Iris**
L’Iris est un découpage infra-communal.

Seules les plus grandes communes (environ 2000) sont découpées en Iris. Le reste du territoire n’est pas couvert par ce zonage.

Toutefois, pour répondre au mieux aux besoins des utilisateurs, l’API devrait renvoyer une partition du territoire. Pour cela, en plus des Iris, elle renverra un faux Iris pour chaque commune non découpée, avec comme code le code de la commune suivi de « 0000 » (les code des Iris étant deux mêmes composés du code commune suivi de quatre chiffres). L’URI de ces faux Iris reste celui de communes, ainsi que leur nom et les autres informations qui les concernent.

Dans le cas des faux Iris, la commune sera un ascendant d’elle-même.
#### *Requête*

|**Méthode**|**Requête**|**Description**|
| :- | :- | :- |
|GET|/iris/{code}/ascendants|Récupérer les informations concernant les territoires qui contiennent l’Iris {code}|
#### *Paramètres*

|**Paramètres**|**Description**|**Type**|
| :- | :- | :- |
|date|Filtre pour utiliser l’Iris actif à la date donnée. Par défaut, c’est la date courante.|Date|
|type|

Filtre sur le type du ou des territoires renvoyés.

- ArrondissementMunicipal

- Commune

- Arrondissement

- Region

- Departement

- UniteUrbaine2020

- AireDAttractionDesVilles2020

- ZoneDEmploi2020

- BassinDeVie2022

|String|
#### *Exemples de requête*
```
/geo/iris/693870101/ascendants

/geo/iris/693870101/ascendants?date=2023-01-01

/geo/iris/693870101/ascendants?type=Commune

/geo/iris/693870101/ascendants?date=2023-01-01&type=Commune
```
La requête /geo/iris/010020000/ascendants?type=Commune sur l’iris fictif 010020000 doit renvoyer la commune 01002 elle-même.

La requête /geo/iris/010020101/ascendants?type=Commune sur l’iris inexistant de la commune 01002 non découpée en Iris doit renvoyer un résultat vide.
#### *Champs de la réponse*

|**Champ**|**Description**|
| :- | :- |
|URI|URI du territoire|
|Type|Type du territoire ascendant|
|Code|Code Insee du territoire|
|Intitule|Nom du territoire|
|IntituleSansArticle|Nom du territoire sans article|
|TypeArticle|Code article du nom du territoire. Attribut du champ IntituleSansArticle|
|DateCreation|Date de création du territoire|
|DateSuppression|Date de suppression du territoire s’il a été supprimé.|
#### *Exemple de réponse en XML*
```xml


Lyon
Lyon
1963-08-07

PREFIX xsd:
SELECT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression
WHERE {
{
SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression
WHERE {
{
?enfant a igeo:Iris ;
igeo:codeINSEE '693870101';
igeo:subdivisionDirecteDe+ ?ressource .
}
UNION
{
BIND(SUBSTR('693870101', 1, 5) AS ?codeCommune)
?enfant a igeo:Commune ;
igeo:codeINSEE ?codeCommune .
OPTIONAL {
?iris igeo:subdivisionDirecteDe+ ?enfant ; a igeo:Iris .
OPTIONAL {?iris ^igeo:creation/igeo:date ?dateDebutIris }
OPTIONAL {?iris ^igeo:suppression/igeo:date ?dateFinIris }
FILTER (!BOUND(?dateDebutIris) || ?dateDebutIris <= NOW() )
FILTER (!BOUND(?dateFinIris) || ?dateFinIris > NOW() )
}
FILTER (!BOUND(?iris))
BIND(CONCAT(?codeCommune, '0000') AS ?codeIris)
FILTER(?codeIris = '693870101')
?enfant igeo:subdivisionDirecteDe\* ?ressource . #Cardinalité * pour avoir la commune elle-même
}
?ressource a ?typeRDF;
igeo:codeINSEE ?code ;
igeo:codeArticle ?typeArticle ;
igeo:nom ?intitule ;
igeo:nomSansArticle ?intituleSansArticle .
BIND(STR(?typeRDF) AS ?type).
BIND(STR(?ressource) AS ?uri).
OPTIONAL {?enfant (^igeo:creation/igeo:date) ?dateCreationEnfant.}
OPTIONAL {?enfant (^igeo:suppression/igeo:date) ?dateSuppressionEnfant.}
OPTIONAL {?ressource (^igeo:creation/igeo:date) ?dateCreation.}
OPTIONAL {?ressource (^igeo:suppression/igeo:date) ?dateSuppression.}
}
}
FILTER(!BOUND(?dateCreationEnfant) || xsd:dateTime(?dateCreationEnfant) <= NOW())
FILTER(!BOUND(?dateSuppressionEnfant) || xsd:dateTime(?dateSuppressionEnfant) > NOW())
FILTER(!BOUND(?dateCreation) || xsd:dateTime(?dateCreation) <= NOW())
FILTER(!BOUND(?dateSuppression) || xsd:dateTime(?dateSuppression) > NOW())
}
ORDER BY ?type ?code
```
Avec le paramètre date :
```sparql
PREFIX igeo:
PREFIX xsd:
SELECT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression
WHERE {
{
SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression
WHERE {
{
?enfant a igeo:Iris ;
igeo:codeINSEE '693870101';
igeo:subdivisionDirecteDe+ ?ressource .
}
UNION
{
BIND(SUBSTR('693870101', 1, 5) AS ?codeCommune)
?enfant a igeo:Commune ;
igeo:codeINSEE ?codeCommune .
OPTIONAL {
?iris igeo:subdivisionDirecteDe+ ?enfant ; a igeo:Iris .
OPTIONAL {?iris ^igeo:creation/igeo:date ?dateDebutIris }
OPTIONAL {?iris ^igeo:suppression/igeo:date ?dateFinIris }
FILTER (!BOUND(?dateDebutIris) || ?dateDebutIris <= '2023-01-01'^^xsd:date )
FILTER (!BOUND(?dateFinIris) || ?dateFinIris > '2023-01-01'^^xsd:date )
}
FILTER (!BOUND(?iris))
BIND(CONCAT(?codeCommune, '0000') AS ?codeIris)
FILTER(?codeIris = '693870101')
?enfant igeo:subdivisionDirecteDe\* ?ressource . #Cardinalité * pour avoir la commune elle-même
}
?ressource a ?typeRDF;
igeo:codeINSEE ?code ;
igeo:codeArticle ?typeArticle ;
igeo:nom ?intitule ;
igeo:nomSansArticle ?intituleSansArticle .
BIND(STR(?typeRDF) AS ?type).
BIND(STR(?ressource) AS ?uri).
OPTIONAL {?enfant (^igeo:creation/igeo:date) ?dateCreationEnfant.}
OPTIONAL {?enfant (^igeo:suppression/igeo:date) ?dateSuppressionEnfant.}
OPTIONAL {?ressource (^igeo:creation/igeo:date) ?dateCreation.}
OPTIONAL {?ressource (^igeo:suppression/igeo:date) ?dateSuppression.}
}
}
FILTER(!BOUND(?dateCreationEnfant) || ?dateCreationEnfant <= '2023-01-01'^^xsd:date)
FILTER(!BOUND(?dateSuppressionEnfant) || ?dateSuppressionEnfant > '2023-01-01'^^xsd:date)
FILTER(!BOUND(?dateCreation) || ?dateCreation <= '2023-01-01'^^xsd:date)
FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '2023-01-01'^^xsd:date)
}
ORDER BY ?type ?code
```
Avec le paramètre type :
```sparql
PREFIX igeo:
PREFIX xsd:
SELECT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression
WHERE {
{
SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression
WHERE {
{
?enfant a igeo:Iris ;
igeo:codeINSEE '693870101';
igeo:subdivisionDirecteDe+ ?ressource .
}
UNION
{
BIND(SUBSTR('693870101', 1, 5) AS ?codeCommune)
?enfant a igeo:Commune ;
igeo:codeINSEE ?codeCommune .
OPTIONAL {
?iris igeo:subdivisionDirecteDe+ ?enfant ; a igeo:Iris .
OPTIONAL {?iris ^igeo:creation/igeo:date ?dateDebutIris }
OPTIONAL {?iris ^igeo:suppression/igeo:date ?dateFinIris }
FILTER (!BOUND(?dateDebutIris) || ?dateDebutIris <= NOW() )
FILTER (!BOUND(?dateFinIris) || ?dateFinIris > NOW() )
}
FILTER (!BOUND(?iris))
BIND(CONCAT(?codeCommune, '0000') AS ?codeIris)
FILTER(?codeIris = '693870101')
?enfant igeo:subdivisionDirecteDe\* ?ressource . #Cardinalité * pour avoir la commune elle-même
}
?ressource a ?typeRDF;
a igeo:Commune ;
igeo:codeINSEE ?code ;
igeo:codeArticle ?typeArticle ;
igeo:nom ?intitule ;
igeo:nomSansArticle ?intituleSansArticle .
BIND(STR(?typeRDF) AS ?type).
BIND(STR(?ressource) AS ?uri).
OPTIONAL {?enfant (^igeo:creation/igeo:date) ?dateCreationEnfant.}
OPTIONAL {?enfant (^igeo:suppression/igeo:date) ?dateSuppressionEnfant.}
OPTIONAL {?ressource (^igeo:creation/igeo:date) ?dateCreation.}
OPTIONAL {?ressource (^igeo:suppression/igeo:date) ?dateSuppression.}
}
}
FILTER(!BOUND(?dateCreationEnfant) || xsd:dateTime(?dateCreationEnfant) <= NOW())
FILTER(!BOUND(?dateSuppressionEnfant) || xsd:dateTime(?dateSuppressionEnfant) > NOW())
FILTER(!BOUND(?dateCreation) || xsd:dateTime(?dateCreation) <= NOW())
FILTER(!BOUND(?dateSuppression) || xsd:dateTime(?dateSuppression) > NOW())
}
ORDER BY ?type ?code
```
Avec le paramètre type et le paramètre date :
```sparql
PREFIX igeo:
PREFIX xsd:
SELECT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression
WHERE {
{
SELECT DISTINCT ?uri ?type ?code ?typeArticle ?intitule ?intituleSansArticle ?cheflieu ?dateCreation ?dateSuppression
WHERE {
{
?enfant a igeo:Iris ;
igeo:codeINSEE '693870101';
igeo:subdivisionDirecteDe+ ?ressource .
}
UNION
{
BIND(SUBSTR('693870101', 1, 5) AS ?codeCommune)
?enfant a igeo:Commune ;
igeo:codeINSEE ?codeCommune .
OPTIONAL {
?iris igeo:subdivisionDirecteDe+ ?enfant ; a igeo:Iris .
OPTIONAL {?iris ^igeo:creation/igeo:date ?dateDebutIris }
OPTIONAL {?iris ^igeo:suppression/igeo:date ?dateFinIris }
FILTER (!BOUND(?dateDebutIris) || ?dateDebutIris <= '2023-01-01'^^xsd:date )
FILTER (!BOUND(?dateFinIris) || ?dateFinIris > '2023-01-01'^^xsd:date )
}
FILTER (!BOUND(?iris))
BIND(CONCAT(?codeCommune, '0000') AS ?codeIris)
FILTER(?codeIris = '693870101')
?enfant igeo:subdivisionDirecteDe\* ?ressource . #Cardinalité * pour avoir la commune elle-même
}
?ressource a ?typeRDF;
a igeo:Commune ;
igeo:codeINSEE ?code ;
igeo:codeArticle ?typeArticle ;
igeo:nom ?intitule ;
igeo:nomSansArticle ?intituleSansArticle .
BIND(STR(?typeRDF) AS ?type).
BIND(STR(?ressource) AS ?uri).
OPTIONAL {?enfant (^igeo:creation/igeo:date) ?dateCreationEnfant.}
OPTIONAL {?enfant (^igeo:suppression/igeo:date) ?dateSuppressionEnfant.}
OPTIONAL {?ressource (^igeo:creation/igeo:date) ?dateCreation.}
OPTIONAL {?ressource (^igeo:suppression/igeo:date) ?dateSuppression.}
}
}
FILTER(!BOUND(?dateCreationEnfant) || ?dateCreationEnfant <= '2023-01-01'^^xsd:date)
FILTER(!BOUND(?dateSuppressionEnfant) || ?dateSuppressionEnfant > '2023-01-01'^^xsd:date)
FILTER(!BOUND(?dateCreation) || ?dateCreation <= '2023-01-01'^^xsd:date)
FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '2023-01-01'^^xsd:date)
}
ORDER BY ?type ?code
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.