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 2022/11/17 11:01:27 UTC

[sis] 01/01: Merge branch 'geoapi-4.0' into geoapi-3.1. This is the upgrade of metadata quality package from ISO 19115 to ISO 19157.

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

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

commit 86bb5bbf6b5b3c94e23e76b0c712818533d85fdd
Merge: a143312778 0d58e3a7b4
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Thu Nov 17 12:00:37 2022 +0100

    Merge branch 'geoapi-4.0' into geoapi-3.1.
    This is the upgrade of metadata quality package from ISO 19115 to ISO 19157.
    
    https://issues.apache.org/jira/browse/SIS-394

 .../org/apache/sis/feature/AbstractAttribute.java  |   3 +-
 .../apache/sis/feature/DefaultAttributeType.java   |   3 +-
 .../main/java/org/apache/sis/feature/Features.java |   6 +-
 .../apache/sis/internal/jaxb/FilterByVersion.java  |   4 +-
 .../apache/sis/internal/jaxb/cat/CodeListUID.java  |  10 +-
 .../sis/internal/jaxb/code/DQM_ValueStructure.java |  89 ++++
 .../sis/internal/jaxb/code/package-info.java       |   3 +-
 .../apache/sis/internal/jaxb/gco/GO_DateTime.java  |  26 +-
 .../apache/sis/internal/jaxb/gco/package-info.java |   2 +-
 .../internal/jaxb/metadata/DQM_BasicMeasure.java   |  92 ++++
 .../internal/jaxb/metadata/DQM_Description.java    |  92 ++++
 .../sis/internal/jaxb/metadata/DQM_Measure.java    |  92 ++++
 .../sis/internal/jaxb/metadata/DQM_Parameter.java  |  93 ++++
 .../jaxb/metadata/DQM_SourceReference.java         |  92 ++++
 .../jaxb/metadata/DQ_EvaluationMethod.java         |  97 ++++
 .../jaxb/metadata/DQ_MeasureReference.java         |  97 ++++
 .../DQ_StandaloneQualityReportInformation.java     |  99 ++++
 .../sis/internal/jaxb/metadata/package-info.java   |   3 +-
 .../internal/jaxb/metadata/replace/Parameter.java  | 173 ++++++
 .../jaxb/metadata/replace/QualityParameter.java    | 246 +++++++++
 .../jaxb/metadata/replace/ServiceParameter.java    | 234 ++++----
 .../jaxb/metadata/replace/package-info.java        |  21 +-
 .../sis/internal/metadata/ReferencingServices.java |   5 +-
 .../org/apache/sis/metadata/MetadataStandard.java  |  63 ++-
 .../org/apache/sis/metadata/PropertyAccessor.java  |   4 +-
 .../java/org/apache/sis/metadata/SpecialCases.java |  19 +-
 .../sis/metadata/StandardImplementation.java       |   6 +-
 .../sis/metadata/iso/acquisition/package-info.java |   2 +-
 .../sis/metadata/iso/citation/package-info.java    |   2 +-
 .../sis/metadata/iso/constraint/package-info.java  |   2 +-
 .../sis/metadata/iso/content/package-info.java     |   2 +-
 .../metadata/iso/distribution/package-info.java    |   2 +-
 .../sis/metadata/iso/extent/package-info.java      |   2 +-
 .../metadata/iso/identification/package-info.java  |   2 +-
 .../sis/metadata/iso/lineage/package-info.java     |   2 +-
 .../sis/metadata/iso/maintenance/package-info.java |   2 +-
 .../org/apache/sis/metadata/iso/package-info.java  |   2 +-
 .../metadata/iso/quality/AbstractCompleteness.java |   2 +-
 ...ractResult.java => AbstractDataEvaluation.java} |  77 ++-
 .../sis/metadata/iso/quality/AbstractElement.java  | 589 +++++++++++----------
 .../iso/quality/AbstractLogicalConsistency.java    |   2 +-
 ...bstractResult.java => AbstractMetaquality.java} |  82 +--
 .../iso/quality/AbstractPositionalAccuracy.java    |  12 +-
 .../sis/metadata/iso/quality/AbstractResult.java   | 105 +++-
 .../iso/quality/AbstractTemporalAccuracy.java      |  42 +-
 ...lAccuracy.java => AbstractTemporalQuality.java} |  52 +-
 .../iso/quality/AbstractThematicAccuracy.java      |  17 +-
 .../DefaultAbsoluteExternalPositionalAccuracy.java |   5 +-
 .../quality/DefaultAccuracyOfATimeMeasurement.java |  10 +-
 ...lity.java => DefaultAggregationDerivation.java} |  49 +-
 .../metadata/iso/quality/DefaultBasicMeasure.java  | 225 ++++++++
 .../iso/quality/DefaultCompletenessCommission.java |   3 +-
 .../iso/quality/DefaultCompletenessOmission.java   |   3 +-
 .../iso/quality/DefaultConceptualConsistency.java  |   7 +-
 ...efaultUsability.java => DefaultConfidence.java} |  53 +-
 .../iso/quality/DefaultConformanceResult.java      |   7 +-
 .../iso/quality/DefaultCoverageResult.java         |  67 ++-
 .../metadata/iso/quality/DefaultDataQuality.java   |  84 ++-
 .../metadata/iso/quality/DefaultDescription.java   | 172 ++++++
 .../iso/quality/DefaultDescriptiveResult.java      | 142 +++++
 .../iso/quality/DefaultDomainConsistency.java      |   3 +-
 ...ctElement.java => DefaultEvaluationMethod.java} | 311 +++--------
 .../iso/quality/DefaultFormatConsistency.java      |   5 +-
 ...ltUsability.java => DefaultFullInspection.java} |  51 +-
 .../DefaultGriddedDataPositionalAccuracy.java      |   3 +-
 ...faultUsability.java => DefaultHomogeneity.java} |  53 +-
 .../iso/quality/DefaultIndirectEvaluation.java     | 142 +++++
 .../sis/metadata/iso/quality/DefaultMeasure.java   | 469 ++++++++++++++++
 .../iso/quality/DefaultMeasureReference.java       | 201 +++++++
 .../DefaultNonQuantitativeAttributeAccuracy.java   |  22 +-
 ...efaultNonQuantitativeAttributeCorrectness.java} |  56 +-
 .../DefaultQuantitativeAttributeAccuracy.java      |   3 +-
 .../iso/quality/DefaultQuantitativeResult.java     |  31 +-
 .../DefaultRelativeInternalPositionalAccuracy.java |   3 +-
 ...lValidity.java => DefaultRepresentativity.java} |  51 +-
 .../iso/quality/DefaultSampleBasedInspection.java  | 191 +++++++
 ...alAccuracy.java => DefaultSourceReference.java} |  86 ++-
 .../DefaultStandaloneQualityReportInformation.java | 163 ++++++
 .../iso/quality/DefaultTemporalConsistency.java    |   8 +-
 .../iso/quality/DefaultTemporalValidity.java       |   8 +-
 .../DefaultThematicClassificationCorrectness.java  |   3 +-
 .../iso/quality/DefaultTopologicalConsistency.java |   9 +-
 .../sis/metadata/iso/quality/DefaultUsability.java |  19 +-
 ...lAccuracy.java => DefaultUsabilityElement.java} |  54 +-
 .../sis/metadata/iso/quality/ISOMetadata.java      |  60 +++
 .../sis/metadata/iso/quality/package-info.java     |  95 +---
 .../sis/metadata/iso/spatial/package-info.java     |   2 +-
 .../java/org/apache/sis/metadata/package-info.java |   2 +-
 .../apache/sis/util/iso/DefaultNameFactory.java    |  80 ++-
 .../org/apache/sis/util/iso/DefaultTypeName.java   | 232 ++++----
 .../main/java/org/apache/sis/util/iso/Names.java   |  97 ++--
 .../java/org/apache/sis/util/iso/TypeNames.java    |  41 +-
 .../main/java/org/apache/sis/xml/Namespaces.java   |  80 +--
 .../src/main/java/org/apache/sis/xml/readme.html   |  16 +-
 .../org/apache/sis/xml/RenameOnImport.lst          |  14 +-
 .../internal/jaxb/cat/CodeListMarshallingTest.java |   2 +-
 .../metadata/replace/QualityParameterTest.java     | 117 ++++
 .../metadata/replace/ServiceParameterTest.java     |  14 +-
 .../sis/metadata/PropertyConsistencyCheck.java     |   3 +-
 .../apache/sis/metadata/iso/AllMetadataTest.java   |  51 +-
 .../DefaultServiceIdentificationTest.java          |   8 +-
 .../quality/AbstractPositionalAccuracyTest.java    |  13 +-
 .../iso/quality/DefaultDomainConsistencyTest.java  |  47 ++
 .../iso/quality/DefaultQuantitativeResultTest.java |  50 ++
 .../sis/metadata/xml/SchemaComplianceTest.java     |   4 +-
 .../apache/sis/test/suite/MetadataTestSuite.java   |   3 +
 .../sis/test/xml/AnnotationConsistencyCheck.java   |  62 ++-
 .../org/apache/sis/test/xml/PackageVerifier.java   |  10 +-
 .../org/apache/sis/test/xml/SchemaCompliance.java  |   7 +-
 .../java/org/apache/sis/util/iso/NamesTest.java    |  35 +-
 .../org/apache/sis/util/iso/TypeNamesTest.java     |  10 +-
 .../java/org/apache/sis/util/iso/TypesTest.java    |   2 +-
 .../org/apache/sis/xml/RenameListGenerator.java    |  24 +-
 .../sis/metadata/xml/2007/PositionalAccuracy.xml   |  11 +-
 .../apache/sis/metadata/xml/2007/ProcessStep.xml   |   2 +-
 .../metadata/xml/2007/ServiceIdentification.xml    |   2 +-
 .../org/apache/sis/metadata/xml/2016/Citation.xml  |   4 +-
 .../org/apache/sis/metadata/xml/2016/Extent.xml    |   2 +-
 .../org/apache/sis/metadata/xml/2016/Locales.xml   |   2 +-
 .../org/apache/sis/metadata/xml/2016/Metadata.xml  |  20 +-
 .../apache/sis/metadata/xml/2016/Multiplicity.xml  |   2 +-
 .../sis/metadata/xml/2016/PositionalAccuracy.xml   |  33 +-
 .../apache/sis/metadata/xml/2016/ProcessStep.xml   |   2 +-
 .../metadata/xml/2016/ServiceIdentification.xml    |   6 +-
 .../internal/referencing/ServicesForMetadata.java  |   5 +-
 .../sis/parameter/DefaultParameterDescriptor.java  |  40 +-
 .../parameter/DefaultParameterDescriptorTest.java  |  50 +-
 .../org/apache/sis/parameter/ParametersTest.java   |   8 +-
 .../apache/sis/internal/system/DataDirectory.java  |   2 +-
 .../org/apache/sis/internal/util/Constants.java    |   7 +-
 .../src/main/java/org/apache/sis/util/Classes.java | 190 +++++--
 .../src/main/java/org/apache/sis/util/Numbers.java |   9 +-
 .../org/apache/sis/util/UnknownNameException.java  |   7 +-
 .../test/java/org/apache/sis/util/ClassesTest.java |  86 ++-
 pom.xml                                            |   2 +-
 135 files changed, 5369 insertions(+), 1750 deletions(-)

