blob: 9fb717f6b795ad721ab3db972c08ea87fa3ec5ef [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>ConceptualModels</title>
<meta charset="UTF-8"/>
<link rel="stylesheet" type="text/css" href="../../../content/book/book.css"/>
</head>
<body>
<!--
Content below this point is copied in "../../content/book/fr/developer-guide.html"
by the 'org.apache.sis.internal.book.Assembler' class in 'sis-build-helper' module.
-->
<section>
<header>
<h2 id="ConceptualModels">Sources des modèles conceptuels de Apache SIS</h2>
</header>
<p>
La majorité des standards utilisés par Apache <abbr>SIS</abbr> ont été élaborés
par le <a href="https://www.ogc.org/">consortium <i>Open Geospatial</i></a> (<abbr>OGC</abbr>),
parfois en collaboration avec l’<a href="https://www.iso.org/">organisation internationale de normalisation</a> (<abbr>ISO</abbr>).
Certains standards de l’<abbr>ISO</abbr> deviennent eux-mêmes des standards Européens via la
<a href="http://inspire.jrc.ec.europa.eu">directive INSPIRE</a>, ou des standards français via l’<abbr>AFNOR</abbr>.
Ces standards offrent deux technologies clés:
</p>
<ul>
<li>
Permettre à une communauté d’annoncer leurs informations,
de manière à ce que des individus ou des systèmes en dehors de cette communauté puissent les découvrir.
</li>
<li>
Transférer des informations d’une communauté vers une autre en préservant leurs sémantiques,
même si les deux communautés utilisent des représentations internes très différentes.
</li>
</ul>
<p>
Ces standards sont fournis gratuitement à la communauté internationale sous la forme de
<a href="https://www.ogc.org/standards/is">spécifications (fichiers <abbr title="Portable Document Format">PDF</abbr>)</a> ou de
<a href="http://schemas.opengis.net/gml/3.3/">schémas (fichiers <abbr title="XML Schema Definition">XSD</abbr>)</a>.
Les organismes de normalisation ne fabriquent pas de logiciel; pour obtenir une implémentation de ces spécifications,
les utilisateurs doivent choisir un des produits conformes disponibles sur le marché ou développer leur propres solutions.
C’est le respect volontaire de ces spécifications qui permet à des communautés à priori indépendantes d’échanger
plus facilement des informations géographiques.
</p>
<details>
<summary>Pour en savoir plus sur le processus de standardisation</summary>
<article id="OGC-process">
<header>
<h2>Processus de standardisation à l’<abbr>OGC</abbr></h2>
</header>
<p>
Les travaux de l’<abbr title="Open Geospatial Consortium">OGC</abbr> se font par courriers électroniques,
par conférences téléphoniques et par <a href="https://www.ogc.org/event?category=ogctcpc">réunions réelles</a>.
L’<abbr>OGC</abbr> organise quatre réunions par années, chacune d’une durée de cinq jours,
hébergées par des organisations membres sponsorisant l’événement (compagnies, universités, centres de recherches, <i>etc.</i>).
Le continent hôte alterne entre l’Europe et l’Amérique du Nord, avec une présence croissante en Asie depuis 2011.
Ces réunions reçoivent habituellement entre 50 et 100 participants parmi les centaines de membres de l’<abbr>OGC</abbr>.
Certains participants sont présents à quasiment toutes les réunions et constituent des piliers de l’organisation.
Les réunions de l’<abbr>OGC</abbr> offrent des opportunités d’échanges avec des membres d’horizons diverses.
</p><p>
La création d’un standard <abbr>OGC</abbr> commence par le regroupement d’organisations ou d’individus constatant un intérêt commun pour une problématique.
Un groupe de travail est proposé sous l’appellation de <i>Domain Working Group</i> (<abbr>DWG</abbr>) ou <i>Standard Working Group</i> (<abbr>SWG</abbr>).
Les <abbr>DWG</abbr> sont ouverts à tout membre de l’<abbr>OGC</abbr>,
tandis que les <abbr>SWG</abbr> nécessitent de la part des participants un engagement à ne pas entraver
la diffusion du standard par des réclamations de propriétés intellectuelles.
</p>
<h3 id="OGC-SWG">Fonctionnement des groupes de travail (<abbr>SWG</abbr>)</h3>
<p>
Pour être accepté, un projet de standardisation doit être supporté par un nombre minimal de membres appartement à des organisations distinctes.
Ces membres fondateurs rédigent une charte définissant les objectifs du <abbr>SWG</abbr>,
qui doit être approuvée par le comité technique de l’<abbr>OGC</abbr>.
Chaque membre fondateur est doté d’un droit de vote, dans les limites d’un membre votant par organisation.
Tout nouveau membre qui souhaite joindre le <abbr>SWG</abbr> après sa création se verra attribué un rôle d’observateur,
avec attribution sur demande d’un droit de vote après quelques mois d’observation.
</p><p>
Un <abbr>SWG</abbr> peut contenir plusieurs dizaines de membres,
mais les volontaires effectuant l’essentiel du travail sont habituellement moins nombreux.
Leurs propositions sont soumises à l’ensemble des membres du groupe, qui peuvent les accepter par consentement unanime.
Les objections, s’il y en a, doivent être argumentées et une alternative proposée.
Les <abbr>SWG</abbr> essaient généralement de débattre d’un problème jusqu’à ce qu’un consensus se forme
plutôt que d’avancer malgré des votes négatifs, même s’ils sont minoritaires.
Les décisions du groupes sont alors intégrées dans la spécification par un membre assumant le rôle d’éditeur.
</p><p>
Le groupe de travail doit autant que possible structurer la spécification sous forme d’un noyau autour duquel gravite diverses extensions.
Une suite de tests doit accompagner le standard, et permettre de classer les implémentations en fonction du niveau des tests passés.
Au moins une <i>implémentation de référence</i> passant les tests doit exister pour démontrer que le standard est utilisable.
</p><p>
Lorsque le standard est jugé prêt, le <abbr>SWG</abbr> vote une motion
proposant de le soumettre au vote des instances supérieures de l’<abbr>OGC</abbr>.
Cette procédure nécessite plusieurs mois.
Il existe une procédure plus rapide pour entériner des standards de fait, mais elle n’est appliquée qu’avec parcimonie.
</p>
<h3 id="OGC-OAB">Le conseil d’architecture (<abbr>OAB</abbr>) et le comité technique (<abbr>TC</abbr>)</h3>
<p>
Toute proposition de standard est d’abord examinée par le conseil d’architecture (<i><abbr>OGC</abbr> Architecture Board</i><abbr>OAB</abbr>).
Ce conseil vérifie que le standard répond aux exigences de l’<abbr>OGC</abbr> sur la forme,
sur la modularisation, et en termes d’intégration avec les autres standards.
Si l’<abbr>OAB</abbr> donne son aval, le standard est alors soumis au vote des membres du comité technique (<abbr>TC</abbr>).
Ce comité regroupe les principaux membres de l’<abbr>OGC</abbr> qui sont seuls habilités à donner le vote final.
En cas d’approbation, le standard est diffusé publiquement pour commentaires pendant une période de quelques mois.
Au terme de cette période, le <abbr title="Standard Working Group">SWG</abbr> doit examiner et répondre à chacun des commentaires.
Les éventuelles modifications au standard sous soumises à l’<abbr>OAB</abbr>, puis le standard est définitivement publié.
Cette diffusion est alors annoncée par un communiqué de presse de l’<abbr>OGC</abbr>.
</p><p>
Certains membres de l’<abbr title="Open Geospatial Consortium">OGC</abbr> et du <abbr title="Technical Committe">TC</abbr>
assurent aussi la liaison avec l’organisation internationale de normalisation (<abbr title="International Organization for Standardization">ISO</abbr>).
La coopération entre les deux organismes va dans les deux sens: l’<abbr>OGC</abbr> adopte les standards <abbr>ISO</abbr> comme base sur
laquelle développer de nouveaux standards, et certains de ces nouveaux standards <abbr>OGC</abbr> deviennent des standards <abbr>ISO</abbr>.
</p>
<h3 id="OGC-RFC">Procédure de soumission de propositions de modifications</h3>
<p>
Tout utilisateur, qu’il soit membre ou non du consortium <i>Open Geospatial</i>, peut proposer des modifications à des standards <abbr>OGC</abbr>.
Une liste des propositions actuelles de changements, ainsi qu’un formulaire permettant d’en soumettre de nouvelles,
sont <a href="https://www.ogc.org/standards/cr">disponibles en ligne</a>.
Chaque proposition est revue par le <abbr title="Standard Working Group">SWG</abbr>.
</p><p>
Certains groupes de travail utilisent d’autres systèmes de soumission en parallèle, par exemple GitHub,
hébergés en dehors des structures de l’<abbr>OGC</abbr>.
</p>
</article>
</details>
<p>
Outre ces organisations formelles de normalisation, il existe aussi des organisations qui ne sont pas officiellement
dédiées à l’élaboration de normes mais dont les travaux ont été largement adoptés comme standards de fait.
En particulier, la base de données <a href="https://epsg.org/">EPSG</a> fournit des codes numériques permettant d’identifier
facilement un système de référence des coordonnées parmi <a href="../../tables/CoordinateReferenceSystems.html">plusieurs milliers</a>.
Cette base de données est offerte par des compagnies pétrolières qui ont vu leur intérêt à ce que leurs prospections se fassent
bien à l’endroit voulu, sachant qu’elles ne contrôlent pas toujours la production des cartes sur lesquelles elles se positionnent.
D’autres exemples de standards de fait sont les formats
<a href="http://geotiff.osgeo.org">GeoTIFF</a> pour les données réparties sur une grille (les images), et
<a href="http://fr.wikipedia.org/wiki/Shapefile">Shapefile</a> pour les données vectorielles (les géométries).
</p><p>
Les standards <abbr>OGC</abbr> sont spécifiés dans plusieurs dizaines de documents.
Chaque document élabore un service, par exemple les transformations de coordonnées.
Le fonctionnement de chaque service est décrit par un ensemble de classes d’objets et leurs interactions.
Ces éléments sont illustrés par des diagrammes <abbr>UML</abbr> (<i>Unified Modeling Language</i>)
dans des spécifications dites « abstraites ».
Les <a href="https://www.ogc.org/standards/as">spécifications abstraites</a> ne font référence à aucun langage informatique concret.
Leurs concepts peuvent se concrétiser dans un langage de programmation, une base de données ou un schéma <abbr>XML</abbr> de manière plus ou moins directe.
Il existe toutefois une part d’arbitraire dans la façon de concrétiser une spécification abstraite, étant donné que des ajustements sont souvent nécessaires
pour tenir compte des contraintes ou des conventions du langage ciblé.
Certaines structures de données n’existent que dans quelques langages, par exemple les unions qui existent en C/C++ mais pas en Java.
</p>
<details>
<summary>Pour en savoir plus sur les « spécifications d’implémentation »</summary>
<article id="implementation-standard">
<header>
<h2>Note historique</h2>
</header>
<p>
Au tournant du millénaire, les spécifications abstraites étaient explicitement concrétisées dans des <i>spécifications d’implémentations</i>.
Le terme « implémentation » était ici à prendre au sens de tout type d’interfaces (Java ou autres) dérivées des diagrammes
<abbr title="Unified Modeling Language">UML</abbr> — et non pas d’implémentations au sens du Java.
Des telles spécifications existaient pour les langages <abbr title="Structured Query Language">SQL</abbr>,
<abbr title="Common Object Request Broker Architecture">CORBA</abbr>, <abbr title="Component Object Model">COM</abbr> et Java.
Ces langages étant capables d’exécuter des procédures, les spécifications de cette époque définissaient
non seulement des structures de données, mais aussi des opérations s’appliquant sur ces structures.
</p><p>
Par la suite, l’engouement pour le « web 2.0 » a fait grimper l’intérêt pour le <abbr>XML</abbr> au détriment des autres langages.
Les anciennes spécifications d’implémentations ont été dépréciées, et les schémas <abbr title="XML Schema Definition">XSD</abbr>
sont devenus la principale concrétisation des spécifications abstraites.
Même la façon de concevoir les spécifications abstraites a évoluée: les opérations y sont plus rarement définies,
par conséquence ce qui reste ressemble davantage à des descriptions de schémas de base de données.
Certaines opérations qui étaient définies dans les anciennes normes apparaissent maintenant, sous une autre forme, dans les spécifications des services web.
Enfin le terme « spécification d’implémentation » a été abandonné, pour être englobé dans « standard <abbr title="Open Geospatial Consortium">OGC</abbr> ».
Mais malgré leur dépréciation, les <a href="https://www.ogc.org/docs/retired">anciennes spécifications d’implémentation</a>
restent utiles aux programmes en langage Java car:
</p>
<ul>
<li>
Leurs modèles plus simples, appliqués aux mêmes concepts, aident à comprendre les nouvelles spécifications.
</li>
<li>
Ils définissent parfois des façons simples d’effectuer des tâches courantes
là où les nouvelles spécifications se limitent au cas général.
</li>
<li>
Les opérations étant plus souvent omises dans les nouvelles spécifications,
les anciennes spécifications restent un complément utile pour définir des <abbr>API</abbr>.
</li>
</ul>
<p>
Le projet Apache <abbr title="Spatial Information System">SIS</abbr> se base sur les spécifications les plus récentes,
tout en puisant dans les archives de l’<abbr title="Open Geospatial Consortium">OGC</abbr>
pour compléter certains standards abstraits ou les rendre un peu plus facile d’utilisation.
Certaines anciennes définitions sont conservées comme « méthodes de commodités »,
n’apportant pas toujours de nouvelles fonctionnalités mais facilitant l’usage pratique d’une bibliothèque.
</p>
</article>
</details>
<p>
Le tableau suivant liste les principales normes utilisées par le projet.
Plusieurs normes sont publiées à la fois comme standard <abbr>ISO</abbr> et comme standard <abbr>OGC</abbr>,
d’où la disposition côte-à-côte des deux premières colonnes.
La section des « spécifications d’implémentation » liste des spécifications qui apportent peu de concepts nouveaux
comparativement aux spécifications abstraites, mais précisent comment les représenter dans des contextes précis
tels qu’un document <abbr>XML</abbr>.
Les normes dépréciées mais malgré tout partiellement utilisées apparaissent <s>barrées</s>.
Enfin, les paquets GeoAPI seront introduits dans le chapitre suivant.
</p>
<table>
<caption>Principaux standards en relation avec le projet Apache <abbr>SIS</abbr></caption>
<tr>
<th>Norme <abbr>ISO</abbr></th>
<th>Norme <abbr>OGC</abbr></th>
<th>Titre</th>
<th>Paquet de GeoAPI</th>
<th>Paquet de Apache SIS</th>
</tr><tr>
<td class="separator" colspan="5">Spécifications abstraites</td>
</tr><tr>
<td><abbr>ISO</abbr> 19103</td>
<td></td>
<td><i>Conceptual schema language</i></td>
<td><code class="GeoAPI">….util</code></td>
<td><code class="SIS">….util.iso</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 19115-1</td>
<td>Topic 11</td>
<td><i>Metadata</i></td>
<td><code class="GeoAPI">….metadata</code></td>
<td><code class="SIS">….metadata.iso</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 19115-2</td>
<td></td>
<td><i>Metadata — extensions for imagery and gridded data</i></td>
<td><code class="GeoAPI">….metadata</code></td>
<td><code class="SIS">….metadata.iso</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 19111</td>
<td>Topic 2</td>
<td><i>Spatial referencing by coordinates</i></td>
<td><code class="GeoAPI">….referencing</code></td>
<td><code class="SIS">….referencing</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 19111-2</td>
<td></td>
<td><i>Referencing — extension for parametric values</i></td>
<td><code class="GeoAPI">….referencing</code></td>
<td><code class="SIS">….referencing</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 19112</td>
<td></td>
<td><i>Spatial referencing by geographic identifier</i></td>
<td><code class="GeoAPI">….referencing.gazetteer</code></td>
<td><code class="SIS">….referencing.gazetteer</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 19108</td>
<td></td>
<td><i>Temporal Schema</i></td>
<td><code class="GeoAPI">….temporal</code></td>
<td></td>
</tr><tr>
<td><abbr>ISO</abbr> 19107</td>
<td>Topic 1</td>
<td><i>Feature geometry</i></td>
<td><code class="GeoAPI">….geometry</code></td>
<td><code class="SIS">….geometry</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 19109</td>
<td>Topic 5</td>
<td><i>Rules for application schema</i></td>
<td><code class="GeoAPI">….feature</code></td>
<td><code class="SIS">….feature</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 19123</td>
<td>Topic 6</td>
<td><i>Schema for coverage geometry and functions</i></td>
<td><code class="GeoAPI">….coverage</code></td>
<td><code class="SIS">….coverage</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 19156</td>
<td>Topic 20</td>
<td><i>Observations and measurements</i></td>
<td><code class="GeoAPI">….observation</code></td>
<td></td>
</tr><tr>
<td class="separator" colspan="5">Spécifications d’implémentation</td>
</tr><tr>
<td><abbr>ISO</abbr> 19139</td>
<td></td>
<td><i>Metadata <abbr>XML</abbr> schema implementation</i></td>
<td></td>
<td><code class="SIS">….xml</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 19136</td>
<td>OGC 07-036</td>
<td><i>Geography Markup Language (<abbr>GML</abbr>) Encoding Standard</i></td>
<td></td>
<td><code class="SIS">….xml</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 19162</td>
<td>OGC 12-063</td>
<td><i>Well-known text representation of coordinate reference systems</i></td>
<td></td>
<td><code class="SIS">….io.wkt</code></td>
</tr><tr>
<td></td>
<td><s><abbr>OGC</abbr> 01-009</s></td>
<td><s><i>Coordinate Transformation Services</i></s></td>
<td><code class="GeoAPI">….referencing</code></td>
<td><code class="SIS">….referencing</code></td>
</tr><tr>
<td></td>
<td><s><abbr>OGC</abbr> 01-004</s></td>
<td><s><i>Grid Coverage</i></s></td>
<td><code class="GeoAPI">….coverage</code></td>
<td><code class="SIS">….coverage</code></td>
</tr><tr>
<td></td>
<td><abbr>OGC</abbr> 10-092</td>
<td><i>NetCDF binary encoding: classic and 64-bit offset format</i></td>
<td></td>
<td><code class="SIS">….storage.netcdf</code></td>
</tr><tr>
<td></td>
<td><abbr>OGC</abbr> 14-084</td>
<td><i>Moving features Comma Separated Values (CSV) encoding</i></td>
<td></td>
<td><code class="SIS">….storage</code></td>
</tr><tr>
<td><abbr>ISO</abbr> 13249</td>
<td></td>
<td><i><abbr>SQL</abbr> spatial</i></td>
<td></td>
<td></td>
</tr><tr>
<td></td>
<td><abbr>SLD</abbr></td>
<td><i>Styled Layer Descriptor</i></td>
<td><code class="GeoAPI">….style</code></td>
<td></td>
</tr><tr>
<td class="separator" colspan="5">Services web</td>
</tr><tr>
<td></td>
<td><abbr>CSW</abbr></td>
<td><i>Catalog Services</i></td>
<td></td>
<td></td>
</tr><tr>
<td><abbr>ISO</abbr> 19128</td>
<td><abbr>WMS</abbr></td>
<td><i>Web Map Service</i></td>
<td></td>
<td></td>
</tr><tr>
<td></td>
<td><abbr>WMTS</abbr></td>
<td><i>Web Map Tile Service</i></td>
<td></td>
<td></td>
</tr><tr>
<td><abbr>ISO</abbr> 19142</td>
<td><abbr>WFS</abbr></td>
<td><i>Web Feature Service</i></td>
<td></td>
<td></td>
</tr><tr>
<td></td>
<td><abbr>WCS</abbr></td>
<td><i>Web Coverage Service</i></td>
<td></td>
<td></td>
</tr><tr>
<td></td>
<td><abbr>WPS</abbr></td>
<td><i>Web Processing Service</i></td>
<td></td>
<td></td>
</tr><tr>
<td></td>
<td>Open<abbr>LS</abbr></td>
<td><i>Location Services</i></td>
<td></td>
<td></td>
</tr><tr>
<td></td>
<td><abbr>SWE</abbr></td>
<td><i>Sensor Web Enablement</i></td>
<td></td>
<td></td>
</tr><tr>
<td></td>
<td><abbr>SOS</abbr></td>
<td><i>Sensor Observation Service</i></td>
<td></td>
<td></td>
</tr>
</table>
</section>
</body>
</html>