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 }