diff --cc core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/QualityParameter.java
index 0000000000,fc7dcb875b..b902327e87
mode 000000,100644..100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/QualityParameter.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/QualityParameter.java
@@@ -1,0 -1,245 +1,246 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *     http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package org.apache.sis.internal.jaxb.metadata.replace;
+ 
+ import java.util.Map;
+ import javax.xml.bind.annotation.XmlType;
+ import javax.xml.bind.annotation.XmlElement;
+ import javax.xml.bind.annotation.XmlRootElement;
+ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+ import org.opengis.util.TypeName;
+ import org.opengis.util.InternationalString;
+ import org.opengis.metadata.Identifier;
+ import org.opengis.metadata.quality.Description;
+ import org.opengis.metadata.quality.ValueStructure;
+ import org.opengis.parameter.ParameterDescriptor;
+ import org.opengis.referencing.operation.Matrix;
+ import org.apache.sis.metadata.iso.DefaultIdentifier;
+ import org.apache.sis.metadata.iso.quality.DefaultDescription;
+ import org.apache.sis.internal.jaxb.gco.GO_GenericName;
+ import org.apache.sis.util.Classes;
+ import org.apache.sis.util.iso.Names;
+ import org.apache.sis.xml.Namespaces;
+ 
+ // Branch-dependent imports
+ import org.opengis.coverage.Coverage;
++import org.opengis.referencing.ReferenceIdentifier;
+ 
+ 
+ /**
+  * Parameter information conform to the ISO 19157:2013 specification.
+  * GeoAPI tries to provides a single API for the parameter classes defined in various specifications
+  * (ISO 19111, ISO 19115, ISO 19157, Web Processing Service).
+  * But we still need separated representations at XML (un)marshalling time.
+  * This class is for the ISO 19157:2013 case.
+  *
+  * <p>Note that this implementation is simple and serves no other purpose than being a container for XML
+  * parsing and formatting. For real parameter framework, consider using {@link org.apache.sis.parameter}
+  * package instead.</p>
+  *
+  * <h2>Note about raw-type usage</h2>
+  * We use raw type (i.e. we implement {@code ParameterDescriptor} instead of {@code ParameterDescriptor<T>})
+  * because there is no way we can know {@code <T>} for sure at unmarshalling time. This is not a recommended
+  * practice, so <strong>this class shall not be in public API</strong>.  However it should be okay to create
+  * {@code QualityParameter} instances in Apache SIS internal code if all methods creating such instances
+  * declare {@code ParameterDescriptor<?>} as their return type.
+  *
+  * @author  Martin Desruisseaux (Geomatys)
+  * @version 1.3
+  * @since   1.3
+  * @module
+  */
+ @SuppressWarnings("rawtypes")   // For the omission of <T> in Parameter<T> - see javadoc.
+ @XmlType(name = "DQM_Parameter_Type", namespace = Namespaces.DQM, propOrder = {
+     "code",
+     "definition",
+     "description",
+     "valueType",
+     "valueStructure"
+ })
+ @XmlRootElement(name = "DQM_Parameter", namespace = Namespaces.DQM)
+ public final class QualityParameter extends Parameter {
+     /**
+      * Name of the data quality parameter, to be represented as identifier code.
+      *
+      * @see #getName()
+      */
+     @XmlElement(name="name", required=true)
+     String code;
+ 
+     /**
+      * Definition of the data quality parameter.
+      * Stored in {@link Identifier#getDescription()}.
+      *
+      * @see #getName()
+      */
+     @XmlElement(required = true)
+     InternationalString definition;
+ 
+     /**
+      * Description of the data quality parameter.
+      *
+      * @see #getDescription()
+      */
+     @XmlElement
+     Description description;
+ 
+     /**
+      * Value type of the data quality parameter (shall be one of the data types defined in ISO/TS 19103:2005).
+      *
+      * @see #getValueType()
+      * @see #getValueClass()
+      */
+     @XmlElement(required = true)
+     @XmlJavaTypeAdapter(GO_GenericName.class)   // Not in package-info because shall not be applied to getLegacyName().
+     TypeName valueType;
+ 
+     /**
+      * Structure of the data quality parameter.
+      *
+      * @see #getValueClass()
+      */
+     @XmlElement
+     ValueStructure valueStructure;
+ 
+     /**
+      * Creates an initially empty parameter.
+      * This constructor is needed by JAXB at unmarshalling time.
+      *
+      * <p><strong>Consider this constructor as private</strong> except for testing purpose.
+      * See <cite>Note about raw-type usage</cite> in class javadoc.</p>
+      */
+     QualityParameter() {
+     }
+ 
+     /**
+      * Creates a parameter initialized to the values of the given one.
+      * This is used for marshalling an arbitrary parameter as an ISO 19157 parameter.
+      */
+     @SuppressWarnings("unchecked")
+     private QualityParameter(final ParameterDescriptor<?> parameter) {
+         super(parameter);
+         final Identifier id = parameter.getName();
+         if (id != null) {
+             code = id.getCode();
+             definition = id.getDescription();
+         }
+         InternationalString text = parameter.getDescription();
+         if (text != null) {
+             description = new DefaultDescription(text);
+         }
+         valueType = parameter.getValueType();
+         valueStructure = ValueStructure.valueOf(parameter.getValueClass()).orElse(null);
+     }
+ 
+     /**
+      * Returns the given parameter as an instance of {@code QualityParameter}.
+      *
+      * @param  parameter  the parameter (may be {@code null}).
+      * @return the service parameter, or {@code null} if the given argument was null.
+      */
+     public static QualityParameter castOrCopy(final ParameterDescriptor<?> parameter) {
+         if (parameter == null || parameter instanceof QualityParameter) {
+             return (QualityParameter) parameter;
+         }
+         return new QualityParameter(parameter);
+     }
+ 
+     /**
+      * Returns the name as an {@code Identifier}, which is the type requested by ISO 19111.
+      * Note that this is different than the type requested by ISO 19157, which is {@link String}.
+      *
+      * @return the parameter name as an identifier (the type specified by ISO 19111).
+      */
+     @Override
 -    public synchronized Identifier getName() {
++    public synchronized ReferenceIdentifier getName() {
+         if (name == null && code != null) {
 -            final DefaultIdentifier id = new DefaultIdentifier(code);
++            final RS_Identifier id = new RS_Identifier(null, code, null);
+             id.setDescription(definition);
+             id.transitionTo(DefaultIdentifier.State.FINAL);
+             name = id;
+         }
+         return name;
+     }
+ 
+     /**
+      * Returns a narrative explanation of the role of the parameter.
+      *
+      * @return a narrative explanation of the role of the parameter, or {@code null} if none.
+      */
+     @Override
+     public InternationalString getDescription() {
+         final Description description = this.description;
+         return (description != null) ? description.getTextDescription() : null;
+     }
+ 
+     /**
+      * Infers the value class from the type name.
+      * This method is the reason why we can not parameterize this {@code QualityParameter} class
+      * (see <cite>Note about raw-type usage</cite> in class javadoc), because there is no way we
+      * can ensure that the class inferred from {@link #valueType} is really for type {@code <T>}.
+      *
+      * @return the value class inferred from the attribute type, or {@code null} if unknown.
+      */
+     @Override
+     public Class<?> getValueClass() {
+         Class<?> type = super.getValueClass();
+         if (type == null) {
+             final ValueStructure s = valueStructure;
+             type = (s != null) ? s.toJavaType().orElse(null) : Names.toClass(valueType);
+         }
+         return type;
+     }
+ 
+     /**
+      * Returns the name that describes the type of parameter values.
+      *
+      * @return the type name of value component(s) in this parameter.
+      */
+     @Override
+     public TypeName getValueType() {
+         return valueType;
+     }
+ 
+     /**
+      * Suggests a type name for the components of given collection or array class.
+      * The component type is fetched on a <cite>best effort</cite> basis only.
+      * This method does the following checks:
+      * <ul>
+      *   <li>If the given class is a class, then its {@linkplain Class#getComponentType() component type} is used.</li>
+      *   <li>Otherwise if the class is an {@link Iterable}, then the upper bound of elements is fetched.</li>
+      *   <li>Otherwise if the class is a {@link Map}, then the upper bound of keys is fetched.</li>
+      *   <li>Otherwise if the class is a {@link Matrix} or {@link Coverage}, then {@link Double} components is assumed.</li>
+      *   <li>Otherwise the given class is used as if it was already a component type (i.e. a singleton item).</li>
+      * </ul>
+      *
+      * This method is used for mapping {@link Class} to ({@link ValueStructure}, {@link TypeName}) pair.
+      * The other member of the pair is given by {@link ValueStructure#valueOf(Class)}.
+      *
+      * @param  valueClass  the type of values for which to infer a {@link TypeName} instance.
+      * @return a type name for components of the given type.
+      */
+     public static TypeName getValueType(Class<?> valueClass) {
+         if (valueClass.isArray()) {
+             valueClass = valueClass.getComponentType();
+         } else if (Iterable.class.isAssignableFrom(valueClass) || Map.class.isAssignableFrom(valueClass)) {
+             valueClass = Classes.boundOfParameterizedDeclaration(valueClass);
+         } else if (Matrix.class.isAssignableFrom(valueClass) || Coverage.class.isAssignableFrom(valueClass)) {
+             valueClass = Double.class;
+         }
+         return Names.createTypeName(valueClass);
+     }
+ }
diff --cc core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ServiceParameter.java
index 8b190ed7f7,350daf8bb5..c0a46ff19a
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ServiceParameter.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ServiceParameter.java
@@@ -39,12 -34,9 +34,12 @@@ import org.apache.sis.internal.metadata
  import org.apache.sis.util.iso.DefaultMemberName;
  import org.apache.sis.util.iso.Names;
  import org.apache.sis.xml.Namespaces;
- import org.apache.sis.util.ComparisonMode;
- import org.apache.sis.util.resources.Errors;
  
- import static org.apache.sis.util.Utilities.deepEquals;
  import static org.apache.sis.internal.util.CollectionsExt.nonNull;
  
++// Branch-dependent imports
++import org.opengis.referencing.ReferenceIdentifier;
++
  
  /**
   * Parameter information conform to the ISO 19115:2014 specification.
@@@ -214,6 -227,26 +230,26 @@@ public final class ServiceParameter ext
          return null;
      }
  
+     /**
+      * Returns the name as an {@code Identifier}, which is the type requested by ISO 19111.
+      * Note that this is different than the type requested by ISO 19115, which is {@link MemberName}.
+      *
+      * This method is the converse of {@link #getMemberName(ParameterDescriptor)}.
+      *
+      * @return the parameter name as an identifier (the type specified by ISO 19111).
+      */
+     @Override
 -    public synchronized Identifier getName() {
++    public synchronized ReferenceIdentifier getName() {
+         if (name == null && memberName != null) {
 -            if (memberName instanceof Identifier) {
 -                name = (Identifier) memberName;
++            if (memberName instanceof ReferenceIdentifier) {
++                name = (ReferenceIdentifier) memberName;
+             } else {
+                 name = new NameToIdentifier(memberName);
+             }
+         }
+         return name;
+     }
+ 
      /**
       * Returns the name to be marshalled in the ISO 19139:2007 way. Example:
       *
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java
index f4b1a92af8,b60c360ec5..10be7cc10e
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java
@@@ -23,12 -23,13 +23,14 @@@ import javax.xml.bind.annotation.XmlRoo
  import org.opengis.metadata.lineage.Lineage;
  import org.opengis.metadata.quality.DataQuality;
  import org.opengis.metadata.quality.Element;
- import org.opengis.metadata.quality.Scope;
+ import org.opengis.metadata.quality.StandaloneQualityReportInformation;
 -import org.opengis.metadata.maintenance.Scope;
  import org.opengis.metadata.maintenance.ScopeCode;
- import org.apache.sis.metadata.iso.ISOMetadata;
 -import org.apache.sis.metadata.iso.maintenance.DefaultScope;
  import org.apache.sis.internal.jaxb.FilterByVersion;
  import org.apache.sis.internal.xml.LegacyNamespaces;
  
++// Branch-dependent imports
++import org.opengis.metadata.quality.Scope;
++
  
  /**
   * Quality information for the data specified by a data quality scope.
diff --cc core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/package-info.java
index f68c3e3d20,0650db257b..e0a8813103
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/package-info.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/package-info.java
@@@ -141,7 -79,8 +79,8 @@@
      @XmlJavaTypeAdapter(MD_ContentInformation.class),
      @XmlJavaTypeAdapter(MD_Format.class),
      @XmlJavaTypeAdapter(MD_Identifier.class),
+ //  @XmlJavaTypeAdapter(MD_RangeDimension.class),       // Pending new ISO 19157 revision.
 -    @XmlJavaTypeAdapter(MD_Scope.class),
 +    @XmlJavaTypeAdapter(MD_Scope.Legacy.class),
      @XmlJavaTypeAdapter(MD_SpatialRepresentation.class),
      @XmlJavaTypeAdapter(MD_SpatialRepresentationTypeCode.class),
      @XmlJavaTypeAdapter(MX_DataFile.class),
diff --cc core/sis-referencing/src/test/java/org/apache/sis/parameter/ParametersTest.java
index 31aacc3d3e,fdb16740a8..908b73d1e2
--- a/core/sis-referencing/src/test/java/org/apache/sis/parameter/ParametersTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/parameter/ParametersTest.java
@@@ -23,8 -23,9 +23,8 @@@ import javax.measure.Unit
  import org.opengis.parameter.ParameterDescriptor;
  import org.opengis.parameter.ParameterDirection;
  import org.opengis.parameter.ParameterValue;
- import org.opengis.referencing.ReferenceIdentifier;
  import org.opengis.parameter.ParameterValueGroup;
 -import org.opengis.metadata.Identifier;
+ import org.opengis.util.TypeName;
  import org.opengis.util.GenericName;
  import org.opengis.util.InternationalString;
  import org.apache.sis.measure.Range;
@@@ -38,6 -39,6 +38,9 @@@ import org.junit.Test
  
  import static org.junit.Assert.*;
  
++// Branch-dependent imports
++import org.opengis.referencing.ReferenceIdentifier;
++
  
  /**
   * Tests the static methods in the {@link Parameters} class.