blob: 3756011f894b6f95cd83a3bfc695b6c1a73fb7c5 [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="en">
<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/en/developer-guide.html"
by the 'org.apache.sis.internal.book.Assembler' class in 'sis-build-helper' module.
-->
<section>
<header>
<h2 id="ConceptualModels">Sources of conceptual models used by Apache SIS</h2>
</header>
<p>
Most standards used by Apache <abbr>SIS</abbr> have been devised by the <a href="https://www.ogc.org/">Open Geospatial Consortium</a> (<abbr>OGC</abbr>),
sometimes in collaboration with the <a href="https://www.iso.org/">International Organization for Standardization</a> (<abbr>ISO</abbr>).
Some <abbr>ISO</abbr> standards themselves become European standards via the <a href="http://inspire.jrc.ec.europa.eu">INSPIRE Directive</a>.
These standards offer two key features:
</p>
<ul>
<li>
Allowing a community to make its information public in such a way that outside individuals or systems can discover it.
</li>
<li>
Transferring information from one community to another while preserving its semantics,
even if the two communities use very different internal representations.
</li>
</ul>
<p>
These standards are made available to the international community for free,
as <a href="https://www.ogc.org/standards/is">specifications (<abbr title="Portable Document Format">PDF</abbr> files)</a> or
as <a href="http://schemas.opengis.net/gml/3.3/">schemas (<abbr title="XML Schema Definition">XSD</abbr> files)</a>.
Standardization organizations do not create software; to obtain an implementation of these specifications,
users must choose one of the compliant products available on the market, or develop their own solutions.
Such voluntary compliance with these specifications allow independent communities to more easily exchange geographic information.
</p>
<details>
<summary>More about standardization process</summary>
<article id="OGC-process">
<header>
<h2><abbr>OGC</abbr> standardization process</h2>
</header>
<p>
The work of the <abbr title="Open Geospatial Consortium">OGC</abbr> is done by email, teleconferences, and at <a href="https://www.ogc.org/event?category=ogctcpc">in-person meetings</a>.
The <abbr>OGC</abbr> organizes four meetings per year, each lasting five days, and hosted by member organizations that sponsor the event (companies, universities, research centres, <i>etc</i>).
The host continent alternates between Europe and North America, with a growing presence in Asia since 2011.
These meetings are usually attended by between 50 and 100 participants from among the hundreds of members of the <abbr>OGC</abbr>.
Some participants are present at almost all the meetings, forming the pillars of the organization.
The meetings of the <abbr>OGC</abbr> offer opportunities for exchange among members from diverse backgrounds.
</p><p>
The creation of a <abbr>OGC</abbr> standard begins with a gathering of organizations or individuals with a common interest in an issue.
A working group is proposed as a <i>Domain Working Group</i> (<abbr>DWG</abbr>) or as a <i>Standard Working Group</i> (<abbr>SWG</abbr>).
<abbr>DWG</abbr>s are open to all members of the <abbr>OGC</abbr>,
while <abbr>SWG</abbr>s require that their participants enter into an agreement not to hinder the distribution of the standard through intellectual property claims.
</p>
<h3 id="OGC-SWG">Standard Working Group (<abbr>SWG</abbr>) procedures</h3>
<p>
In order to be accepted, a standardization project must be supported by a minimum number of members belonging to distinct organizations.
These founding members draft a charter defining the objectives of the <abbr>SWG</abbr>,
which must be approved by the Technical Committee of the <abbr>OGC</abbr>.
Each founding member is endowed with the right to vote, with a limit of one voting member per organization.
Each new member that wishes to join the <abbr>SWG</abbr> after its creation is granted the role of observer,
and receives on request the right to vote after several months of observation.
</p><p>
A <abbr>SWG</abbr> may contain several dozen members, but the volunteers performing the bulk of the work are usually fewer.
Their proposals are submitted to the entire membership of the group, who may accept them by unanimous consent.
Any objections must be debated, and an alternative proposed.
<abbr>SWG</abbr>s usually try to debate an issue until a consensus emerges rather than move ahead despite negative votes,
even if those opposed are in a minority.
The decisions of the group are then integrated into the specifications by a member who assumes the role of editor.
</p><p>
As far as possible, the working group must structure the specifications as a core around which various extensions might be built.
A series of tests must accompany the standard, allowing implementations to be classified by the level of test passed.
There must be at least one <i>reference implementation</i> that passes all the tests in order to demonstrate that the standard is usable.
</p><p>
When the standard is considered ready, the <abbr>SWG</abbr> votes on a motion proposing its submission to a vote by the higher authorities of the <abbr>OGC</abbr>.
This process takes several months. There is a faster process for approving <i>de facto</i> standards, but it is applied sparingly.
</p>
<h3 id="OGC-OAB">The Architecture Board (<abbr>OAB</abbr>) and the Technical Committee (<abbr>TC</abbr>)</h3>
<p>
All proposals for standards are first examined by the <abbr>OGC</abbr> Architecture Board (<abbr>OAB</abbr>).
This board ensures that the standard conforms to the requirements of the <abbr>OGC</abbr> in form,
modularization, and in terms of integration with other standards.
If the <abbr>OAB</abbr> approves it, the standard is next submitted to a vote by the members of the Technical Committee (<abbr>TC</abbr>).
This committee consists of the principal members of the <abbr>OGC</abbr>, and only they are capable of granting final approval.
If approved, the standard is made publicly available for comments during a period of several months.
At the end of this period, the <abbr title="Standard Working Group">SWG</abbr> must examine and respond to each comment.
The eventual modifications of the standard are submitted to the <abbr>OAB</abbr>, then the standard is published in its final form.
This distribution is announced in a press release by the <abbr>OGC</abbr>.
</p><p>
Certain members of the <abbr title="Open Geospatial Consortium">OGC</abbr> and the <abbr title="Technical Committee">TC</abbr>
also act as liaisons with the International Organization for Standardization (<abbr>ISO</abbr>).
Cooperation between the two organizations goes two ways:
the <abbr>OGC</abbr> adopts the <abbr>ISO</abbr> standards as a foundation on which to develop new standards,
and certain <abbr>OGC</abbr> standards become <abbr>ISO</abbr> standards.
</p>
<h3 id="OGC-RFC">Procedure for the submission of proposals for modification</h3>
<p>
All users, whether or not they are members of the Open Geospatial Consortium, may propose modifications to <abbr>OGC</abbr> standards.
A list of current proposals for changes, along with a form for submitting new proposals, is <a href="https://www.ogc.org/standards/cr">available online</a>.
Each proposal is reviewed by the <abbr title="Standard Working Group">SWG</abbr>.
</p><p>
Some working groups use other parallel systems for submissions, for example GitHub merge requests, hosted outside of the structures of the <abbr>OGC</abbr>.
</p>
</article>
</details>
<p>
Besides these formal standardization organizations, there are organizations that are not officially dedicated
to the creation of standards, but whose work has largely been adopted as <i>de facto</i> standards.
In particular, the <a href="https://epsg.org/">EPSG repository</a> offers numeric codes which allow the easy identification of a
Coordinates Reference System (<abbr>CRS</abbr>) among <a href="../../tables/CoordinateReferenceSystems.html">several thousand</a>.
This database is offered by petroleum companies that have an interest in ensuring their explorations are conducted in the correct place,
even when using map produced by another party.
Other examples of <i>de facto</i> standards include <a href="http://geotiff.osgeo.org">GeoTIFF</a> for data distributed on a grid (such as images),
and <a href="http://en.wikipedia.org/wiki/Shapefile">Shapefile</a> for vector data (such as geometric shapes).
</p><p>
<abbr>OGC</abbr> standards are specified in several dozen documents.
Each document outlines a service — for example, the transformation of coordinates.
The function of each service is described by a collection of object classes and their interactions.
These elements are illustrated by <abbr>UML</abbr> (Unified Modeling Language) diagrams in specifications called “abstracts”.
<a href="https://www.ogc.org/standards/as">Abstract specifications</a> do not refer to any specific computer language.
Their concepts may be applied more or less directly to a programming language, a database or an <abbr>XML</abbr> schema.
There is always an element of arbitrariness in the method of applying an abstract specification,
given that adjustments are often necessary to take into account the constraints or conventions of the target language.
Certain data structures only exist in a few languages — for example, unions that exist in C/C++ but not in Java.
</p>
<details>
<summary>More about “implementation specifications”</summary>
<article id="implementation-standard">
<header>
<h2>Historical note</h2>
</header>
<p>
At the turn of the millennium, the abstract specifications were explicitly concretized in <i>implementation specifications</i>.
The term “implementation” is used here in the sense of all types of interfaces (Java or others) derived from
<abbr title="Unified Modeling Language">UML</abbr> diagrams, and not implementations in the Java sense.
Such specifications existed for <abbr title="Structured Query Language">SQL</abbr>,
<abbr title="Common Object Request Broker Architecture">CORBA</abbr>, <abbr title="Component Object Model">COM</abbr>, and Java languages.
As these languages are capable of executing procedures, the specifications of this period define not only data structures,
but also operations that apply to these structures.
</p><p>
Thereafter, enthusiasm for “Web 2.0” increased interest for <abbr>XML</abbr> over other languages.
Older implementation specifications were deprecated,
and <abbr title="XML Schema Definition">XSD</abbr> schemas became the main concretization of abstract specifications.
Even the way abstract specifications are designed has evolved: they are less likely to define operations, and so what remains is closer to descriptions of database schemas.
Some operations that were defined in older standards now appear, in another form, in web service specifications.
Finally, the term “implementation specification” has been deprecated, to be subsumed under the term “<abbr>OGC</abbr> standard.”
But despite their depreciation, <a href="https://www.ogc.org/docs/retired">old implementation specifications</a> remain useful to programs in Java, because:
</p>
<ul>
<li>Their simpler models, applied to the same concepts, are helpful in understanding new specifications.</li>
<li>They sometimes define easy ways to perform common tasks, where the newer specifications limit themselves to general cases.</li>
<li>As operations are more often omitted from the newer specifications, the old ones remain a useful supplement when defining <abbr>API</abbr>s.</li>
</ul>
<p>
The Apache <abbr>SIS</abbr> project is based on the most recent specifications,
drawing from the archives of the <abbr>OGC</abbr> to complete certain abstract standards or make them more usable.
Some old definitions are preserved as “convenience methods”, not always bringing new functionality, but facilitating the practical use of a library.
</p>
</article>
</details>
<p>
The following table lists the main norms used by the project.
Many norms are published both as <abbr>ISO</abbr> standards and as <abbr>OGC</abbr> standards,
and their corresponding names are listed next to one another in the first two columns.
The “implementation specifications” section lists specifications that bring few new concepts compared to abstract specifications,
but detail how to represent those concepts in specific environments like <abbr>XML</abbr> documents.
Standards that are deprecated but still partially used appear <s>struck through</s>.
Finally, GeoAPI packages will be introduced in upcoming chapters.
</p>
<table>
<caption>Main Standards Related to the Apache <abbr>SIS</abbr> project</caption>
<tr>
<th><abbr>ISO</abbr> Norm</th>
<th><abbr>OGC</abbr> Norm</th>
<th>Titre</th>
<th>GeoAPI package</th>
<th>Apache SIS package</th>
</tr><tr>
<td class="separator" colspan="5">Abstract Specifications</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">Implementation Specifications</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">Web Services</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>