001 /*
002 * GeoAPI - Java interfaces for OGC/ISO standards
003 * http://www.geoapi.org
004 *
005 * Copyright (C) 2004-2013 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 * Metadata for which no hierarchy is listed are interpreted to be
129 * "{@linkplain ScopeCode#DATASET dataset}" metadata by default.
130 *
131 * @return Scope to which the metadata applies.
132 *
133 * @condition Mandatory if the metadata is about a resource other than a dataset.
134 */
135 @UML(identifier="hierarchyLevel", obligation=CONDITIONAL, specification=ISO_19115)
136 Collection<ScopeCode> getHierarchyLevels();
137
138 /**
139 * Name of the hierarchy levels for which the metadata is provided.
140 *
141 * @return Hierarchy levels for which the metadata is provided.
142 *
143 * @condition {@linkplain #getHierarchyLevels() Hierarchy level} is not equal to
144 * {@link ScopeCode#DATASET}.
145 */
146 @UML(identifier="hierarchyLevelName", obligation=CONDITIONAL, specification=ISO_19115)
147 Collection<String> getHierarchyLevelNames();
148
149 /**
150 * Parties responsible for the metadata information.
151 *
152 * @return Parties responsible for the metadata information.
153 *
154 * @see Identification#getPointOfContacts()
155 *
156 * @since 2.1
157 */
158 @Profile(level=CORE)
159 @UML(identifier="contact", obligation=MANDATORY, specification=ISO_19115)
160 Collection<? extends ResponsibleParty> getContacts();
161
162 /**
163 * Date that the metadata was created.
164 * <p>
165 * <TABLE WIDTH="80%" ALIGN="center" CELLPADDING="18" BORDER="4" BGCOLOR="#FFE0B0">
166 * <TR><TD>
167 * <P align="justify"><B>Warning:</B> The return type of this method may change
168 * in GeoAPI 3.1 release. It may be replaced by a type matching more closely
169 * either ISO 19108 (<cite>Temporal Schema</cite>) or ISO 19103.</P>
170 * </TD></TR>
171 * </TABLE>
172 *
173 * @return Date that the metadata was created.
174 */
175 @Profile(level=CORE)
176 @UML(identifier="dateStamp", obligation=MANDATORY, specification=ISO_19115)
177 Date getDateStamp();
178
179 /**
180 * Name of the metadata standard (including profile name) used.
181 *
182 * @return Name of the metadata standard used, or {@code null}.
183 */
184 @Profile(level=CORE)
185 @UML(identifier="metadataStandardName", obligation=OPTIONAL, specification=ISO_19115)
186 String getMetadataStandardName();
187
188 /**
189 * Version (profile) of the metadata standard used.
190 *
191 * @return Version of the metadata standard used, or {@code null}.
192 */
193 @Profile(level=CORE)
194 @UML(identifier="metadataStandardVersion", obligation=OPTIONAL, specification=ISO_19115)
195 String getMetadataStandardVersion();
196
197 /**
198 * Uniformed Resource Identifier (URI) of the dataset to which the metadata applies.
199 *
200 * @return Uniformed Resource Identifier of the dataset, or {@code null}.
201 *
202 * @since 2.1
203 */
204 @UML(identifier="dataSetURI", obligation=OPTIONAL, specification=ISO_19115)
205 String getDataSetUri();
206
207 /**
208 * Provides information about an alternatively used localized character
209 * string for a linguistic extension.
210 *
211 * @return Alternatively used localized character string for a linguistic extension.
212 *
213 * @since 2.1
214 */
215 @UML(identifier="locale", obligation=OPTIONAL, specification=ISO_19115)
216 Collection<Locale> getLocales();
217
218 /**
219 * Digital representation of spatial information in the dataset.
220 *
221 * @return Digital representation of spatial information in the dataset.
222 */
223 @UML(identifier="spatialRepresentationInfo", obligation=OPTIONAL, specification=ISO_19115)
224 Collection<? extends SpatialRepresentation> getSpatialRepresentationInfo();
225
226 /**
227 * Description of the spatial and temporal reference systems used in the dataset.
228 *
229 * @return Spatial and temporal reference systems used in the dataset.
230 */
231 @Profile(level=CORE)
232 @UML(identifier="referenceSystemInfo", obligation=OPTIONAL, specification=ISO_19115)
233 Collection<? extends ReferenceSystem> getReferenceSystemInfo();
234
235 /**
236 * Information describing metadata extensions.
237 *
238 * @return Metadata extensions.
239 */
240 @UML(identifier="metadataExtensionInfo", obligation=OPTIONAL, specification=ISO_19115)
241 Collection<? extends MetadataExtensionInformation> getMetadataExtensionInfo();
242
243 /**
244 * Basic information about the resource(s) to which the metadata applies.
245 *
246 * @return The resource(s) to which the metadata applies.
247 */
248 @Profile(level=CORE)
249 @UML(identifier="identificationInfo", obligation=MANDATORY, specification=ISO_19115)
250 Collection<? extends Identification> getIdentificationInfo();
251
252 /**
253 * Provides information about the feature catalogue and describes the coverage and
254 * image data characteristics.
255 *
256 * @return The feature catalogue, coverage descriptions and image data characteristics.
257 */
258 @UML(identifier="contentInfo", obligation=OPTIONAL, specification=ISO_19115)
259 Collection<? extends ContentInformation> getContentInfo();
260
261 /**
262 * Provides information about the distributor of and options for obtaining the resource(s).
263 *
264 * @return The distributor of and options for obtaining the resource(s).
265 */
266 @Profile(level=CORE)
267 @UML(identifier="distributionInfo", obligation=OPTIONAL, specification=ISO_19115)
268 Distribution getDistributionInfo();
269
270 /**
271 * Provides overall assessment of quality of a resource(s).
272 *
273 * @return Overall assessment of quality of a resource(s).
274 */
275 @Profile(level=CORE)
276 @UML(identifier="dataQualityInfo", obligation=OPTIONAL, specification=ISO_19115)
277 Collection<? extends DataQuality> getDataQualityInfo();
278
279 /**
280 * Provides information about the catalogue of rules defined for the portrayal of a resource(s).
281 *
282 * @return The catalogue of rules defined for the portrayal of a resource(s).
283 */
284 @UML(identifier="portrayalCatalogueInfo", obligation=OPTIONAL, specification=ISO_19115)
285 Collection<? extends PortrayalCatalogueReference> getPortrayalCatalogueInfo();
286
287 /**
288 * Provides restrictions on the access and use of data.
289 *
290 * @return Restrictions on the access and use of data.
291 */
292 @UML(identifier="metadataConstraints", obligation=OPTIONAL, specification=ISO_19115)
293 Collection<? extends Constraints> getMetadataConstraints();
294
295 /**
296 * Provides information about the conceptual schema of a dataset.
297 *
298 * @return The conceptual schema of a dataset.
299 */
300 @UML(identifier="applicationSchemaInfo", obligation=OPTIONAL, specification=ISO_19115)
301 Collection<? extends ApplicationSchemaInformation> getApplicationSchemaInfo();
302
303 /**
304 * Provides information about the frequency of metadata updates, and the scope of those updates.
305 *
306 * @return The frequency of metadata updates and their scope.
307 */
308 @UML(identifier="metadataMaintenance", obligation=OPTIONAL, specification=ISO_19115)
309 MaintenanceInformation getMetadataMaintenance();
310
311 /**
312 * Provides information about the acquisition of the data.
313 *
314 * @return The acquisition of data.
315 */
316 @UML(identifier="acquisitionInformation", obligation=OPTIONAL, specification=ISO_19115_2)
317 Collection<? extends AcquisitionInformation> getAcquisitionInformation();
318 }