Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Service ascendant Iris #105

Open
EmmanuelDemey opened this issue Jan 12, 2024 · 3 comments
Open

Service ascendant Iris #105

EmmanuelDemey opened this issue Jan 12, 2024 · 3 comments
Assignees

Comments

@EmmanuelDemey
Copy link
Collaborator

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

<Territoires>
	<Commune code="69123" uri="http://id.insee.fr/geo/commune/8f38faf5-6cb9-4e77-a635-6e5ef752f938">
		<Intitule>Lyon</Intitule>
		<IntituleSansArticle typeArticle="0">Lyon</IntituleSansArticle>
		<DateCreation>1963-08-07</DateCreation
	</Commune>
</Territoires

Exemple de réponse en JSON

[
	{
		"type": "Commune",
		"code": "69123",
		"uri": "http://id.insee.fr/geo/commune/8f38faf5-6cb9-4e77-a635-6e5ef752f938",
		"intitule": "Lyon",
		"intituleSansArticle": "Lyon",
		"typeArticle": "0",
		"dateCreation": "1963-08-07"
	}
]

Exemple de requête SPARQL

PREFIX igeo:<http://rdf.insee.fr/def/geo#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
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 :

PREFIX igeo:<http://rdf.insee.fr/def/geo#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
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 :

PREFIX igeo:<http://rdf.insee.fr/def/geo#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
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 :

PREFIX igeo:<http://rdf.insee.fr/def/geo#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
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
@ChristopheYon
Copy link

Ok pour les vrais Iris mais les faux renvoient une erreur 404. Dans le cas des faux Iris, la commune sera un ascendant d’elle-même.

@JeromeMBourgeois
Copy link
Contributor

@ChristopheYon c'est corrigé pour les faux iris. Comme pour les deux services précédents c'est en recette en attendant les commentaires de mes reviewer sur la qualité de mon code ;-)

@ChristopheYon
Copy link

@JeromeMBourgeois
Ok pour moi (y compris pour les ascendants de l'Iris 693870103). Je recetterai dès que le code aura été jugé joli.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants