001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2004-2012 Open Geospatial Consortium, Inc.
006     *    All Rights Reserved. http://www.opengeospatial.org/ogc/legal
007     *
008     *    Permission to use, copy, and modify this software and its documentation, with
009     *    or without modification, for any purpose and without fee or royalty is hereby
010     *    granted, provided that you include the following on ALL copies of the software
011     *    and documentation or portions thereof, including modifications, that you make:
012     *
013     *    1. The full text of this NOTICE in a location viewable to users of the
014     *       redistributed or derivative work.
015     *    2. Notice of any changes or modifications to the OGC files, including the
016     *       date changes were made.
017     *
018     *    THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
019     *    NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
020     *    TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
021     *    THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
022     *    PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
023     *
024     *    COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
025     *    CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
026     *
027     *    The name and trademarks of copyright holders may NOT be used in advertising or
028     *    publicity pertaining to the software without specific, written prior permission.
029     *    Title to copyright in this software and any associated documentation will at all
030     *    times remain with copyright holders.
031     */
032    package org.opengis.metadata;
033    
034    import java.util.Collection;
035    import java.util.Date;
036    import java.util.Locale;
037    
038    import org.opengis.metadata.acquisition.AcquisitionInformation;
039    import org.opengis.metadata.quality.DataQuality;
040    import org.opengis.metadata.maintenance.ScopeCode;
041    import org.opengis.metadata.constraint.Constraints;
042    import org.opengis.metadata.distribution.Distribution;
043    import org.opengis.metadata.citation.ResponsibleParty;
044    import org.opengis.metadata.content.ContentInformation;
045    import org.opengis.metadata.spatial.SpatialRepresentation;
046    import org.opengis.metadata.identification.CharacterSet;
047    import org.opengis.metadata.identification.Identification;
048    import org.opengis.metadata.maintenance.MaintenanceInformation;
049    import org.opengis.referencing.ReferenceSystem;
050    import org.opengis.annotation.UML;
051    import org.opengis.annotation.Profile;
052    
053    import static org.opengis.annotation.Obligation.*;
054    import static org.opengis.annotation.Specification.*;
055    import static org.opengis.annotation.ComplianceLevel.*;
056    
057    
058    /**
059     * Root entity which defines metadata about a resource or resources.
060     *
061     * @author  Martin Desruisseaux (IRD)
062     * @author  Cory Horner (Refractions Research)
063     * @version 3.0
064     * @since   2.0
065     *
066     * @navassoc 1 - - CharacterSet
067     * @navassoc - - - ScopeCode
068     * @navassoc - - - ResponsibleParty
069     * @navassoc - - - SpatialRepresentation
070     * @navassoc - - - ReferenceSystem
071     * @navassoc - - - MetadataExtensionInformation
072     * @navassoc - - - Identification
073     * @navassoc - - - ContentInformation
074     * @navassoc 1 - - Distribution
075     * @navassoc - - - DataQuality
076     * @navassoc - - - PortrayalCatalogueReference
077     * @navassoc - - - Constraints
078     * @navassoc - - - ApplicationSchemaInformation
079     * @navassoc 1 - - MaintenanceInformation
080     * @navassoc - - - AcquisitionInformation
081     */
082    @UML(identifier="MD_Metadata", specification=ISO_19115)
083    public interface Metadata {
084        /**
085         * Unique identifier for this metadata file, or {@code null} if none.
086         *
087         * @return Unique identifier for this metadata file, or {@code null}.
088         */
089        @Profile(level=CORE)
090        @UML(identifier="fileIdentifier", obligation=OPTIONAL, specification=ISO_19115)
091        String getFileIdentifier();
092    
093        /**
094         * Language used for documenting metadata.
095         *
096         * @return Language used for documenting metadata, or {@code null}.
097         *
098         * @condition Not defined by encoding.
099         */
100        @Profile(level=CORE)
101        @UML(identifier="language", obligation=CONDITIONAL, specification=ISO_19115)
102        Locale getLanguage();
103    
104        /**
105         * Full name of the character coding standard used for the metadata set.
106         *
107         * @return character coding standard used for the metadata, or {@code null}.
108         *
109         * @condition Not used and not defined by encoding.
110         */
111        @Profile(level=CORE)
112        @UML(identifier="characterSet", obligation=CONDITIONAL, specification=ISO_19115)
113        CharacterSet getCharacterSet();
114    
115        /**
116         * File identifier of the metadata to which this metadata is a subset (child).
117         *
118         * @return Identifier of the metadata to which this metadata is a subset, or {@code null}.
119         *
120         * @condition {@linkplain #getHierarchyLevels() Hierarchy level} is not equal to
121         *            {@link ScopeCode#DATASET}.
122         */
123        @UML(identifier="parentIdentifier", obligation=CONDITIONAL, specification=ISO_19115)
124        String getParentIdentifier();
125    
126        /**
127         * Scope to which the metadata applies.
128         *
129         * @return Scope to which the metadata applies.
130         *
131         * @condition {@linkplain #getHierarchyLevels() Hierarchy level} is not equal to
132         *            {@link ScopeCode#DATASET}.
133         */
134        @UML(identifier="hierarchyLevel", obligation=CONDITIONAL, specification=ISO_19115)
135        Collection<ScopeCode> getHierarchyLevels();
136    
137        /**
138         * Name of the hierarchy levels for which the metadata is provided.
139         *
140         * @return Hierarchy levels for which the metadata is provided.
141         *
142         * @condition {@linkplain #getHierarchyLevels() Hierarchy level} is not equal to
143         *            {@link ScopeCode#DATASET}.
144         */
145        @UML(identifier="hierarchyLevelName", obligation=CONDITIONAL, specification=ISO_19115)
146        Collection<String> getHierarchyLevelNames();
147    
148        /**
149         * Parties responsible for the metadata information.
150         *
151         * @return Parties responsible for the metadata information.
152         *
153         * @see Identification#getPointOfContacts()
154         *
155         * @since 2.1
156         */
157        @Profile(level=CORE)
158        @UML(identifier="contact", obligation=MANDATORY, specification=ISO_19115)
159        Collection<? extends ResponsibleParty> getContacts();
160    
161        /**
162         * Date that the metadata was created.
163         * <p>
164         * <TABLE WIDTH="80%" ALIGN="center" CELLPADDING="18" BORDER="4" BGCOLOR="#FFE0B0">
165         *   <TR><TD>
166         *     <P align="justify"><B>Warning:</B> The return type of this method may change
167         *     in GeoAPI 3.1 release. It may be replaced by a type matching more closely
168         *     either ISO 19108 (<cite>Temporal Schema</cite>) or ISO 19103.</P>
169         *   </TD></TR>
170         * </TABLE>
171         *
172         * @return Date that the metadata was created.
173         */
174        @Profile(level=CORE)
175        @UML(identifier="dateStamp", obligation=MANDATORY, specification=ISO_19115)
176        Date getDateStamp();
177    
178        /**
179         * Name of the metadata standard (including profile name) used.
180         *
181         * @return Name of the metadata standard used, or {@code null}.
182         */
183        @Profile(level=CORE)
184        @UML(identifier="metadataStandardName", obligation=OPTIONAL, specification=ISO_19115)
185        String getMetadataStandardName();
186    
187        /**
188         * Version (profile) of the metadata standard used.
189         *
190         * @return Version of the metadata standard used, or {@code null}.
191         */
192        @Profile(level=CORE)
193        @UML(identifier="metadataStandardVersion", obligation=OPTIONAL, specification=ISO_19115)
194        String getMetadataStandardVersion();
195    
196        /**
197         * Uniformed Resource Identifier (URI) of the dataset to which the metadata applies.
198         *
199         * @return Uniformed Resource Identifier of the dataset, or {@code null}.
200         *
201         * @since 2.1
202         */
203        @UML(identifier="dataSetURI", obligation=OPTIONAL, specification=ISO_19115)
204        String getDataSetUri();
205    
206        /**
207         * Provides information about an alternatively used localized character
208         * string for a linguistic extension.
209         *
210         * @return Alternatively used localized character string for a linguistic extension.
211         *
212         * @since 2.1
213         */
214        @UML(identifier="locale", obligation=OPTIONAL, specification=ISO_19115)
215        Collection<Locale> getLocales();
216    
217        /**
218         * Digital representation of spatial information in the dataset.
219         *
220         * @return Digital representation of spatial information in the dataset.
221         */
222        @UML(identifier="spatialRepresentationInfo", obligation=OPTIONAL, specification=ISO_19115)
223        Collection<? extends SpatialRepresentation> getSpatialRepresentationInfo();
224    
225        /**
226         * Description of the spatial and temporal reference systems used in the dataset.
227         *
228         * @return Spatial and temporal reference systems used in the dataset.
229         */
230        @Profile(level=CORE)
231        @UML(identifier="referenceSystemInfo", obligation=OPTIONAL, specification=ISO_19115)
232        Collection<? extends ReferenceSystem> getReferenceSystemInfo();
233    
234        /**
235         * Information describing metadata extensions.
236         *
237         * @return Metadata extensions.
238         */
239        @UML(identifier="metadataExtensionInfo", obligation=OPTIONAL, specification=ISO_19115)
240        Collection<? extends MetadataExtensionInformation> getMetadataExtensionInfo();
241    
242        /**
243         * Basic information about the resource(s) to which the metadata applies.
244         *
245         * @return The resource(s) to which the metadata applies.
246         */
247        @Profile(level=CORE)
248        @UML(identifier="identificationInfo", obligation=MANDATORY, specification=ISO_19115)
249        Collection<? extends Identification> getIdentificationInfo();
250    
251        /**
252         * Provides information about the feature catalogue and describes the coverage and
253         * image data characteristics.
254         *
255         * @return The feature catalogue, coverage descriptions and image data characteristics.
256         */
257        @UML(identifier="contentInfo", obligation=OPTIONAL, specification=ISO_19115)
258        Collection<? extends ContentInformation> getContentInfo();
259    
260        /**
261         * Provides information about the distributor of and options for obtaining the resource(s).
262         *
263         * @return The distributor of and options for obtaining the resource(s).
264         */
265        @Profile(level=CORE)
266        @UML(identifier="distributionInfo", obligation=OPTIONAL, specification=ISO_19115)
267        Distribution getDistributionInfo();
268    
269        /**
270         * Provides overall assessment of quality of a resource(s).
271         *
272         * @return Overall assessment of quality of a resource(s).
273         */
274        @Profile(level=CORE)
275        @UML(identifier="dataQualityInfo", obligation=OPTIONAL, specification=ISO_19115)
276        Collection<? extends DataQuality> getDataQualityInfo();
277    
278        /**
279         * Provides information about the catalogue of rules defined for the portrayal of a resource(s).
280         *
281         * @return The catalogue of rules defined for the portrayal of a resource(s).
282         */
283        @UML(identifier="portrayalCatalogueInfo", obligation=OPTIONAL, specification=ISO_19115)
284        Collection<? extends PortrayalCatalogueReference> getPortrayalCatalogueInfo();
285    
286        /**
287         * Provides restrictions on the access and use of data.
288         *
289         * @return Restrictions on the access and use of data.
290         */
291        @UML(identifier="metadataConstraints", obligation=OPTIONAL, specification=ISO_19115)
292        Collection<? extends Constraints> getMetadataConstraints();
293    
294        /**
295         * Provides information about the conceptual schema of a dataset.
296         *
297         * @return The conceptual schema of a dataset.
298         */
299        @UML(identifier="applicationSchemaInfo", obligation=OPTIONAL, specification=ISO_19115)
300        Collection<? extends ApplicationSchemaInformation> getApplicationSchemaInfo();
301    
302        /**
303         * Provides information about the frequency of metadata updates, and the scope of those updates.
304         *
305         * @return The frequency of metadata updates and their scope.
306         */
307        @UML(identifier="metadataMaintenance", obligation=OPTIONAL, specification=ISO_19115)
308        MaintenanceInformation getMetadataMaintenance();
309    
310        /**
311         * Provides information about the acquisition of the data.
312         *
313         * @return The acquisition of data.
314         */
315        @UML(identifier="acquisitionInformation", obligation=OPTIONAL, specification=ISO_19115_2)
316        Collection<? extends AcquisitionInformation> getAcquisitionInformation();
317    }