(Ouh la vache, rien depuis 4 ans et demi ?! Je sais que j’ai eu autre chose à faire, mais quand même ! )
Une de mes bêtes noires sur Wikidata : les items représentant des communes françaises avec des déclarations mauvaises ou incomplètes.
Exemple du jour, ll n’est pas pertinent de considérer qu’une commune est située dans un canton : certes, les communes françaises sont – sauf les exceptions que constituent Paris (qui est « regroupée toute seule »), Lyon (dans une métropole), et les communes des régions d’outre-mer – regroupées en départements, et lesdits départements découpés en arrondissements eux-mêmes découpés en cantons ; mais les communes ne sont pas regroupées en cantons. Certains cantons recouvrent bien plusieurs communes, mais ce n’est pas la norme.
On trouve par exemple :
- des cantons comportant plusieurs communes (cas le plus courant)
canton de Plœmeur, communes de Larmor-Plage, Plœmeur, et Quéven dans leur intégralité - des communes comportant à elles seules plusieurs cantons, et aucun fragment d’autre canton
cantons d’Aix-en-Provence-1 et Aix-en-Province 2 dans leur intégralité, commune d’Aix-en-Provence - des cantons à cheval sur plusieurs communes, dont aucune en entier
canton de Cannes-1, communes de Cannes et du Cannet - des cantons comportant plusieurs communes et un fragment d’une commune qui comporte à elle seule au moins un autre canton entier
cantons de Lille-3 et Lille-5, communes de Lille et Mons-en-Barœul - des cantons à cheval sur plusieurs fragments disjoints d’une même commune
canton de Reims-8, commune de Reims
Si avec ça vous considérez toujours qu’utiliser un canton comme localisation administrative d’une commune est une excellente idée, je ne peux rien pour vous. Il est impératif d’utiliser les départements (dans le cas général) : une même commune est nécessairement dans un département (au plus) ; elle ne peut être divisée entre deux départements. Et pour les cas particuliers, il est toujours possible de les insérer dans la plus petite entité administrative dans laquelle elles se trouvent : leur métropole, collectivité d’outre-mer, terre australe ou antarctique…
Reste donc le souci des communes qui ne sont pas localisées administrativement dans un département directement, mais qui le sont récursivement. Oui, c’est un souci : ça implique de faire plus de requêtes, beaucoup plus longues, pour obtenir une information pourtant utile. Vous en verrez un exemple, pourtant incomplet, plus bas.
Voici déjà une requête pour récupérer les communes françaises. On construira dessus. J’ajoute déjà les labels des entités correspondantes.
SELECT ?commune ?communeLabel WHERE {
?commune wdt:P31 wd:Q484170 .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "fr" .
}
}
38376 résultats
Jusque là, ça va.
Voyons pour les communes qui n’ont pas de département comme localisation administrative.
SELECT ?commune ?communeLabel WHERE {
?commune wdt:P31 wd:Q484170 . # les trucs qui sont des communes
MINUS { # mais pas
?commune wdt:P131 ?departementDejaPresent . # les trucs qui ont un département d'indiqué comme localisation administrative
?departementDejaPresent wdt:P31 wd:Q6465 .
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "fr" .
}
}
21389 résultats
Là encore, pas de quoi se fouler.
Et enfin, les communes qui ne sont pas directement localisées administrativement dans un département, mais le sont récursivement.
SELECT ?commune ?communeLabel ?departement ?departementLabel WHERE {
?commune wdt:P31 wd:Q484170 . # les trucs qui sont des communes
MINUS { #mais qui ne sont pas dans un département
?commune wdt:P131 ?departementDejaPresent.
?departementDejaPresent wdt:P31 wd:Q6465 .
}
?commune wdt:P131* ?departement . # mais qui sont un peu dans un département quand même
?departement wdt:P31 wd:Q6465 .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "fr" .
}
}
21311 résultats
Un peu plus complexe, mais pas beaucoup.
Bon, c’est déjà pas mal. On a réduit de moitié la quantité de communes à explorer.
Reste que certaines de ces communes ont changé de canton, d’arrondissement, ou de département ! Et qu’il serait donc utile de vérifier qu’il n’y a pas de qualificateurs pour les relations intermédiaires ni pour les classes des entités intermédiaires. Here comes Big Momma :
SELECT ?commune ?canton ?arrondissement ?departement
WHERE {
?commune p:P31 ?communeStatement . # les trucs qui sont potentiellement
?communeStatement ps:P31 wd:Q484170 . # des trucs qui sont des communes
FILTER NOT EXISTS {
?communeStatement ?communeStatementQualifier ?communeStatementValue . # mais alors vraiment des communes pur cru, sans qualificateur de leur statut de commune
?communeStatementProperty wikibase:qualifier ?communeStatementQualifier .
}
MINUS {
?commune wdt:P131 ?departementDejaPresent . # mais pas les trucs qui sont directement dans un département
?departementDejaPresent wdt:P31 wd:Q6465 .
}
{
?commune p:P131 ?communeCantonStatement .
?communeCantonStatement ps:P131 ?canton . # qui sont dans un canton
?canton wdt:P31 wd:Q184188 .
FILTER NOT EXISTS {
?communeCantonStatement ?communeCantonStatementQualifier ?communeCantonStatementValue . # mais qui y sont pour de vrai
?communeCantonStatementProperty wikibase:qualifier ?communeCantonStatementQualifier .
}
?canton p:P31 ?cantonExistsStatement . # un canton pur cru
?cantonExistsStatement ps:P31 wd:Q184188 .
FILTER NOT EXISTS { # sans qualificateurs
?cantonExistsStatement ?cantonExistsStatementQualifier ?cantonExistsStatementValue .
?cantonExistsStatementProperty wikibase:qualifier ?cantonExistsStatementQualifier .
}
?canton p:P131 ?cantonDepartementStatement . # canton qui est dans un département
?cantonDepartementStatement ps:P31 ?departement .
?departement wdt:P31 wd:Q6465 .
FILTER NOT EXISTS { # mais qui y est pour de vrai
?cantonDepartementStatement ?cantonDepartementStatementQualifier ?cantonDepartementStatementValue .
?cantonDepartementStatementProperty wikibase:qualifier ?cantonDepartementStatementQualifier .
}
}
UNION # OU ALORS
{
?commune p:P131 ?communeArrondissementStatement . # qui sont dans un arrondissement
?communeArrondissementStatement ps:P131 ?arrondissement .
?arrondissement wdt:P31 wd:Q194203 .
FILTER NOT EXISTS { # qui y sont pour de vrai
?communeArrondissementStatement ?communeArrondissementStatementQualifier ?communeArrondissementStatementValue .
?communeArrondissementStatementProperty wikibase:qualifier ?communeArrondissementStatementQualifier .
}
?arrondissement p:P31 ?arrondissementExistsStatement . # un arrondissement pur cru
?arrondissementExistsStatement ps:P31 wd:Q194203 .
FILTER NOT EXISTS {
?arrondissementExistsStatement ?arrondissementExistsStatementQualifier ?arrondissementExistsStatementValue .
?arrondissementExistsStatementProperty wikibase:qualifier ?arrondissementExistsStatementQualifier .
}
?arrondissement p:P131 ?arrondissementDepartementStatement . # qui est dans un département
?arrondissementDepartementStatement ps:P31 ?departement .
?departement wdt:P31 wd:Q6465 .
FILTER NOT EXISTS { # mais qui y est pour de vrai
?arrondissementDepartementStatement ?arrondissementDepartementQualifier ?arrondissementDepartementStatementValue .
?arrondissementDepartementStatementProperty wikibase:qualifier ?arrondissementDepartementStatementQualifier .
}
}
UNION # OU ALORS
{
?commune p:P131 ?communeCantonStatement . # qui sont dans un canton
?communeCantonStatement ps:P131 ?canton .
?canton wdt:P31 wd:Q184188 .
FILTER NOT EXISTS { # mais qui y sont pour de vrai
?communeCantonStatement ?communeCantonStatementQualifier ?communeCantonStatementValue .
?communeCantonStatementProperty wikibase:qualifier ?communeCantonStatementQualifier .
}
?canton p:P31 ?cantonExistsStatement . # un canton pur cru
?cantonExistsStatement ps:P31 wd:Q184188 .
FILTER NOT EXISTS {
?cantonExistsStatement ?cantonExistsStatementQualifier ?cantonExistsStatementValue .
?cantonExistsStatementProperty wikibase:qualifier ?cantonExistsStatementQualifier .
}
?canton p:P131 ?cantonArrondissementStatement . # qui est dans un arrondissement
?cantonArrondissementStatement ps:P131 ?arrondissement .
?arrondissement wdt:P31 wd:Q194203 .
FILTER NOT EXISTS { # mais qui y est pour de vrai
?cantonArrondissementStatement ?cantonArrondissementStatementQualifier ?cantonArrondissementStatementValue .
?cantonArrondissementProperty wikibase:qualifier ?cantonArrondissementStatementQualifier .
}
?arrondissement p31 ?arrondissementExistsStatement . # un arrondissement pur cru
?arrondissementExistsStatement ps:P31 wd:Q194203 .
FILTER NOT EXISTS {
?arrondissementExistsStatement ?arrondissementExistsStatementQualifier ?arrondissementExistsStatementValue .
?arrondissementExistsStatementProperty wikibase:qualifier ?arrondissementExistsStatementQualifier .
}
?arrondissement p:P131 ?arrondissementDepartementStatement . # qui est dans un département
?arrondissementDepartementStatement ps:P131 ?departement .
?departement wdt:P31 wd:Q6465 .
FILTER NOT EXISTS { #qui y est pour de vrai
?arrondissementDepartementStatement ?arrondissementDepartementStatementQualifier ?arrondissementDepartementStatementValue .
?arrondissementDepartementProperty wikibase:qualifier ?arrondissementDepartementStatementQualifier .
}
}
?departement p:P31 ?departementExistsStatement . # dans tous les cas, un département pur cru !
?departementExistsStatement ps:P31 wd:Q6465 .
FILTER NOT EXISTS {
?departementExistsStatement ?departementExistsStatementQualifier ?departementExistsStatementValue .
?departementExistsStatementProperty wikibase:qualifier ?departementExistsStatementQualifier .
}
} ORDER BY ?departement ?commune
Ça pique les yeux, non ? Je ne sais pas si ça doit vous rassurer, mais si on veut être complet et précis, c’est amplement pire.
Mais déjà, si elle tournait, cette requête serait particulièrement utile !
Mais j’ai sans doute eu les yeux plus gros que le ventre. Essayons donc département par département et pour le seul cas commune > canton > arrondissement > département (sans doute le cas le plus fréquent), et sans nous préoccuper des qualificateurs pour les relations intermédiaires. Voici pour le Pas-de-Calais (Q12689).
SELECT ?commune ?canton ?arrondissement
WHERE {
?commune p:P31 ?communeStatement .
?communeStatement ps:P31 wd:Q484170 .
FILTER NOT EXISTS {
?communeStatement ?communeStatementQualifier ?communeStatementValue .
?communeStatementProperty wikibase:qualifier ?communeStatementQualifier .
}
MINUS {
?commune wdt:P131 ?departementDejaPresent .
?departementDejaPresent wdt:P31 wd:Q6465 .
}
?commune wdt:P131 ?canton .
?canton wdt:P31 wd:Q184188 .
?canton p:P31 ?cantonExistsStatement .
?cantonExistsStatement ps:P31 wd:Q184188 .
FILTER NOT EXISTS {
?cantonExistsStatement ?cantonExistsStatementQualifier ?cantonExistsStatementValue .
?cantonExistsStatementProperty wikibase:qualifier ?cantonExistsStatementQualifier .
}
?canton wdt:P131 ?arrondissement .
?arrondissement wdt:P31 wd:Q194203 .
?arrondissement p:P31 ?arrondissementExistsStatement .
?arrondissementExistsStatement ps:P31 wd:Q194203 .
FILTER NOT EXISTS {
?arrondissementExistsStatement ?arrondissementExistsStatementQualifier ?arrondissementExistsStatementValue .
?arrondissementExistsStatementProperty wikibase:qualifier ?arrondissementExistsStatementQualifier .
}
?arrondissement wdt:P131 wd:Q12689 .
} ORDER BY ?commune
11 résultats
Pas mal, malgré les doublons causés par les multiples relations à divers niveaux. Enlevons-les donc, et profitons-en pour avoir les noms de ces communes :
SELECT DISTINCT ?commune ?communeLabel
WHERE {
?commune p:P31 ?communeStatement .
?communeStatement ps:P31 wd:Q484170 .
FILTER NOT EXISTS {
?communeStatement ?communeStatementQualifier ?communeStatementValue .
?communeStatementProperty wikibase:qualifier ?communeStatementQualifier .
}
MINUS {
?commune wdt:P131 ?departementDejaPresent .
?departementDejaPresent wdt:P31 wd:Q6465 .
}
?commune wdt:P131 ?canton .
?canton wdt:P31 wd:Q184188 .
?canton p:P31 ?cantonExistsStatement .
?cantonExistsStatement ps:P31 wd:Q184188 .
FILTER NOT EXISTS {
?cantonExistsStatement ?cantonExistsStatementQualifier ?cantonExistsStatementValue .
?cantonExistsStatementProperty wikibase:qualifier ?cantonExistsStatementQualifier .
}
?canton wdt:P131 ?arrondissement .
?arrondissement wdt:P31 wd:Q194203 .
?arrondissement p:P31 ?arrondissementExistsStatement .
?arrondissementExistsStatement ps:P31 wd:Q194203 .
FILTER NOT EXISTS {
?arrondissementExistsStatement ?arrondissementExistsStatementQualifier ?arrondissementExistsStatementValue .
?arrondissementExistsStatementProperty wikibase:qualifier ?arrondissementExistsStatementQualifier .
}
?arrondissement wdt:P131 wd:Q12689 .
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr" . }
} ORDER BY ?commune
9 résultats
Plus qu’à s’atteler à tous les autres départements, un par un. Soit :
SELECT DISTINCT ?departement ?departementLabel
WHERE {
?departement p:P31 ?departementStatement .
?departementStatement ps:P31 wd:Q6465 .
FILTER NOT EXISTS {
?departementStatement ?departementStatementQualifier ?departementStatementValue .
?departementStatementProperty wikibase:qualifier ?departementStatementQualifier .
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr" . }
} ORDER BY ?departementLabel
97 résultats, n’incluant pas les DOM
- Ain : 3 communes
- Aisne : 10 communes
- Allier : 8 communes
- Alpes-Maritimes : 2 communes
- Alpes-de-Haute-Provence : 8 communes
- Ardennes : 452 communes
- Ardèche : 338 communes
- Ariège : 330 communes
- Aube : 427 communes
- Aude : 433 communes
- Aveyron : 277 communes
- Bas-Rhin : 6 communes
- Bouches-du-Rhône : 115 communes
- Calvados : 141 communes
- Cantal : 251 communes
- Charente : 382 communes
- Charente-Maritime : 450 communes
- Cher : 289 communes
- Corrèze : 281 communes
- Corse-du-Sud : 123 communes
- Creuse : 1 commune
- Côte-d’Or : 691 communes
- Côtes-d’Armor : 355 communes
- Deux-Sèvres : 295 communes
- Dordogne : 61 communes
- Doubs : 99 communes
- Drôme : 365 communes
- Essonne : 8 communes
- Eure : 165 communes
- Eure-et-Loir : 387 communes
- Finistère : 271 communes
- Gard : 347 communes
- Gers : 443 communes
- Gironde : 534 communes
- Haut-Rhin : 2 communes
- Haute-Corse : 9 communes
- Haute-Garonne : 54 communes
- Haute-Loire : 247 communes
- Haute-Marne : 6 communes
- Haute-Savoie : 276 communes
- Haute-Saône : 530 communes
- Haute-Vienne : 197 communes
- Hautes-Alpes : 5 communes
- Hautes-Pyrénées : 4 communes
- Hauts-de-Seine : 17 communes
- Hérault : 8 communes
- Ille-et-Vilaine : 8 communes
- Indre : 241 communes
- Indre-et-Loire : 276 communes
- Isère : 512 communes
- Jura : 484 communes
- Landes : 282 communes
- Loir-et-Cher : 279 communes
- Loire : 1 commune
- Loire-Atlantique : 4 communes
- Loiret : 323 communes
- Lot : 321 communes
- Lot-et-Garonne : 318 communes
- Lozère : 1 commune
- Maine-et-Loire : 219 communes
- Manche : 64 communes
- Marne : 615 communes
- Mayenne : 250 communes
- Meurthe-et-Moselle : 2 communes
- Meuse : 499 communes
- Morbihan : 250 communes
- Moselle : 2 communes
- Nièvre : 310 communes
- Nord : 612 communes
- Oise : 688 communes
- Orne : 8 communes
- Pas-de-Calais : 9 communes
- Puy-de-Dôme : 457 communes
- Pyrénées-Atlantiques : 55 communes
- Pyrénées-Orientales : 206 communes
- Rhône : 6 communes
- Sarthe : 360 communes
- Savoie : 286 communes
- Saône-et-Loire : 24 communes
- Seine-Maritime : 707 communes
- Seine-Saint-Denis : 3 communes
- Seine-et-Marne : 31 communes
- Somme : 780 communes
- Tarn : 316 communes
- Tarn-et-Garonne : 3 communes
- Territoire de Belfort : 1 commune
- Val-d’Oise : 10 communes
- Val-de-Marne : 7 communes
- Var : 152 communes
- Vaucluse : 132 communes
- Vendée : 261 communes
- Vienne : 279 communes
- Vosges : 10 communes
- Yonne : 3 communes
- Yvelines : 8 communes
Total : 20 379 communes traitées. C’est déjà pas mal, je trouve. Voyons voir combien cette méthode m’en a fait louper, du moins parmi les communes qui existent encore.
SELECT ?item ?itemLabel ?localisationAdministrative ?localisationAdministrativeLabel WHERE {
?item p:P31 ?communeStatement .
?communeStatement ps:P31 wd:Q484170 .
FILTER NOT EXISTS {
?communeStatement pq:P582 ?communeStatementQualifier .
}
MINUS {
?item wdt:P131 ?sub0 .
?sub0 wdt:P31 wd:Q6465 .
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "fr" .
}
} ORDER BY ?itemLabel
471 résultats
En y regardant de plus près, il semble qu’elles utilisent les « nouveaux cantons » comme localisation administrative. Qu’à cela ne tienne.
SELECT DISTINCT ?commune ?communeLabel ?departement ?departementLabel
WHERE {
?commune p:P31 ?communeStatement .
?communeStatement ps:P31 wd:Q484170 .
MINUS {
?commune wdt:P131 ?departementDejaPresent .
?departementDejaPresent wdt:P31 wd:Q6465 .
}
?commune wdt:P131 ?canton .
?canton wdt:P31 wd:Q18524218 .
{
?canton wdt:P131 ?departement .
}
UNION
{
?canton wdt:P131 ?arrondissement .
?arrondissement wdt:P31 wd:Q194203 .
?arrondissement wdt:P31 wd:Q194203 .
?arrondissement wdt:P131 ?departement .
}
?departement wdt:P31 wd:Q6465 .
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr" . }
} ORDER BY ?departementLabel ?communeLabel
256 résultats
Le genre de trucs qu’on peut presque faire à la main. D’un autre côté, pourquoi s’embêter ? Quick Statements est là pour ça, non ? Plus qu’à récupérer le JSON et à le transformer en TSV.
<?php $communes = \json_decode( \file_get_contents( __DIR__ . '/query.json' ), true ); foreach ( $communes as $commune ) { echo \str_replace( 'http://www.wikidata.org/entity/', '', $commune['commune'] ) . "\tP131\t" . \str_replace( 'http://www.wikidata.org/entity/', '', $commune['departement'] ) . "\n"; } echo "DONE !\n";
256 lignes de résultats, ça va, je tombe pas de ma chaise
Mais alors il reste quand même quelques communes à traiter, non ? Lesquelles ? Ne comptons pas les communes disparues, et profitons de la faible taille du jeu de données pour complexifier la requête en incluant les DOM dans les départements à exclure si indiqués.
SELECT ?commune ?communeLabel ?communeStatementEnd WHERE {
?commune p:P31 ?communeStatement .
?communeStatement ps:P31 wd:Q484170 .
FILTER NOT EXISTS {
?communeStatement pq:P582 ?communeStatementEnd .
}
MINUS {
?commune wdt:P131 ?departementDejaPresent .
?departementDejaPresent wdt:P31/wdt:P279* wd:Q6465 .
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "fr" .
}
} ORDER BY ?communeLabel
299 résultats
Subsistent les communes placées dans des collectivités d’outre-mer – exemple de Alo à Wallis-et-Futuna -, celles placées directement dans leur arrondissement – Rouen -, et celles placées de manière privilégiée dans un canton, par opposition au(x) canton(s) dans le(s)quel(s) elles étaient avant le redécoupage cantonal de 2014 qui sont considérés dépréciés – Falaise. C’est un mésusage des rangs sur Wikidata : la seule dépréciation de l’ancien canton suffisait, ou à défaut un qualificateur pour cette relation.
Voyons pour les arrondissements :
SELECT DISTINCT ?commune ?communeLabel ?departement ?departementLabel
WHERE {
?commune p:P31 ?communeStatement .
?communeStatement ps:P31 wd:Q484170 .
FILTER NOT EXISTS {
?communeStatement pq:P582 ?communeStatementEnd .
}
MINUS {
?commune wdt:P131 ?departementDejaPresent .
?departementDejaPresent wdt:P31 wd:Q6465 .
}
?commune wdt:P131 ?arrondissement .
?arrondissement wdt:P31 wd:Q194203 .
?arrondissement wdt:P131 ?departement .
?departement wdt:P31 wd:Q6465 .
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr" . }
} ORDER BY ?departementLabel ?communeLabel
18 résultats
Reste maintenant à rendre un rang acceptable aux cantons actuellement privilégiés des communes, et à donner aux communes disparues (par dissolution, fusion, dégradation au rang de « commune associée », etc) le département dans lequel elles se situaient.
Pour les cantons privilégiés, la requête est plus simple qu’il n’y paraît, wikibase:rank
étant peu répandu et pourtant fonctionnel.
SELECT ?commune ?communeLabel ?canton ?cantonLabel ?cantonStatement
WHERE {
?commune wdt:P31 wd:Q484170 .
?commune p:P131 ?cantonStatement .
?cantonStatement ps:P131 ?canton .
?canton wdt:P31 ?cantonEntities .
VALUES ?cantonEntities { wd:Q18524218 wd:Q184188 } # anciens et nouveaux cantons, parce qu'une seule classe c'était trop simple et pratique
?cantonStatement wikibase:rank wikibase:PreferredRank . # qui ont une déclaration pour P131 (localisation administrative) de rang privilégié
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
}
23 résultats
Ça va, y’en avait pas bien lourd.
Je crois bien qu’on a exploré tous les cas sauf un : les communes disparues. Vérifions.
SELECT ?commune ?communeLabel ?communeStatementEnd WHERE {
?commune p:P31 ?communeStatement .
?communeStatement ps:P31 wd:Q484170 .
MINUS {
?commune wdt:P131 ?departementDejaPresent .
{
?departementDejaPresent wdt:P31/wdt:P279* wd:Q6465 .
}
UNION
{
VALUES ?departementDejaPresent { wd:Q719487 wd:Q129003 } # "collectivités d'outre-mer", "terres australes et antarctiques françaises", respectivement
}
}
OPTIONAL {
?communeStatement pq:P582 ?communeStatementEnd .
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "fr" .
}
} ORDER BY ?communeLabel
17 résultats
À cinq résultats près, des hameaux ou quartiers mal classifiés (Lesponne, Polangis, Rochebonne), une commune dont l’ancien canton est déprécié (je vous avais bien dit que ce n’était pas idéal) et le nouveau pas encore indiqué (Montlay-en-Auxois), et un nom d’usage d’une commune employé comme entité distincte de la commune elle-même (Montpezat-d’Agenais), c’est le cas !
Onze anciennes communes, dont une a cessé deux fois d’être une commune (La Neuvillette, deuxième information sûrement anecdotique à propos de Reims).
Voyons voir ce qu’on a oublié, comptant ce coup-ci les ROM/DOM/COM/TAAF comme départements.
SELECT ?commune ?communeLabel ?departement ?departementLabel WHERE {
?commune p:P31 ?communeStatement .
?communeStatement ps:P31 wd:Q484170 .
MINUS {
{
?commune wdt:P131 ?departementDejaPresent .
?departementDejaPresent wdt:P31 ?departementDejaPresentValues .
VALUES ?departementDejaPresentValues { wd:Q6465 wd:Q719487 wd:Q202216 } # departement COM DOM
}
UNION
{
?commune wdt:P131 wd:Q129003 . # TAAF
}
}
?commune wdt:P131* ?departement .
?departement wdt:P31/wdt:P279* wd:Q6465 .
FILTER NOT EXISTS {
?communeStatement pq:P582 ?communeStatementEnd .
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "fr" .
}
} ORDER BY ?departementLabel ?communeLabel
155 résultats
Je balaye discrètement sous le tapis les communes placées par mes soins à Sant-Pol de Mar (Q12534) au lieu de Haute-Garonne (Q12538) (les typos, c’est mal), faites comme si vous n’avez rien vu. Poursuivons.
On trouve désormais les communes qui n’étaient pas encore passées à la moulinette pour une raison que je ne peux discerner. Des bugs de Wikidata Query Service qui ne les avait pas listées précédemment ? Possible.
Parmi ce qui reste, on compte d’anciennes communes « localisées » dans une commune actuelle, des hameaux indiqués comme communes alors qu’ils ne l’ont jamais été, un nom d’usage d’une commune considéré comme une commune à part entière, et quelques bugs venant de WDQS, indiquant des communes déjà correctement localisées : je ne suis pas peu fier, je crois bien que j’ai fini – du moins, pour les communes existant encore. Je vous laisse traiter les communes disparues, si vous voulez vous amuser.
Vous pouvez aussi venir discuter du possible démêlage des cantons anciens et nouveaux, répartis dans deux classes au lieu d’être regroupés en une seule avec des qualificateurs sur le Bistro de Wikidata.
Sinon, vers le milieu, j’ai inséré les conditions d’utilisation d’iOS, mais mon post est un tel pavé que vous les avez sûrement loupées…
Remerciements :
- shonagon pour l’étoile (et j’en ai profité pour apprendre que ça marche aussi avec le plus)
- Ash_Crow pour le slash (et ça marche aussi avec l’étoile et le plus)
- WikidataFacts pour les déclaration rejetées à l’arrache compte tenu de leurs qualificateurs, même si c’est plus propre avec
wikibase:qualifier
- Dereckson pour m’avoir lu grogner jusqu’à des heures avancées de la nuit
- Magnus Manske pour wikidata useful, Quick Statements, etc…
- Et si je vous ai oublié, ben faites signe
Leave a Reply