You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2023/04/18 18:28:11 UTC

[sis] 02/04: Reduce the use of
sections, replaced by headings. This commit replaces only a small fraction of them. More will be done progressively in other commits.

This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 2c9e4aa65442f443e326a980325b3d580c67ff95
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Tue Apr 18 20:18:21 2023 +0200

    Reduce the use of <div class="note"> sections, replaced by headings.
    This commit replaces only a small fraction of them.
    More will be done progressively in other commits.
---
 .../java/org/apache/sis/gui/coverage/GridView.java | 25 ++++++++--------
 .../sis/gui/coverage/ImagePropertyExplorer.java    |  8 +++---
 .../org/apache/sis/gui/dataset/ExpandableList.java |  5 ++--
 .../org/apache/sis/gui/map/GestureFollower.java    |  4 +--
 .../java/org/apache/sis/gui/map/StatusBar.java     | 12 ++++----
 .../gui/referencing/RecentReferenceSystems.java    | 19 +++++++------
 .../apache/sis/coverage/grid/DomainLinearizer.java |  6 ++--
 .../apache/sis/coverage/grid/GridCoverage2D.java   |  5 ++--
 .../sis/coverage/grid/GridCoverageBuilder.java     | 12 ++++----
 .../apache/sis/coverage/grid/GridDerivation.java   | 33 +++++++++++-----------
 .../org/apache/sis/coverage/grid/GridExtent.java   | 14 ++++-----
 .../org/apache/sis/coverage/grid/GridGeometry.java | 18 ++++++------
 .../apache/sis/coverage/grid/GridRoundingMode.java |  8 +++---
 .../apache/sis/coverage/grid/PixelTranslation.java | 24 ++++++++--------
 .../sis/coverage/grid/ResampledGridCoverage.java   |  6 ++--
 .../main/java/org/apache/sis/portrayal/Canvas.java | 13 +++++----
 .../internal/storage/inflater/CopyFromBytes.java   | 12 ++++----
 .../apache/sis/internal/storage/inflater/LZW.java  | 12 ++++----
 .../apache/sis/storage/geotiff/GeoTiffStore.java   | 14 ++++-----
 .../sis/storage/geotiff/ImageMetadataBuilder.java  |  6 ++--
 .../org/apache/sis/internal/netcdf/Convention.java | 32 ++++++++++-----------
 .../org/apache/sis/internal/netcdf/Decoder.java    |  6 ++--
 .../apache/sis/internal/netcdf/GridMapping.java    |  5 ++--
 .../org/apache/sis/internal/netcdf/Linearizer.java |  6 ++--
 .../org/apache/sis/internal/netcdf/Variable.java   | 24 ++++++++--------
 .../apache/sis/storage/netcdf/AttributeNames.java  | 24 ++++++++--------
 .../apache/sis/storage/netcdf/MetadataReader.java  |  3 +-
 .../sis/internal/sql/feature/TableAnalyzer.java    |  5 ++--
 .../apache/sis/internal/stream/DeferredStream.java |  6 ++--
 .../sis/internal/storage/MetadataBuilder.java      | 18 ++++++------
 .../sis/internal/storage/ResourceOnFileSystem.java | 14 ++++-----
 .../apache/sis/internal/storage/StoreMetadata.java | 18 ++++++------
 .../sis/internal/storage/TiledGridCoverage.java    |  6 ++--
 .../apache/sis/internal/storage/io/Markable.java   | 10 +++----
 .../org/apache/sis/internal/storage/io/Region.java | 12 ++++----
 .../internal/storage/io/RewindableLineReader.java  |  5 ++--
 .../org/apache/sis/internal/storage/wkt/Store.java |  4 +--
 .../main/java/org/apache/sis/storage/DataSet.java  |  6 ++--
 .../sis/storage/DataStoreContentException.java     |  4 +--
 .../org/apache/sis/storage/DataStoreProvider.java  | 21 ++++++--------
 .../org/apache/sis/storage/DataStoreRegistry.java  |  6 ++--
 .../main/java/org/apache/sis/storage/Resource.java |  5 ++--
 .../org/apache/sis/storage/StorageConnector.java   |  4 +--
 .../org/apache/sis/storage/WritableAggregate.java  |  5 ++--
 .../org/apache/sis/storage/WritableFeatureSet.java |  6 ++--
 .../storage/aggregate/AggregatedFeatureSet.java    |  9 +++---
 .../storage/gpx/GroupAsPolylineOperation.java      |  3 +-
 .../storage/xml/stream/FormattedWriter.java        |  6 ++--
 .../storage/xml/stream/StaxStreamReader.java       | 12 ++++----
 49 files changed, 269 insertions(+), 272 deletions(-)

diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java
index a08938a9a2..4e870e46ea 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/GridView.java
@@ -141,9 +141,9 @@ public class GridView extends Control {
      * This size includes the {@linkplain #cellSpacing cell spacing}.
      * It shall be a number strictly greater than zero.
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      */
     public final DoubleProperty headerWidth;
 
@@ -152,9 +152,9 @@ public class GridView extends Control {
      * This size includes the {@linkplain #cellSpacing cell spacing}.
      * It shall be a number strictly greater than zero.
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      */
     public final DoubleProperty cellWidth;
 
@@ -162,9 +162,9 @@ public class GridView extends Control {
      * Height of all rows in the grid.
      * It shall be a number strictly greater than zero.
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      */
     public final DoubleProperty cellHeight;
 
@@ -173,18 +173,18 @@ public class GridView extends Control {
      * There is no property for vertical cell spacing because increasing the
      * {@linkplain #cellHeight cell height} should be sufficient.
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter/setter for this property; use {@link DoubleProperty#set(double)}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      */
     public final DoubleProperty cellSpacing;
 
     /**
      * The background color of row and column headers.
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      */
     public final ObjectProperty<Paint> headerBackground;
 
@@ -550,8 +550,9 @@ public class GridView extends Control {
      * if an error occurred during {@link RenderedImage#getTile(int, int)} invocation.
      * The returned bounds are zero-based (may not be the bounds in image coordinates).
      *
-     * <div class="note"><b>Note:</b> we use AWT rectangle instead of JavaFX rectangle
-     * because generally we use AWT for everything related to {@link RenderedImage}.</div>
+     * <h4>Design note</h4>
+     * We use AWT rectangle instead of JavaFX rectangle
+     * because generally we use AWT for everything related to {@link RenderedImage}.
      *
      * @param  tileX  <var>x</var> coordinates of the tile for which to get the bounds.
      * @param  tileY  <var>y</var> coordinates of the tile for which to get the bounds.
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java
index 0a5b24b8ab..6320fb3d8d 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/ImagePropertyExplorer.java
@@ -81,9 +81,9 @@ public class ImagePropertyExplorer extends Widget {
      * The root image to describe. This image will be the root of a tree;
      * children will be image {@linkplain RenderedImage#getSources() sources}.
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      */
     public final ObjectProperty<RenderedImage> image;
 
@@ -138,9 +138,9 @@ public class ImagePropertyExplorer extends Widget {
      * when the {@link #image} change. This is done for allowing the garbage collector to reclaim memory.
      * The content is reset to {@link #image} properties when {@code updateOnChange} become {@code true} again.
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter/setter for this property; use {@link BooleanProperty#set(boolean)}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      */
     public final BooleanProperty updateOnChange;
 
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java
index 0537ba6636..ba3bd19aba 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/dataset/ExpandableList.java
@@ -124,11 +124,12 @@ final class ExpandableList extends TransformationList<Feature,Feature>
      * Removes the expanded rows. This method does not fire change event;
      * it is caller's responsibility to perform those tasks.
      *
-     * <div class="note"><b>Note:</b> we return {@code null} instead of an empty list if
+     * <h4>Design note</h4>
+     * We return {@code null} instead of an empty list if
      * there are no removed elements because we want to force callers to perform a null check.
      * The reason is that if there was no expansion rows, then {@link #indexOfExpanded} has an
      * invalid value and using that value in {@link #nextRemove(int, List)} may be dangerous.
-     * A {@link NullPointerException} would intercept that error sooner.</div>
+     * A {@link NullPointerException} would intercept that error sooner.
      *
      * @return the removed rows, or {@code null} if none.
      */
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java
index 275a84f0d0..7e418f8218 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/GestureFollower.java
@@ -251,12 +251,12 @@ public class GestureFollower extends CanvasFollower implements EventHandler<Mous
      * Invoked after the source "objective to display" transform has been updated.
      * This implementation adjusts the cursor position for compensating the relative change in mouse position.
      *
-     * <div class="note"><b>Details:</b>
+     * <h4>Details</h4>
      * If the map moved in the {@linkplain #source source} canvas without a change of mouse cursor position
      * (for example if the user navigates using the keyboard), then the mouse position changed relatively to
      * the map, so the cursor position on the {@linkplain #target target} canvas needs to be updated accordingly.
      * This is a temporary change applied until the next {@link MouseEvent} gives us new mouse coordinates relative
-     * to the map.</div>
+     * to the map.
      */
     @Override
     protected void transformedSource(final TransformChangeEvent event) {
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java
index 27c3df7629..234a81d9ba 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/map/StatusBar.java
@@ -245,9 +245,9 @@ public class StatusBar extends Widget implements EventHandler<MouseEvent> {
      * when this {@code StatusBar} is <em>not</em> associated to a {@link MapCanvas}
      * (for example it may be used with a {@link org.apache.sis.gui.coverage.GridView} instead).</p>
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      *
      * @see MapCanvas#getObjectiveCRS()
      * @see MapCanvas#getObjectiveToDisplay()
@@ -259,9 +259,9 @@ public class StatusBar extends Widget implements EventHandler<MouseEvent> {
      * This is initially the <cite>objective CRS</cite>, but may become different
      * if the user selects another reference system through contextual menu.
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter method for this property; use {@link ReadOnlyObjectProperty#get()}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      *
      * @see #position
      */
@@ -430,9 +430,9 @@ public class StatusBar extends Widget implements EventHandler<MouseEvent> {
      * The property value may be {@code null} if there are no sample values to format.
      * If non-null, the text provided by this object will appear at the right of the coordinates.
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      */
     public final ObjectProperty<ValuesUnderCursor> sampleValuesProvider;
 
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java
index 319bac2f60..be35de2eea 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/RecentReferenceSystems.java
@@ -114,8 +114,9 @@ public class RecentReferenceSystems {
      * A pseudo-reference system for the "Other…" choice. We use a null value because {@link ChoiceBox}
      * seems to insist for inserting a null value in the items list when we remove the selected item.
      *
-     * <div class="note"><b>Maintenance note:</b> if this field is changed to a non-null value,
-     * search also for usages of {@code Object::nonNull} predicate.</div>
+     * <h4>Maintenance note</h4>
+     * If this field is changed to a non-null value,
+     * search also for usages of {@code Object::nonNull} predicate.
      */
     static final ReferenceSystem OTHER = null;
 
@@ -129,9 +130,9 @@ public class RecentReferenceSystems {
      * The area of interest, or {@code null} if none. This is used for filtering the reference systems added by
      * {@code addAlternatives(…)} and for providing some guidance to user when {@link CRSChooser} is shown.
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      */
     public final ObjectProperty<Envelope> areaOfInterest;
 
@@ -144,9 +145,9 @@ public class RecentReferenceSystems {
      * The comparison criterion for considering two reference systems as a duplication.
      * The default value is {@link ComparisonMode#ALLOW_VARIANT}, i.e. axis orders are ignored.
      *
-     * <div class="note"><b>API note:</b>
+     * <h4>API note</h4>
      * We do not provide getter/setter for this property; use {@link ObjectProperty#set(Object)}
-     * directly instead. We omit the "Property" suffix for making this operation more natural.</div>
+     * directly instead. We omit the "Property" suffix for making this operation more natural.
      */
     public final ObjectProperty<ComparisonMode> duplicationCriterion;
 
@@ -237,11 +238,11 @@ public class RecentReferenceSystems {
      * A filtered view of {@link #referenceSystems} without the {@link #OTHER} item.
      * This is the list returned to users by public API, but otherwise it is not used by this class.
      *
-     * <div class="note"><b>Design note:</b>
-     * the {@link #OTHER} item needs to exist in the list used internally by this class because those lists
+     * <h4>Design notes</h4>
+     * The {@link #OTHER} item needs to exist in the list used internally by this class because those lists
      * are used directly by controls like {@code ChoiceBox<ReferenceSystem>}, with the {@link #OTHER} value
      * handled in a special way by {@link ObjectStringConverter} for making the "Other…" item present in the
-     * list of choices. But since {@link #OTHER} is not a real CRS, we want to hide that trick to users.</div>
+     * list of choices. But since {@link #OTHER} is not a real CRS, we want to hide that trick to users.
      *
      * <p>This list is lazily created when first needed,
      * because it depends on {@link #referenceSystems} which is itself lazily created.</p>
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java
index c60e25efd8..a9fb085af1 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/DomainLinearizer.java
@@ -206,10 +206,10 @@ public class DomainLinearizer {
      * after a linear "grid to CRS" approximation has been computed by the <cite>Least Mean Squares</cite> method.
      * Subclasses can override this method for example in order to scale the conversion by some arbitrary factor.
      *
-     * <div class="note"><b>Tip:</b>
-     * scales (if desired) should be applied <em>before</em> {@code gridToCRS}, i.e. on grid coordinates.
+     * <h4>Tip</h4>
+     * Scales (if desired) should be applied <em>before</em> {@code gridToCRS}, i.e. on grid coordinates.
      * Scales applied after the transform (i.e. on "real world" coordinates) may give unexpected results
-     * if the conversion contains a rotation.</div>
+     * if the conversion contains a rotation.
      *
      * @param  gridToCRS  an approximation of the "grid to CRS" conversion computed by {@code DomainLinearizer}.
      * @return the approximation to use for creating a new {@link GridGeometry}. Should be linear.
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java
index 7bbcd934b1..9dd2045456 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverage2D.java
@@ -69,8 +69,8 @@ import org.opengis.coverage.PointOutsideCoverageException;
  * The only restriction is that the {@linkplain GridGeometry#getExtent() grid extent} has a
  * {@linkplain GridExtent#getSize(int) size} equals to 1 in all dimensions except two of them.
  *
- * <div class="note"><b>Example:</b>
- * a remote sensing image may be valid only over some time range
+ * <h2>Example</h2>
+ * A remote sensing image may be valid only over some time range
  * (the temporal period of the satellite passing over observed area).
  * Envelopes for such grid coverage can have three dimensions:
  * the two usual ones (horizontal extent along <var>x</var> and <var>y</var>),
@@ -78,7 +78,6 @@ import org.opengis.coverage.PointOutsideCoverageException;
  * This "two-dimensional" grid coverage can have any number of columns along <var>x</var> axis
  * and any number of rows along <var>y</var> axis, but only one plan along <var>t</var> axis.
  * This single plan can have a lower bound (the start time) and an upper bound (the end time).
- * </div>
  *
  * <h2>Image size and location</h2>
  * The {@linkplain RenderedImage#getWidth() image width} and {@linkplain RenderedImage#getHeight() height}
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java
index c495a84f89..f0fd0b1218 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageBuilder.java
@@ -214,16 +214,16 @@ public class GridCoverageBuilder {
      * use row indices increasing in the opposite direction (toward down).
      * This effect can be compensated by invoking <code>{@linkplain #flipGridAxis(int) flipGridAxis}(1)</code>.
      *
-     * <div class="note"><b>Design note:</b>
+     * <p>{@code GridCoverageBuilder} provides method only for flipping axes.
+     * If more sophisticated operations is desired (for example a rotation),
+     * then {@link #setDomain(GridGeometry)} should be used instead of this method.</p>
+     *
+     * <h5>Design note</h5>
      * {@code GridCoverageBuilder} does not flip the <var>y</var> axis by default because not all
      * file formats have row indices increasing toward down. A counter-example is the netCDF format.
      * Even if we consider that the majority of images have <var>y</var> axis flipped, things become
      * less obvious when considering data in more than two dimensions. Having the same default policy
-     * (no flipping) for all dimensions make problem analysis easier.</div>
-     *
-     * {@code GridCoverageBuilder} provides method only for flipping axes.
-     * If more sophisticated operations is desired (for example a rotation),
-     * then {@link #setDomain(GridGeometry)} should be used instead of this method.
+     * (no flipping) for all dimensions make problem analysis easier.
      *
      * <h4>Default implementation</h4>
      * The default implementation creates a new {@link GridGeometry} from the given envelope
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
index 006247c392..3e15f4cbb8 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridDerivation.java
@@ -296,10 +296,11 @@ public class GridDerivation {
      * For example if subsampling is 2, then a margin of 6 cells specified with this method will result
      * in a margin of 3 cells in the grid extent computed by the {@link #build()} method.
      *
-     * <div class="note"><b>Use case:</b>
-     * if the caller wants to apply bilinear interpolations in an image, (s)he will need 1 more pixel on each image border.
-     * If the caller wants to apply bi-cubic interpolations, (s)he will need 2 more pixels on each image border.</div>
+     * <h4>Use case</h4>
+     * If the caller wants to apply bilinear interpolations in an image, (s)he will need 1 more pixel on each image border.
+     * If the caller wants to apply bi-cubic interpolations, (s)he will need 2 more pixels on each image border.
      *
+     * <h4>Default values</h4>
      * If this method is never invoked, the default value is zero for all dimensions.
      * If this method is invoked too late, an {@link IllegalStateException} is thrown.
      * If the {@code cellCounts} array length is shorter than the grid dimension,
@@ -956,8 +957,8 @@ public class GridDerivation {
      * to a single point. Dimensions can be left unspecified either by assigning to {@code slicePoint} a CRS
      * without those dimensions, or by assigning the NaN value to some coordinates.
      *
-     * <div class="note"><b>Example:</b>
-     * if the {@linkplain GridGeometry#getCoordinateReferenceSystem() coordinate reference system} of base grid geometry has
+     * <h4>Example</h4>
+     * If the {@linkplain GridGeometry#getCoordinateReferenceSystem() coordinate reference system} of base grid geometry has
      * (<var>longitude</var>, <var>latitude</var>, <var>time</var>) axes, then a (<var>longitude</var>, <var>latitude</var>)
      * slice at time <var>t</var> can be created with one of the following two positions:
      * <ul>
@@ -965,9 +966,9 @@ public class GridDerivation {
      *   <li>A one-dimensional position with (<var>t</var>) coordinate and the coordinate reference system set to
      *       {@linkplain org.apache.sis.referencing.CRS#getTemporalComponent(CoordinateReferenceSystem) the temporal component}
      *       of the grid geometry CRS.</li>
-     * </ul></div>
+     * </ul>
      *
-     * <p>Notes:</p>
+     * <h4>Usage notes</h4>
      * <ul>
      *   <li>This method can be invoked after {@link #subgrid(Envelope, double...)}, but not before.</li>
      *   <li>If a non-default rounding mode is desired, it should be {@linkplain #rounding(GridRoundingMode) specified}
@@ -1216,14 +1217,14 @@ public class GridDerivation {
      * This method returns the {s₀, s₁, s₂} values while {@link #getSubsamplingOffsets()}
      * returns the {t₀, t₁, t₂} values. All subsampling values are strictly positive integers.
      *
-     * <div class="note"><b>Application to iterations</b><br>
+     * <p>This method can be invoked after {@link #build()} for getting additional information.
+     * If {@link #subgrid(GridExtent, int...)} has been invoked, then this method returns the
+     * values that were given in the {@code subsampling} argument.</p>
+     *
+     * <h4>Application to iterations</h4>
      * Iteration over {@code areaOfInterest} grid coordinates with a stride Δ<var>x</var>=1
      * corresponds to an iteration in {@link #base} grid coordinates with a stride of Δ<var>x′</var>=s₀,
-     * a stride Δ<var>y</var>=1 corresponds to a stride Δ<var>y′</var>=s₁, <i>etc.</i></div>
-     *
-     * This method can be invoked after {@link #build()} for getting additional information.
-     * If {@link #subgrid(GridExtent, int...)} has been invoked, then this method returns the
-     * values that were given in the {@code subsampling} argument.
+     * a stride Δ<var>y</var>=1 corresponds to a stride Δ<var>y′</var>=s₁, <i>etc.</i>
      *
      * @return an <em>estimation</em> of the strides for accessing cells along each axis of {@link #base} grid.
      * @throws IllegalStateException if the subsampling factors are not integers. It may happen if the derived
@@ -1259,8 +1260,8 @@ public class GridDerivation {
      * If a {@link #chunkSize} has been specified, then the subsampling will be a divisor of that size.
      * This is necessary for avoiding a drift of subsampled pixel coordinates computed from tile coordinates.
      *
-     * <div class="note"><b>Drift example:</b>
-     * if the tile size is 16 pixels and the subsampling is 3, then the subsampled tile size is ⌊16/3⌋ = 5 pixels.
+     * <h4>Drift example</h4>
+     * If the tile size is 16 pixels and the subsampling is 3, then the subsampled tile size is ⌊16/3⌋ = 5 pixels.
      * Pixel coordinates for each tile is as below:
      *
      * <table class="sis">
@@ -1276,7 +1277,7 @@ public class GridDerivation {
      * for a regular progression of those pixel coordinates. For {@code GridCoverageResource} implementations,
      * it would require to read the last row of tile #2 and insert those data as the first row of tile #3.
      * It does not only make implementations much more difficult, but also hurts performance because fetching
-     * a single tile would actually require the "physical" reading of 2 or more tiles.</div>
+     * a single tile would actually require the "physical" reading of 2 or more tiles.
      *
      * @param  scale      the scale factor to round.
      * @param  dimension  the dimension of the scale factor to round.
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
index 99da3df96e..e5098872c7 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
@@ -1506,17 +1506,17 @@ public class GridExtent implements GridEnvelope, LenientComparable, Serializable
      * accordingly (this is often equivalent to dividing high coordinates by the periods too, but a difference
      * of one cell may exist).
      *
-     * <div class="note"><b>Note:</b>
+     * <h4>Usage note</h4>
      * If the "real world" envelope computed from grid extent needs to stay approximately the same, then the
      * {@linkplain GridGeometry#getGridToCRS grid to CRS} transform needs to compensate the subsampling with
      * a pre-multiplication of each grid coordinates by {@code periods}.
      * However, the envelope computed that way may become <em>larger</em> after subsampling, not smaller.
      * This effect can be understood intuitively if we consider that cells become larger after subsampling,
      * which implies that accurate representation of the same envelope may require fractional cells on some
-     * grid borders.</div>
+     * grid borders.
      *
-     * This method does not reduce the number of dimensions of the grid extent.
-     * For dimensionality reduction, see {@link #selectDimensions(int[])}.
+     * <p>This method does not reduce the number of dimensions of the grid extent.
+     * For dimensionality reduction, see {@link #selectDimensions(int[])}.</p>
      *
      * <h4>Number of arguments</h4>
      * The {@code periods} array length should be equal to the {@linkplain #getDimension() number of dimensions}.
@@ -1701,9 +1701,9 @@ public class GridExtent implements GridEnvelope, LenientComparable, Serializable
      * The returned extent has the same {@linkplain #getSize(int) size} than this extent,
      * i.e. both low and high grid coordinates are displaced by the same amount of cells.
      *
-     * <div class="note"><b>Example:</b>
-     * for an extent (x: [0…10], y: [2…4], z: [0…1]) and a translation {-2, 2},
-     * the resulting extent would be (x: [-2…8], y: [4…6], z: [0…1]).</div>
+     * <h4>Example</h4>
+     * For an extent (x: [0…10], y: [2…4], z: [0…1]) and a translation {-2, 2},
+     * the resulting extent would be (x: [-2…8], y: [4…6], z: [0…1]).
      *
      * <h4>Number of arguments</h4>
      * The {@code translation} array length should be equal to the {@linkplain #getDimension() number of dimensions}.
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index 1f3f6207b8..6258fd011c 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -416,10 +416,10 @@ public class GridGeometry implements LenientComparable, Serializable {
      *       smallest values (closest to negative infinity).</li>
      * </ul>
      *
-     * <div class="note"><b>API note:</b>
-     * there is no default value for {@code anchor} because experience shows that images shifted by ½ pixel
+     * <h4>API note</h4>
+     * There is no default value for {@code anchor} because experience shows that images shifted by ½ pixel
      * (with pixels that may be tens of kilometres large) is a recurrent problem. We want to encourage developers
-     * to always think about wether their <cite>grid to CRS</cite> transform is mapping pixel corner or center.</div>
+     * to always think about wether their <cite>grid to CRS</cite> transform is mapping pixel corner or center.
      *
      * <div class="warning"><b>Upcoming API generalization:</b>
      * the {@code extent} type of this method may be changed to {@code GridEnvelope} interface in a future Apache SIS version.
@@ -849,10 +849,10 @@ public class GridGeometry implements LenientComparable, Serializable {
      *       with inclusive lower coordinates and <strong>exclusive</strong> upper coordinates.</li>
      * </ul>
      *
-     * <div class="note"><b>API note:</b>
-     * there is no default value for {@code anchor} because experience shows that images shifted by ½ pixel
+     * <h4>API note</h4>
+     * There is no default value for {@code anchor} because experience shows that images shifted by ½ pixel
      * (with pixels that may be tens of kilometres large) is a recurrent problem. We want to encourage developers
-     * to always think about wether the desired <cite>grid to CRS</cite> transform shall map pixel corner or center.</div>
+     * to always think about wether the desired <cite>grid to CRS</cite> transform shall map pixel corner or center.
      *
      * @param  anchor  the cell part to map (center or corner).
      * @return the conversion from grid coordinates to "real world" coordinates (never {@code null}).
@@ -1013,10 +1013,10 @@ public class GridGeometry implements LenientComparable, Serializable {
      * This is computed from the {@linkplain #getEnvelope() envelope} if the coordinate reference system
      * contains an horizontal component such as a geographic or projected CRS.
      *
-     * <div class="note"><b>API note:</b>
-     * this method does not throw {@link IncompleteGridGeometryException} because the geographic extent
+     * <h4>API note</h4>
+     * This method does not throw {@link IncompleteGridGeometryException} because the geographic extent
      * may be absent even with a complete grid geometry. Grid geometries are not required to have a
-     * spatial component on Earth surface; a raster could be a vertical profile for example.</div>
+     * spatial component on Earth surface; a raster could be a vertical profile for example.
      *
      * @return the geographic bounding box in "real world" coordinates.
      */
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java
index 4816855682..53996d5e82 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridRoundingMode.java
@@ -39,14 +39,14 @@ public enum GridRoundingMode {
      *       farthest from an integer value in order to keep unchanged the two values that are closer to integers.</li>
      * </ol>
      *
-     * <div class="note"><b>Example:</b>
-     * the [<var>low</var> … <var>high</var>] range may be slightly larger than desired in some rounding error situations.
+     * <h4>Example</h4>
+     * The [<var>low</var> … <var>high</var>] range may be slightly larger than desired in some rounding error situations.
      * For example if <var>low</var> before rounding was 1.49999 and <var>high</var> before rounding was 2.50001, then the
      * range after rounding will be [1…3] while the expected size is actually only 2 pixels. This {@code NEAREST} rounding
      * mode detects those rounding issues by comparing the <var>size</var> before and after rounding. In this example, the
      * size is 2.00002 pixels, which is closer to an integer value than the <var>low</var> and <var>high</var> values.
-     * Consequently, this {@code NEAREST} mode will rather adjust <var>low</var> or <var>high</var> (depending which one is
-     * farthest from integer values) in order to keep <var>size</var> at its closest integer value, which is 2.</div>
+     * Consequently, this {@code NEAREST} mode will rather adjust <var>low</var> or <var>high</var> (depending which
+     * one is farthest from integer values) in order to keep <var>size</var> at its closest integer value, which is 2.
      */
     NEAREST,
 
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
index 37738d40be..25c7447fb3 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
@@ -220,17 +220,17 @@ public final class PixelTranslation extends Static implements Serializable {
      * This method concatenates −½, 0 or +½ translations on <em>all</em> dimensions before the given transform.
      * If the two given conventions are the same, then this method returns the given transform unchanged.
      *
-     * <div class="note"><b>Example:</b>
-     * if a given {@code gridToCRS} transform was mapping the <em>cell corner</em> to "real world" coordinates, then a call to
+     * <p>If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
+     * Otherwise {@code current} and {@code desired} arguments must be non-null.</p>
+     *
+     * <h4>Example</h4>
+     * If a given {@code gridToCRS} transform was mapping the <em>cell corner</em> to "real world" coordinates, then a call to
      * <code>translate(gridToCRS, {@link PixelInCell#CELL_CORNER CELL_CORNER}, {@link PixelInCell#CELL_CENTER CELL_CENTER})</code>
      * will return a new transform performing the following steps: first convert grid coordinates from <var>cell center</var>
      * convention ({@code desired}) to <var>cell corner</var> convention ({@code current}), then concatenate the given
      * {@code gridToCRS} transform which was designed for the <em>cell corner</em> convention.
      * The above-cited <var>cell center</var> → <var>cell corner</var> conversion is done by translating the grid coordinates
-     * by +½, because the grid coordinates (0,0) relative to cell center is (½,½) relative to cell corner.</div>
-     *
-     * If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
-     * Otherwise {@code current} and {@code desired} arguments must be non-null.
+     * by +½, because the grid coordinates (0,0) relative to cell center is (½,½) relative to cell corner.
      *
      * @param  gridToCRS  a math transform from <cite>pixel</cite> coordinates to any CRS, or {@code null}.
      * @param  current    the pixel orientation of the given {@code gridToCRS} transform.
@@ -270,14 +270,14 @@ public final class PixelTranslation extends Static implements Serializable {
      * This method concatenates −½, 0 or +½ translations on <em>two</em> dimensions before the given transform.
      * The given transform can have any number of input and output dimensions, but only two of them will be converted.
      *
-     * <div class="note"><b>Example:</b>
-     * if a given {@code gridToCRS} transform was mapping the upper-left corner to "real world" coordinates, then a call to
+     * <p>If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
+     * Otherwise {@code current} and {@code desired} arguments must be non-null.</p>
+     *
+     * <h4>Example</h4>
+     * If a given {@code gridToCRS} transform was mapping the upper-left corner to "real world" coordinates, then a call to
      * <code>translate(gridToCRS, {@link PixelOrientation#UPPER_LEFT UPPER_LEFT}, {@link PixelOrientation#CENTER CENTER}, 0, 1)</code>
      * will return a new transform translating grid coordinates by +0.5 before to apply the given {@code gridToCRS} transform.
-     * See example in above {@link #translate(MathTransform, PixelInCell, PixelInCell) translate} method for more details.</div>
-     *
-     * If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
-     * Otherwise {@code current} and {@code desired} arguments must be non-null.
+     * See example in above {@link #translate(MathTransform, PixelInCell, PixelInCell) translate} method for more details.
      *
      * @param  gridToCRS   a math transform from <cite>pixel</cite> coordinates to any CRS, or {@code null}.
      * @param  current     the pixel orientation of the given {@code gridToCRS} transform.
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java
index 997b357e3b..977db7019e 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/ResampledGridCoverage.java
@@ -484,13 +484,13 @@ final class ResampledGridCoverage extends DerivedGridCoverage {
     /**
      * Computes a target grid extent by transforming the source grid extent.
      *
-     * <div class="note"><b>Note on rounding mode:</b>
-     * calculation of source envelope should use {@link GridRoundingMode#ENCLOSING} for making sure that we include
+     * <h4>Note on rounding mode</h4>
+     * Calculation of source envelope should use {@link GridRoundingMode#ENCLOSING} for making sure that we include
      * all needed data. On the opposite, calculation of target envelope should use {@link GridRoundingMode#CONTAINED}
      * for making sure that we interpolate only values where data are available. However, such "fully contained" mode
      * is often overly strict because a very small rounding error can cause the lost of an image row or column,
      * while using extrapolations for those values produce no perceptible errors. Consequently, this method uses
-     * {@link GridRoundingMode#NEAREST} as a compromise.</div>
+     * {@link GridRoundingMode#NEAREST} as a compromise.
      *
      * @param  source       the source grid extent to transform.
      * @param  cornerToCRS  transform from source grid corners to target CRS.
diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java b/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java
index 1c0eb58c8e..5826f0b8f1 100644
--- a/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java
+++ b/core/sis-portrayal/src/main/java/org/apache/sis/portrayal/Canvas.java
@@ -449,16 +449,17 @@ public class Canvas extends Observable implements Localized {
      * spherical coordinate systems. The coordinate system may have a wraparound axis for
      * some "exotic" display devices (e.g. planetarium dome).
      *
-     * <div class="note"><b>Usage note:</b> invoking this method is rarely needed. It is sufficient
-     * to said that a display CRS exists at least conceptually, and that we define a conversion from
-     * the objective CRS to that display CRS. This method may be useful when the subclasses may be
-     * something else than {@link PlanarCanvas}, in which case the caller may want more information
-     * about the geometry of the display device.</div>
-     *
      * <p>Note that the {@link CRS#findOperation CRS.findOperation(…)} static method can generally
      * not handle this display CRS. To apply coordinate operations on display coordinates,
      * {@link #getObjectiveToDisplay()} transform must be inverted and used.</p>
      *
+     * <h4>Usage note</h4>
+     * Invoking this method is rarely needed.
+     * It is sufficient to said that a display CRS exists at least conceptually,
+     * and that we define a conversion from the objective CRS to that display CRS.
+     * This method may be useful when the subclasses may be something else than {@link PlanarCanvas},
+     * in which case the caller may want more information about the geometry of the display device.
+     *
      * @return the Coordinate Reference System of the display device.
      *
      * @see #getObjectiveCRS()
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java
index 833b2fa1d3..6b5a854019 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/CopyFromBytes.java
@@ -62,11 +62,11 @@ abstract class CopyFromBytes extends Inflater {
      * Number of pixels per primitive element.
      * Always 1 except for multi-pixels packed images.
      *
-     * <div class="note"><b>Note:</b>
-     * this is "pixels per element", not "samples per element", because the value of this field shall be 1
+     * <h4>Design note</h4>
+     * This is "pixels per element", not "samples per element", because the value of this field shall be 1
      * in the {@link java.awt.image.SinglePixelPackedSampleModel} case (by contrast a "samples per element"
      * would have a value greater than 1). But this field can nevertheless be understood as a "samples per
-     * element" value where only one band is considered at a time.</div>
+     * element" value where only one band is considered at a time.
      */
     private final int pixelsPerElement;
 
@@ -186,12 +186,12 @@ abstract class CopyFromBytes extends Inflater {
      * Skips the number of chunks specified by the {@link #skipAfterChunks} array at the given index.
      * This method tries to move by incrementing the buffer position.
      *
-     * <div class="note"><b>Design note:</b>
-     * we do not use {@link ChannelDataInput#seek(long)} because the displacement is usually small.
+     * <h4>Design note</h4>
+     * We do not use {@link ChannelDataInput#seek(long)} because the displacement is usually small.
      * Changing the buffer position is sufficient in the majority of cases. If not, then it should
      * be okay to fill the buffer with next data (instead of doing a seek operation) because there
      * is usually few remaining values to skip. Performance of this method is important, so we try
-     * to avoid overhead.</div>
+     * to avoid overhead.
      *
      * @param  skipIndex  index in {@code skipAfterChunks} array.
      * @return new {@code skipIndex} value.
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java
index dc397bf37b..465fa7323b 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/storage/inflater/LZW.java
@@ -85,10 +85,10 @@ final class LZW extends CompressionChannel {
      * The position is chosen for leaving {@value #MAX_CODE_SIZE} bits for storing the length before
      * the offset value.
      *
-     * <div class="note"><b>Rational:</b>
-     * even in the worst case scenario where the same byte is always appended to the sequence,
+     * <h4>Rational</h4>
+     * Even in the worst case scenario where the same byte is always appended to the sequence,
      * the maximal length cannot exceeded the dictionary size because a {@link #CLEAR_CODE}
-     * will be emitted when the dictionary is full.</div>
+     * will be emitted when the dictionary is full.
      */
     private static final int LOWEST_OFFSET_BIT = MAX_CODE_SIZE;
 
@@ -104,10 +104,10 @@ final class LZW extends CompressionChannel {
      * It makes possible to use the extra size for growing a string up to that amount of bytes
      * without copying it.
      *
-     * <div class="note"><b>Note:</b>
-     * doing allocations only by blocks of 2² = 4 bytes may seem a waste of memory, but actually
+     * <h4>Performance note</h4>
+     * Doing allocations only by blocks of 2² = 4 bytes may seem a waste of memory, but actually
      * it reduces memory usage a lot (almost a factor 4) because of the copies avoided.
-     * We tried with alignment values 1, 2, 3 and found that 2 seems optimal.</div>
+     * We tried with alignment values 1, 2, 3 and found that 2 seems optimal.
      */
     private static final int STRING_ALIGNMENT = 2;
 
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java
index 218f2bb4f1..4858494bfa 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoTiffStore.java
@@ -107,8 +107,9 @@ public class GeoTiffStore extends DataStore implements Aggregate {
      * Defined as a namespace for use as the scope of children resources (the images).
      * This is created when first needed.
      *
-     * <div class="note"><b>Design note:</b> we do not create this field in the constructor because
-     * its creation invokes the user-overrideable {@link #customize(int, GenericName)} method.</div>
+     * <h4>Design note</h4>
+     * We do not create this field in the constructor because its creation invokes
+     * the user-overrideable {@link #customize(int, GenericName)} method.
      *
      * @see #namespace()
      */
@@ -169,16 +170,15 @@ public class GeoTiffStore extends DataStore implements Aggregate {
 
     /**
      * Creates a new GeoTIFF store as a component of a larger data store.
+     * If the {@code hidden} parameter is {@code true}, some metadata that would normally be
+     * provided in this {@code GeoTiffStore} will be provided by individual components instead.
      *
-     * <div class="note"><b>Example:</b>
+     * <h4>Example</h4>
      * A Landsat data set is a collection of files in a directory or ZIP file,
      * which includes more than 10 GeoTIFF files (one image per band or product for a scene).
      * {@link org.apache.sis.storage.landsat.LandsatStore} is a data store opening the Landsat
      * metadata file as the main file, then opening each band/product using a GeoTIFF data store.
-     * Those bands/products are components of the Landsat data store.</div>
-     *
-     * If the {@code hidden} parameter is {@code true}, some metadata that would normally be provided
-     * in this {@code GeoTiffStore} will be provided by individual components instead.
+     * Those bands/products are components of the Landsat data store.
      *
      * @param  parent     the parent that contains this new GeoTIFF store component, or {@code null} if none.
      * @param  provider   the factory that created this {@code DataStore} instance, or {@code null} if unspecified.
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java
index 4e697a90e0..5ec77cc3c6 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java
@@ -35,10 +35,10 @@ import static javax.imageio.plugins.tiff.BaselineTIFFTagSet.*;
  * Fields in the class are used only for information purposes; they do not
  * have incidence on the way Apache SIS will handle the GeoTIFF image.
  *
- * <div class="note"><b>Note:</b>
- * if those fields become useful to {@link ImageFileDirectory} in a future version,
+ * <h4>API note</h4>
+ * If those fields become useful to {@link ImageFileDirectory} in a future version,
  * we can move them into that class. Otherwise keeping those fields here allow to
- * discard them (which save a little bit of space) when no longer needed.</div>
+ * discard them (which save a little bit of space) when no longer needed.
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 1.4
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java
index e3cf89b6e3..72cdc7cd69 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Convention.java
@@ -293,8 +293,10 @@ public class Convention {
      * not the same than the dimensions of the localization grid. In such case, the names returned by this method
      * are used for mapping the raster dimensions to the localization grid dimensions.
      *
-     * <div class="note"><b>Example:</b>
-     * consider the following netCDF file (simplified):
+     * <p>This feature is an extension to CF-conventions.</p>
+     *
+     * <h4>Example</h4>
+     * Consider the following netCDF file (simplified):
      *
      * <pre class="text">
      *   dimensions:
@@ -324,9 +326,7 @@ public class Convention {
      * <cite>"Name of dimension 1"</cite> respectively, then we can associate the same dimension <strong>names</strong>
      * to all those variables: namely {@code "Line grids"} and {@code "Pixel grids"}. Using those names, we deduce that
      * the {@code (data_y, data_x)} dimensions in the {@code SST} variable are mapped to the {@code (grid_y, grid_x)}
-     * dimensions in the localization grid.</div>
-     *
-     * This feature is an extension to CF-conventions.
+     * dimensions in the localization grid.
      *
      * @param  dataOrAxis  the variable for which to get the attribute-specified name of the dimension.
      * @param  index       zero-based index of the dimension for which to get the name.
@@ -381,12 +381,12 @@ public class Convention {
      * For each string in the set, {@link Decoder#findNode(String)} is invoked and the return value
      * (if non-null) is given to {@link #projection(Node)} until a non-null map is obtained.
      *
-     * <div class="note"><b>API note:</b>
-     * this method name is singular because even if a set is returned, in the end only one value is used.</div>
-     *
-     * The default implementation returns the value of {@link CF#GRID_MAPPING} attribute, or an empty set
+     * <p>The default implementation returns the value of {@link CF#GRID_MAPPING} attribute, or an empty set
      * if the given variable does not contain that attribute. Subclasses may override for example if grid
-     * mapping information are hard-coded in a particular node for a specific product.
+     * mapping information are hard-coded in a particular node for a specific product.</p>
+     *
+     * <h4>API note</h4>
+     * This method name is singular because even if a set is returned, in the end only one value is used.
      *
      * @param  data  the variable for which to get the grid mapping node.
      * @return name of nodes that may contain the grid mapping, or an empty set if none.
@@ -545,13 +545,13 @@ public class Convention {
      * pseudo-projection, the "projected" CRS is actually a {@link GeographicCRS} instance.
      * The returned transform, if non-null, shall map cell corners.
      *
-     * <div class="note"><b>API notes:</b>
+     * <p>The default implementation returns {@code null}.</p>
+     *
+     * <h4>API notes</h4>
      * <ul>
      *   <li>We do not provide a {@link ProjectedCRS} argument because of the {@code "latitude_longitude"} special case.</li>
      *   <li>Base CRS axis order is (latitude, longitude) for increasing the chances to have a CRS identified by EPSG.</li>
-     * </ul></div>
-     *
-     * The default implementation returns {@code null}.
+     * </ul>
      *
      * @param  node       the same node than the one given to {@link #projection(Node)}.
      * @param  baseToCRS  conversion from (latitude, longitude) in degrees to the projected CRS.
@@ -567,8 +567,8 @@ public class Convention {
      * netCDF file. The default implementation returns <cite>"Unknown datum based upon the GRS 1980 ellipsoid"</cite>.
      * Note that the GRS 1980 ellipsoid is close to WGS 84 ellipsoid.
      *
-     * <div class="note"><b>Maintenance note:</b>
-     * if this default is changed, search also for "GRS 1980" strings in {@link CRSBuilder} class.</div>
+     * <h4>Maintenance note</h4>
+     * If this default is changed, search also for "GRS 1980" strings in {@link CRSBuilder} class.
      *
      * @param  spherical  whether to restrict the ellipsoid to a sphere.
      * @return information about geodetic objects to use if no explicit information is found in the file.
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
index a07c219491..4eced70bd9 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
@@ -137,10 +137,10 @@ public abstract class Decoder extends ReferencingFactoryContainer {
      * grids only between variables using the exact same list of dimensions.
      * This {@code localizationGrids} cache allows to cover other cases.
      *
-     * <div class="note"><b>Example:</b>
-     * a netCDF file may have a variable with (<var>longitude</var>, <var>latitude</var>) dimensions and another
+     * <h4>Example</h4>
+     * A netCDF file may have a variable with (<var>longitude</var>, <var>latitude</var>) dimensions and another
      * variable with (<var>longitude</var>, <var>latitude</var>, <var>depth</var>) dimensions, with both variables
-     * using the same localization grid for the (<var>longitude</var>, <var>latitude</var>) part.</div>
+     * using the same localization grid for the (<var>longitude</var>, <var>latitude</var>) part.
      *
      * @see GridCacheKey#cached(Decoder)
      */
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java
index e8d2634f4e..2e4beb2b7d 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridMapping.java
@@ -96,8 +96,9 @@ final class GridMapping {
      * This CRS may have been constructed from Well Known Text or EPSG codes declared in {@code "spatial_ref"},
      * {@code "ESRI_pe_string"} or {@code "EPSG_code"} attributes.
      *
-     * <div class="note"><b>Note:</b> this come from different information than the one used by {@link CRSBuilder},
-     * which creates CRS by inspection of coordinate system axes.</div>
+     * <h4>Usage note</h4>
+     * This come from different information than the one used by {@link CRSBuilder},
+     * which creates CRS by inspection of coordinate system axes.
      */
     final CoordinateReferenceSystem crs;
 
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java
index 14a7dbfae8..62ab908285 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Linearizer.java
@@ -98,10 +98,10 @@ public final class Linearizer {
          *   <li>Otherwise the point is in the middle of the image.</li>
          * </ul>
          *
-         * <div class="note"><b>Rational:</b>
-         * the intent is to increase the chances to get the Polar Stereographic projection for images close to pole.
+         * <h4>Rational</h4>
+         * The intent is to increase the chances to get the Polar Stereographic projection for images close to pole.
          * This is necessary because longitude values may become far from central meridian at latitudes such as 88°,
-         * causing the Transverse Mercator projection to produce NaN numbers.</div>
+         * causing the Transverse Mercator projection to produce NaN numbers.
          */
         UNIVERSAL;
 
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
index c02d4b896a..6d9055cd91 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
@@ -478,10 +478,10 @@ public abstract class Variable extends Node {
     /**
      * Returns {@code true} if this variable should be considered as a list of strings.
      *
-     * <div class="note"><b>Maintenance note:</b>
-     * the implementation of this method is inlined in some places, when the code already
+     * <h4>Maintenance note</h4>
+     * The implementation of this method is inlined in some places, when the code already
      * has the {@link DataType} value at hand. If this implementation is modified, search
-     * for {@link #STRING_DIMENSION} usages.</div>
+     * for {@link #STRING_DIMENSION} usages.
      *
      * @see #STRING_DIMENSION
      */
@@ -819,19 +819,19 @@ public abstract class Variable extends Node {
      * In ISO 19123 terminology, {@link Dimension#length()} on each dimension give the upper corner
      * of the grid envelope plus one. The lower corner is always (0, 0, …, 0).
      *
-     * <div class="note"><b>Usage:</b>
-     * this information is used for completing ISO 19115 metadata, providing a default implementation of
-     * {@link Convention#roleOf(Variable)} method or for building string representation of this variable
-     * among others. Those tasks are mostly for information purpose, except if {@code Variable} subclass
-     * failed to create a grid and we must rely on {@link #findGrid(GridAdjustment)} default implementation.
-     * For actual georeferencing, use {@link #getGridGeometry()} instead.</div>
-     *
-     * If {@link #findGrid(GridAdjustment)} returns a non-null value, then the list returned by this method should
+     * <p>If {@link #findGrid(GridAdjustment)} returns a non-null value, then the list returned by this method should
      * contain all dimensions returned by {@link Grid#getDimensions()}. It may contain more dimension however.
      * Those additional dimensions can be considered as bands. Furthermore, the dimensions of the {@code Grid}
      * may have a different {@linkplain Dimension#length() length} than the dimensions returned by this method.
      * If such length mismatch exists, then {@link #getGridGeometry()} will concatenate a scale factor to
-     * the "grid to CRS" transform.
+     * the "grid to CRS" transform.</p>
+     *
+     * <h4>Usage</h4>
+     * This information is used for completing ISO 19115 metadata, providing a default implementation of
+     * {@link Convention#roleOf(Variable)} method or for building string representation of this variable
+     * among others. Those tasks are mostly for information purpose, except if {@code Variable} subclass
+     * failed to create a grid and we must rely on {@link #findGrid(GridAdjustment)} default implementation.
+     * For actual georeferencing, use {@link #getGridGeometry()} instead.
      *
      * @return all dimensions of this variable, in netCDF order (reverse of "natural" order).
      *
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java
index b84fc1cb77..34a9e1dfad 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/AttributeNames.java
@@ -188,12 +188,12 @@ public class AttributeNames {
      * <tr><td>{@link AttributeNames#INSTRUMENT    INSTRUMENT}</td>    <td>{@code "instrument"}</td>    <td>{@code "instrument_vocabulary"}</td></tr>
      * </table>
      *
-     * <div class="note"><b>Note:</b>
+     * <h2>Departure from conventions</h2>
      * The member names in this class are upper-cases because they should be considered as constants.
      * For example, {@code AttributeNames.KEYWORD.TEXT} maps exactly to the {@code "keywords"} string
      * and nothing else. A lower-case {@code text} member name could be misleading since it would
      * suggest that the field contains the actual text value rather than the key by which the value
-     * is identified in a netCDF file.</div>
+     * is identified in a netCDF file.
      *
      * @author  Martin Desruisseaux (Geomatys)
      * @version 0.8
@@ -352,11 +352,11 @@ public class AttributeNames {
      * {@link Metadata#getResourceLineages() resourceLineage} /
      * {@link Lineage#getStatement() statement}</li></ul>
      *
-     * <div class="note"><b>Note:</b>
-     * located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} /
+     * <h4>Departure from convention</h4>
+     * Located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} /
      * {@link org.opengis.metadata.quality.DataQuality#getLineage() lineage}" instead of "{@code resourceLineage}"
      * in {@code UnidataDD2MI.xsl} file (retrieved in 2017).
-     * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>.</div>
+     * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>.
      *
      * @see <a href="http://wiki.esipfed.org/index.php/Attribute_Convention_for_Data_Discovery#history">ESIP reference</a>
      */
@@ -370,11 +370,11 @@ public class AttributeNames {
      * {@link Lineage#getSources() source} /
      * {@link Source#getDescription() description}</li></ul>
      *
-     * <div class="note"><b>Note:</b>
-     * located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} /
+     * <h4>Departure from convention</h4>
+     * Located in "{@link Metadata#getDataQualityInfo() dataQualityInfo} /
      * {@link org.opengis.metadata.quality.DataQuality#getLineage() lineage}" instead of "{@code resourceLineage}"
      * in {@code UnidataDD2MI.xsl} file (retrieved in 2017).
-     * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>.</div>
+     * See <a href="https://issues.apache.org/jira/browse/SIS-361">SIS-361</a>.
      *
      * @see <a href="http://wiki.esipfed.org/index.php/Attribute_Convention_for_Data_Discovery#source">ESIP reference</a>
      *
@@ -582,12 +582,12 @@ public class AttributeNames {
      *   <td>           {@link Role#PUBLISHER}</td>
      * </tr></table>
      *
-     * <div class="note"><b>Note:</b>
+     * <h2>Departure from conventions</h2>
      * The member names in this class are upper-cases because they should be considered as constants.
      * For example, {@code AttributeNames.CREATOR.EMAIL} maps exactly to the {@code "creator_email"} string
      * and nothing else. A lower-case {@code email} member name could be misleading since it would suggest
      * that the field contains the actual name value rather than the key by which the value is identified
-     * in a netCDF file.</div>
+     * in a netCDF file.
      *
      * @author  Martin Desruisseaux (Geomatys)
      * @version 0.8
@@ -912,12 +912,12 @@ public class AttributeNames {
      *   <td            >{@link DimensionNameType#TIME}</td>
      * </tr></table>
      *
-     * <div class="note"><b>Note:</b>
+     * <h2>Departure from conventions</h2>
      * The member names in this class are upper-cases because they should be considered as constants.
      * For example, {@code AttributeNames.LATITUDE.MINIMUM} maps exactly to the {@code "geospatial_lat_min"}
      * string and nothing else. A lower-case {@code minimum} member name could be misleading since it would
      * suggest that the field contains the actual latitude value rather than the key by which the value is
-     * identified in a netCDF file.</div>
+     * identified in a netCDF file.
      *
      * @author  Martin Desruisseaux (Geomatys)
      * @version 0.3
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
index 690a381421..a87e24607b 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
@@ -137,9 +137,8 @@ final class MetadataReader extends MetadataBuilder {
     /**
      * The character to use for quoting strings in a comma-separated list. Quoted strings may contain comma.
      *
-     * <div class="note"><b>Example:</b>
+     * <h4>Example</h4>
      * John Doe, Jane Lee, "L J Smith, Jr."
-     * </div>
      */
     private static final char QUOTE = '"';
 
diff --git a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java
index 6cea2807b3..6790559af6 100644
--- a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java
+++ b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/sql/feature/TableAnalyzer.java
@@ -85,9 +85,10 @@ final class TableAnalyzer extends FeatureAnalyzer {
      * method arguments with a name ending by {@code "Pattern"}. Note that not all arguments are pattern; please
      * checks carefully {@link DatabaseMetaData} javadoc for each method.
      *
-     * <div class="note"><b>Example:</b> if a method expects an argument named {@code tableNamePattern},
+     * <h4>Example</h4>
+     * If a method expects an argument named {@code tableNamePattern},
      * then that argument value should be escaped. But if the argument name is only {@code tableName},
-     * then the value should not be escaped.</div>
+     * then the value should not be escaped.
      */
     private String escape(final String pattern) {
         return SQLUtilities.escape(pattern, analyzer.escape);
diff --git a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java
index fe05095cbb..e805c5e731 100644
--- a/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java
+++ b/storage/sis-sqlstore/src/main/java/org/apache/sis/internal/stream/DeferredStream.java
@@ -29,14 +29,14 @@ import org.apache.sis.util.collection.BackingStoreException;
  * The source stream is implemented by a {@link Spliterator} created by {@link #createSourceIterator()}.
  * The call to that method is deferred until a terminal operation is invoked.
  *
- * <div class="note"><b>Example:</b>
- * if a stream can count its elements efficiently (e.g. using a {@code COUNT} query on SQL databases),
+ * <h2>Example</h2>
+ * If a stream can count its elements efficiently (e.g. using a {@code COUNT} query on SQL databases),
  * a {@code DeferredStream} subclass can override the {@link #count()} method for running the count query
  * instead of counting elements of the stream manually.
  *
  * <p>Deferred streams are also useful with intermediate operations. For example, a subclass can override
  * the {@link #skip(long)} and {@link #limit(long)} methods for modifying the SQL query with addition of
- * {@code OFFSET} and {@code FETCH NEXT} clauses before the worker stream is created.</p></div>
+ * {@code OFFSET} and {@code FETCH NEXT} clauses before the worker stream is created.</p>
  *
  * @author  Alexis Manin (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
index 8e2ca357be..d9e5ec14a3 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
@@ -2498,16 +2498,14 @@ parse:      for (int i = 0; i < length;) {
 
     /**
      * Adds a description of a particular sample value.
+     * ISO 19115 range elements are approximately equivalent to
+     * {@code org.apache.sis.coverage.Category} in the {@code sis-coverage} module.
      * Storage location is:
      *
      * <ul>
      *   <li>{@code metadata/contentInfo/rangeElementDescription}</li>
      * </ul>
      *
-     * <div class="note"><b>Note:</b>
-     * ISO 19115 range elements are approximately equivalent to
-     * {@code org.apache.sis.coverage.Category} in the {@code sis-coverage} module.</div>
-     *
      * @param  name        designation associated with a set of range elements, or {@code null} if none.
      * @param  definition  description of a set of specific range elements, or {@code null} if none.
      */
@@ -2928,9 +2926,9 @@ parse:      for (int i = 0; i < length;) {
      *   <li>{@code metadata/resourceLineage/source/scope/levelDescription/features}</li>
      * </ul>
      *
-     * <div class="note"><b>Example:</b>
-     * if a Landsat image uses the "GTOPO30" digital elevation model, then it can declare the source
-     * with "GTOPO30" description, {@link ScopeCode#MODEL} and feature "Digital Elevation Model".</div>
+     * <h4>Example</h4>
+     * If a Landsat image uses the "GTOPO30" digital elevation model, then it can declare the source
+     * with "GTOPO30" description, {@link ScopeCode#MODEL} and feature "Digital Elevation Model".
      *
      * @param  description  a detailed description of the level of the source data, or {@code null} if none.
      * @param  level        hierarchical level of the source (e.g. model), or {@code null} if unspecified.
@@ -2969,10 +2967,10 @@ parse:      for (int i = 0; i < length;) {
      *   <li>{@code metadata/resourceLineage/source/sourceSpatialResolution}</li>
      * </ul>
      *
-     * <div class="note"><b>Example:</b>
-     * if a {@code FeatureSet} is the aggregation of two other {@code FeatureSet} resources,
+     * <h4>Example</h4>
+     * If a {@code FeatureSet} is the aggregation of two other {@code FeatureSet} resources,
      * then this method can be invoked twice with the metadata of each source {@code FeatureSet}.
-     * If the aggregated data are features, then {@code level} should be {@link ScopeCode#FEATURE}.</div>
+     * If the aggregated data are features, then {@code level} should be {@link ScopeCode#FEATURE}.
      *
      * @param  metadata  the metadata of the source, or {@code null} if none.
      * @param  level     hierarchical level of the source (e.g. feature). Should not be null.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java
index 419ab377ec..8b0e699d45 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/ResourceOnFileSystem.java
@@ -47,8 +47,13 @@ public interface ResourceOnFileSystem extends Resource {
      * There is no guarantee that all files are in the same directory or that each file is used exclusively
      * by this data source (e.g. no guarantee that modifying or deleting a file will not impact other resources).
      *
-     * <div class="note"><b>Example:</b>
-     * a resources created for a GRIB file may use the following component files:
+     * <p>This method should return paths to files only.
+     * It should not return paths to directories.
+     * The caller should verify that all paths are regular files;
+     * non-existent paths should be omitted.</p>
+     *
+     * <h4>Example</h4>
+     * A resources created for a GRIB file may use the following component files:
      * <ul>
      *   <li>The main GRIB file.</li>
      *   <li>If managed by the UCAR library, two auxiliary files next to the main GRIB file:
@@ -57,11 +62,6 @@ public interface ResourceOnFileSystem extends Resource {
      *   <li>Eventually a GRIB table file. This table may be located in a path unrelated to
      *       to the path of the main file and may be shared by many resources.</li>
      * </ul>
-     * </div>
-     *
-     * This method should return paths to files only. It should not return paths to directories.
-     * The caller should verify that all paths are regular files;
-     * non-existent paths should be omitted.
      *
      * @return files used by this resource. Should never be {@code null}.
      * @throws DataStoreException if an error on the file system prevent the creation of the list.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java
index aa01a0c70b..9d4688bbaa 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreMetadata.java
@@ -63,20 +63,20 @@ public @interface StoreMetadata {
      * The "main" file is the file that users specify when opening the dataset.
      * The returned array should <em>not</em> include the suffixes of auxiliary files.
      *
-     * <div class="note"><b>Example:</b>
-     * GeoTIFF data are contained in files with the {@code ".tif"} or {@code ".tiff"} suffix,
-     * sometimes accompanied by auxiliary files with {@code ".prj"} and {@code ".tfw"} suffixes.
-     * This method should return an array containing only {@code "tif"} or {@code "tiff"} strings,
-     * without the leading dot.</div>
-     *
-     * The suffixes are case-insensitive (no need to declare both lower-case and upper-case variants)
-     * and shall not contain the leading dot. The first element in the list is the preferred suffix
-     * to use for new files.
+     * <p>The suffixes are case-insensitive (no need to declare both lower-case and upper-case variants)
+     * and shall not contain the leading dot.
+     * The first element in the list is the preferred suffix to use for new files.</p>
      *
      * <p>The same suffixes may be used by many different formats. For example, the {@code ".xml"} suffix
      * is used for files in many mutually incompatible formats. Consequently, the file suffixes shall not
      * be used as format identifiers.</p>
      *
+     * <h4>Example</h4>
+     * GeoTIFF data are contained in files with the {@code ".tif"} or {@code ".tiff"} suffix,
+     * sometimes accompanied by auxiliary files with {@code ".prj"} and {@code ".tfw"} suffixes.
+     * This method should return an array containing only {@code "tif"} or {@code "tiff"} strings,
+     * without the leading dot.
+     *
      * @return the filename suffixes, case insensitive. Never null but can be empty.
      */
     String[] fileSuffixes() default {};
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java
index 9416d47465..5ce747eafb 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/TiledGridCoverage.java
@@ -334,12 +334,12 @@ public abstract class TiledGridCoverage extends GridCoverage {
      * {@link MultiPixelPackedSampleModel} which packs many pixels in a single bank element.
      * This value is a power of 2 according {@code MultiPixelPackedSampleModel} specification.
      *
-     * <div class="note"><b>Note:</b>
-     * this is "pixels per element", not "samples per element". It makes a difference in the
+     * <h4>Design note</h4>
+     * This is "pixels per element", not "samples per element". It makes a difference in the
      * {@link java.awt.image.SinglePixelPackedSampleModel} case, for which this method returns 1
      * (by contrast a "samples per element" would give a value greater than 1).
      * But this value can nevertheless be understood as a "samples per element" value
-     * where only one band is considered at a time.</div>
+     * where only one band is considered at a time.
      *
      * @return number of pixels in a single bank element. Usually 1.
      *
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java
index 01b1abaa15..c1170e8aaa 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Markable.java
@@ -23,16 +23,14 @@ import java.io.IOException;
  * Stream reader or writer capable to mark its current position and reset to that position later.
  * The stream shall support nested marks.
  *
- * <div class="note"><b>Use case:</b>
- * this interface can be used when we need to move to a previously marked position, but we do not know how many nested
+ * <h2>Use case</h2>
+ * This interface can be used when we need to move to a previously marked position, but we do not know how many nested
  * {@code mark()} method calls may have been performed (typically because the stream has been used by arbitrary code).
  * We can compare {@link #getStreamPosition()} value after {@link #reset()} method calls with the expected position.
- * </div>
  *
- * <div class="note"><b>Design note:</b>
- * an alternative could be to support the {@code seek(long)} method. But using marks instead allows the stream
+ * <h2>Design note</h2>
+ * An alternative could be to support the {@code seek(long)} method. But using marks instead allows the stream
  * to invalidate the marks if needed (for example when {@link ChannelData#setStreamPosition(long)} is invoked).
- * </div>
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 1.2
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java
index a8723adbdc..05785987b8 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/Region.java
@@ -137,15 +137,15 @@ public final class Region {
      * The strides are computed automatically at construction time, but this method can be invoked in some rare cases
      * where those values need to be modified (example: for adapting to the layout of netCDF "unlimited" variable).
      *
-     * <div class="note"><b>Example:</b>
-     * in a cube of dimension 10×10×10, the number of values between indices (0,0,1) and (0,0,2) is 100.
+     * <p>This method is the only one in this {@link Region} class to use a count of bytes
+     * instead of a count of sample values.</p>
+     *
+     * <h4>Example</h4>
+     * In a cube of dimension 10×10×10, the number of values between indices (0,0,1) and (0,0,2) is 100.
      * If the values type is {@code float}, invoking {@code setAdditionalByteOffset(1, 12)} will increase
      * this value to 103 (computed as 100 + 12/{@value Float#BYTES}).
      * {@link HyperRectangleReader} will still read only the requested 100 values,
-     * but will skip 3 more values when moving from plane 1 to plane 2.</div>
-     *
-     * This method is the only one in this {@link Region} class to use a count of bytes instead of a count
-     * of sample values.
+     * but will skip 3 more values when moving from plane 1 to plane 2.
      *
      * @param  dimension  dimension for which to increase the stride.
      * @param  skip       additional number of <strong>bytes</strong> to skip after we finished reading
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java
index d9d1d633ea..d916c07cf1 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/RewindableLineReader.java
@@ -52,8 +52,9 @@ public final class RewindableLineReader extends LineNumberReader {
     /**
      * The input stream, or {@code null} if this reader cannot rewind anymore.
      *
-     * <div class="note"><b>Note:</b> we do not use the more generic {@link java.io.InputStream} class
-     * because this whole {@code RewindableLineReader} class is useless if we cannot seek in this stream.</div>
+     * <h4>Design note</h4>
+     * We do not use the more generic {@link java.io.InputStream} class
+     * because this whole {@code RewindableLineReader} class is useless if we cannot seek in this stream.
      */
     private InputStreamAdapter input;
 
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java
index 9baaaf1774..31a77fef26 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/Store.java
@@ -42,9 +42,9 @@ import org.apache.sis.util.CharSequences;
 /**
  * A data store which creates data objects from a WKT definition.
  *
- * <div class="note"><b>Note:</b>
+ * <h4>Design note</h4>
  * this class differs from {@link org.apache.sis.internal.storage.PRJDataStore} in that
- * the file containing WKT definition is the main file, not an auxiliary file.</div>
+ * the file containing WKT definition is the main file, not an auxiliary file.
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 1.4
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java
index 8e7b76e84a..231f6ac17f 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataSet.java
@@ -27,11 +27,11 @@ import org.opengis.geometry.Envelope;
  * grid geometries or sample dimensions, depending on the {@code DataSet} subtype.
  * The actual values are provided by methods defined in {@code DataSet} subtypes.
  *
- * <div class="note"><b>Example:</b>
- * the features contained in a {@code DataSet} could be all bridges in a city. A {@code DataSet} can be associated to
+ * <h2>Example</h2>
+ * The features contained in a {@code DataSet} could be all bridges in a city. A {@code DataSet} can be associated to
  * one {@code FeatureType} which specifies that all bridges shall have {@code "construction date"} and {@code "height"}
  * attributes, and an arbitrary number of {@code Feature} instances which contains the actual values for all bridges in
- * the dataset.</div>
+ * the dataset.
  *
  * <h2>Metadata</h2>
  * Datasets should have {@link #getMetadata() metadata} /
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java
index ef52d8b6f2..0411bd62c3 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreContentException.java
@@ -24,11 +24,11 @@ import java.util.Locale;
  * It may be for example a logical inconsistency, or a reference not found,
  * or an unsupported file format version, <i>etc.</i>
  *
- * <div class="note"><b>Note:</b>
+ * <h2>Usage note</h2>
  * exceptions that are caused by {@link java.io.IOException} or {@link java.sql.SQLException}
  * should generally be wrapped by another type of {@link DataStoreException}, unless the data
  * store can determine that the error was caused by a problem with the stream content rather
- * than some I/O problems.</div>
+ * than some I/O problems.
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 0.8
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java
index 56ad65df44..05e485bafc 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreProvider.java
@@ -99,15 +99,15 @@ public abstract class DataStoreProvider {
      * set to {@code true}, then the {@code open(…)} method may create files, a directory or a database at the given
      * location.</p>
      *
-     * <div class="note"><b>Relationship with standard file open options</b>
-     * <p>For data stores on file systems, a <code>{@value} = true</code> parameter value is equivalent to opening a file
+     * <h4>Relationship with standard file open options</h4>
+     * For data stores on file systems, a <code>{@value} = true</code> parameter value is equivalent to opening a file
      * with {@link java.nio.file.StandardOpenOption#CREATE} and {@link java.nio.file.StandardOpenOption#APPEND APPEND}.
      * The other file standard options like {@link java.nio.file.StandardOpenOption#CREATE_NEW CREATE_NEW} and
      * {@link java.nio.file.StandardOpenOption#TRUNCATE_EXISTING TRUNCATE_EXISTING} should not be accessible through
      * this {@value} parameter. The reason is that {@link ParameterValueGroup} may be used for storing parameters
      * permanently (for example in a configuration file or in a database) for reopening the same {@link DataStore}
      * many times. File options designed for being used only once like {@code CREATE_NEW} and {@code TRUNCATE_EXISTING}
-     * are incompatible with this usage.</p></div>
+     * are incompatible with this usage.
      *
      * @see #LOCATION
      * @see #getOpenParameters()
@@ -125,13 +125,11 @@ public abstract class DataStoreProvider {
      * This name is used in some warnings or exception messages.
      * It may contain any characters, including white spaces
      * (i.e. this short name is <strong>not</strong> a format identifier).
+     * For a more comprehensive format name, see {@link #getFormat()}.
      *
-     * <div class="note"><b>Examples:</b>
+     * <h4>Examples</h4>
      * {@code "CSV"}, {@code "GeoTIFF"}, {@code "GML"}, {@code "GPX"}, {@code "JPEG"}, {@code "JPEG 2000"},
      * {@code "NetCDF"}, {@code "PNG"}, {@code "Shapefile"}.
-     * </div>
-     *
-     * For a more comprehensive format name, see {@link #getFormat()}.
      *
      * @return a short name or abbreviation for the data format.
      *
@@ -197,8 +195,8 @@ public abstract class DataStoreProvider {
      * Those parameters will be recognized by the default {@code DataStoreProvider} methods and used whenever a
      * {@link StorageConnector} is required.</p>
      *
-     * <div class="note"><b>Alternative:</b>
-     * the main differences between the use of {@code StorageConnector} and parameters are:
+     * <h4>Alternative</h4>
+     * The main differences between the use of {@code StorageConnector} and parameters are:
      * <ul class="verbose">
      *   <li>{@code StorageConnector} is designed for use with file or stream of unknown format;
      *       the format is automatically detected. By contrast, the use of parameters require to
@@ -207,7 +205,7 @@ public abstract class DataStoreProvider {
      *       and provide fine grain control over the store general behavior such as caching,
      *       time-outs, encoding, <i>etc</i>.</li>
      *   <li>Parameters can more easily be serialized in XML or configuration files.</li>
-     * </ul></div>
+     * </ul>
      *
      * @return description of the parameters required or accepted for opening a {@link DataStore}.
      *
@@ -236,14 +234,13 @@ public abstract class DataStoreProvider {
      * only that there appears to be a reasonable chance of success based on a brief inspection of the
      * {@linkplain StorageConnector#getStorage() storage object} or contents.
      *
-     * <div class="note"><b>Note for implementers</b>:
+     * <h4>Note for implementers</h4>
      * Implementations are responsible for restoring the storage object to its original position
      * on return of this method. Implementers can use the mark/reset mechanism for this purpose.
      * Marks are available as {@link java.nio.ByteBuffer#mark()}, {@link java.io.InputStream#mark(int)}
      * and {@link javax.imageio.stream.ImageInputStream#mark()}.
      * Alternatively, the {@link #probeContent(StorageConnector, Class, Prober)}
      * helper method manages automatically the marks for a set of known types.
-     * </div>
      *
      * @param  connector  information about the storage (URL, stream, JDBC connection, <i>etc</i>).
      * @return a {@linkplain ProbeResult#isSupported() supported} status if the given storage
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
index 5ccaaabd59..9f850b5f31 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
@@ -34,9 +34,9 @@ import org.apache.sis.util.ArraysExt;
  * Storage objects are typically {@link java.io.File} or {@link javax.sql.DataSource} instances, but can also
  * be any other objects documented in the {@link StorageConnector} class.
  *
- * <div class="note"><b>API note:</b>
- * this class is package-private for now in order to get more experience about what could be a good API.
- * This class may become public in a future SIS version.</div>
+ * <h2>API note</h2>
+ * This class is package-private for now in order to get more experience about what could be a good API.
+ * This class may become public in a future SIS version.
  *
  * <h2>Thread safety</h2>
  * The same {@code DataStoreRegistry} instance can be safely used by many threads without synchronization
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java
index 155d005114..e690817941 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/Resource.java
@@ -36,13 +36,12 @@ import org.apache.sis.storage.event.StoreListener;
  * instance of {@link Aggregate}. The {@linkplain Aggregate#components() components} of an aggregate can be
  * themselves other aggregates, thus forming a tree.</p>
  *
- * <div class="note"><b>Relationship with ISO 19115:</b>
- * this type is closely related to the {@code DS_Resource} type defined by ISO 19115.
+ * <h2>Relationship with ISO 19115</h2>
+ * This type is closely related to the {@code DS_Resource} type defined by ISO 19115.
  * The Apache SIS type differs from the ISO type by being more closely related to data extraction,
  * as can be seen from the checked {@link DataStoreException} thrown by most methods.
  * Convenience methods for frequently requested information – for example {@link DataSet#getEnvelope()} – were added.
  * The sub-types performing the actual data extraction – for example {@link FeatureSet} – are specific to Apache SIS.
- * </div>
  *
  * @author  Johann Sorel (Geomatys)
  * @version 1.0
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
index 759331e2a1..24b225c09a 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
@@ -920,12 +920,12 @@ public class StorageConnector implements Serializable {
      * {@link #getStorageAs(Class)} return value in the same state as they found it. This method is
      * only for handling the cases where using a view has an indirect impact on another view.</p>
      *
-     * <div class="note"><b>Rational:</b>
+     * <h4>Rational</h4>
      * {@link DataStoreProvider#probeContent(StorageConnector)} contract requires that implementers reset the
      * input stream themselves. However if {@link ChannelDataInput} or {@link InputStreamReader} has been used,
      * then the user performed a call to {@link ChannelDataInput#reset()} (for instance), which did not reset
      * the underlying input stream. So we need to perform the missing {@link InputStream#reset()} here, then
-     * synchronize the {@code ChannelDataInput} position accordingly.</div>
+     * synchronize the {@code ChannelDataInput} position accordingly.
      *
      * @param  c  container of the view to reset, or {@code null} if none.
      * @return {@code true} if the given view, after reset, is valid.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java
index b19fcf3f4a..bac0307b04 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableAggregate.java
@@ -38,12 +38,11 @@ public interface WritableAggregate extends Aggregate {
      *  <li>{@link org.opengis.metadata.Metadata}</li>
      * </ul>
      *
-     * <div class="note"><b>Warning:</b>
-     * copying information between stores may produce differences in many aspects.
+     * <h4>Data transformation</h4>
+     * Copying information between stores may produce differences in many aspects.
      * The range of changes depends both on the original {@link Resource} structure
      * and the target {@code Resource} structure. If the differences are too large,
      * then this {@code Aggregate} may throw an exception.
-     * </div>
      *
      * @param  resource  the resource to copy in this {@code Aggregate}.
      * @return the effectively added resource. May be {@code resource} itself if it has been added verbatim.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java
index 0754e06940..be9abaf8f7 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/WritableFeatureSet.java
@@ -65,11 +65,11 @@ public interface WritableFeatureSet extends FeatureSet {
      * After successful insertion, the new features may appear after the features already present
      * but not necessarily; ordering is {@link DataStore} specific.
      *
-     * <div class="note"><b>API note:</b>
-     * this method expects an {@link Iterator} rather than a {@link Stream} for easing
+     * <h4>API note</h4>
+     * This method expects an {@link Iterator} rather than a {@link Stream} for easing
      * inter-operability with various API. Implementing a custom {@link Iterator} requires less effort
      * than implementing a {@link Stream}. On the other side if the user has a {@link Stream},
-     * obtaining an {@link Iterator} can be done by a call to {@link Stream#iterator()}.</div>
+     * obtaining an {@link Iterator} can be done by a call to {@link Stream#iterator()}.
      *
      * @param  features feature instances to insert or copy in this {@code FeatureSet}.
      * @throws IllegalFeatureTypeException if a feature given by the iterator is not of the type expected by this {@code FeatureSet}.
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
index 6f6450f292..a1f0fd5964 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/aggregate/AggregatedFeatureSet.java
@@ -122,15 +122,16 @@ abstract class AggregatedFeatureSet extends AbstractFeatureSet {
      * This method tries to find a CRS common to all feature sets.
      * If no common CRS can be found, then the envelope is absent.
      *
-     * <div class="note"><b>Implementation note:</b>
-     * this method is final because overriding it would invalidate the unwrapping of other {@code AggregatedFeatureSet} instances.
-     * If we wish to allow overrides in a future version, we would need to revisit {@link #getEnvelopes(List)} first.</div>
-     *
      * @return union of envelopes from all dependencies.
      * @throws DataStoreException if an error occurred while computing the envelope.
      */
     @Override
     public final Optional<Envelope> getEnvelope() throws DataStoreException {
+        /*
+         * This method is final because overriding it would invalidate the unwrapping
+         * of other `AggregatedFeatureSet` instances. If we wish to allow overrides
+         * in a future version, we would need to revisit `getEnvelopes(List)` first.
+         */
         synchronized (getSynchronizationLock()) {
             if (!isEnvelopeComputed) {
                 final List<Envelope> envelopes = new ArrayList<>();
diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
index 8277244ea7..6303da7ccc 100644
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
@@ -41,7 +41,7 @@ import org.opengis.feature.AttributeType;
  * This base class expects a sequence of {@code Point} or {@code Polyline} instances as input.
  * The single (Multi){@code Polyline} instance is re-computed every time this property is requested.
  *
- * <div class="note"><b>Examples:</b>
+ * <h2>Examples</h2>
  * <p><i>Polylines created from points:</i>
  * a boat that record it's position every hour.
  * The list of all positions is stored in an attribute with [0 … ∞] multiplicity.
@@ -53,7 +53,6 @@ import org.opengis.feature.AttributeType;
  * The list of all tracks is stored in an attribute with [0 … ∞] multiplicity.
  * This class will extract each track and create a polyline as a new attribute.
  * Any change applied to the tracks will be visible on the polyline.</p>
- * </div>
  *
  * @author  Johann Sorel (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java
index af97b7c499..35585bd14e 100644
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/FormattedWriter.java
@@ -25,14 +25,14 @@ import org.apache.sis.internal.xml.StreamWriterDelegate;
 /**
  * Adds indentation to a XML output.
  *
- * <div class="note"><b>Design note:</b>
- * an alternative approach would have been to provide {@code startIdentation()} and {@code endIndentation()}
+ * <h2>Design note</h2>
+ * An alternative approach would have been to provide {@code startIdentation()} and {@code endIndentation()}
  * convenience methods in {@link StaxStreamWriter}, and let subclasses perform their own formatting. It would
  * reduce the need to try to guess some formatting aspects (e.g. whether to format on a single line or not).
  * However, that approach does not integrate very well with JAXB. The {@code Marshaller.JAXB_FORMATTED_OUTPUT}
  * property seems to be ignored when marshalling a fragment using {@code XMLStreamWriter}.
  * Even if that property was supported, we found no way to tell to JAXB to begin the indentation at some level
- * (for taking in account the indentation of the elements containing the fragment to marshal with JAXB).</div>
+ * (for taking in account the indentation of the elements containing the fragment to marshal with JAXB).
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @version 0.8
diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java
index c72a202f02..54721897ce 100644
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxStreamReader.java
@@ -415,9 +415,9 @@ public abstract class StaxStreamReader extends StaxStreamIO implements XMLStream
      *   <li>{@code Infinity} — a {@link Double#valueOf(String)} specific value.</li>
      * </ul>
      *
-     * <div class="note"><b>Note:</b>
-     * this method duplicates {@link javax.xml.bind.DatatypeConverter#parseDouble(String)} work,
-     * but avoid synchronization or volatile field cost of {@code DatatypeConverter}.</div>
+     * <h4>Implementation note</h4>
+     * This method duplicates {@link javax.xml.bind.DatatypeConverter#parseDouble(String)} work,
+     * but avoid synchronization or volatile field cost of {@code DatatypeConverter}.
      *
      * @param  value  the text to parse.
      * @return the floating point value for the given text.
@@ -447,10 +447,10 @@ parse:  switch (value.length()) {
      * {@link Boolean#parseBoolean(String)} with one extension: the "0" value is considered
      * as {@code false} and the "1" value as {@code true}.
      *
-     * <div class="note"><b>Note:</b>
-     * this method duplicates {@link javax.xml.bind.DatatypeConverter#parseBoolean(String)} work
+     * <h4>Implementation note</h4>
+     * This method duplicates {@link javax.xml.bind.DatatypeConverter#parseBoolean(String)} work
      * (except for its behavior in case of invalid value), but avoid synchronization or volatile
-     * field cost of {@code DatatypeConverter}.</div>
+     * field cost of {@code DatatypeConverter}.
      *
      * @param value  the string value to parse as a boolean.
      * @return true if the boolean is equal to "true" or "1".