Class | Description |
---|---|
AbstractMetadata |
Provides basic operations using Java reflection for metadata implementations.
|
MetadataStandard |
Enumeration of some metadata standards.
|
ModifiableMetadata |
Provides convenience methods for support of modifiable properties in metadata implementations.
|
Enum | Description |
---|---|
KeyNamePolicy |
The name of the keys included in a
Map of metadata. |
TypeValuePolicy |
The kind of values in the
MetadataStandard.asTypeMap(…) . |
ValueExistencePolicy |
Whatever
MetadataStandard.asValueMap(…) shall contain entries for null,
nil or empty values. |
Exception | Description |
---|---|
InvalidMetadataException |
Thrown when a metadata is in a invalid state, usually because a mandatory property is missing.
|
UnmodifiableMetadataException |
Thrown on attempt to set a read-only value in a metadata object.
|
javax.imageio.metadata
. The SIS implementation focuses on ISO 19115 (including
its ISO 19115-2 extension), but the classes are designed in a way that allow the usage of different standards.
This genericity goal should be keept in mind in the discussion below.
org.opengis.metadata
package and sub-packages. That standard is identified in SIS by the
MetadataStandard.ISO_19115
constant. Other standards are defined as well,
for example the MetadataStandard.ISO_19119
constant stands for the standards
defined by the interfaces in the org.opengis.service
package and sub-packages.
For each interface, the collection of declared getter methods defines its properties
(or attributes). If a UML
annotation is attached to the getter method,
the identifier declared in that annotation is taken as the property name. This is typically the name defined by the
International Standard from which the interface is derived. Otherwise (if there is no UML
annotation)
the property name is inferred from the method name like what the Java Beans framework does.
The implementation classes, if they exist, are defined in different packages than the interfaces.
For example the ISO 19115 interfaces, declared in org.opengis.metadata
, are implemented by
SIS in org.apache.sis.metadata.iso
. The subpackages hierarchy is the same, and the names
of implementation classes are the name of the implemented interfaces prefixed with Abstract
or Default
.
Notes:
Abstract
prefix means that the class is abstract in the sense of the implemented standard.
It it not necessarily abstract in the sense of Java. Because incomplete metadata are common in practice,
sometime we wish to instantiate an "abstract" class despite the lack of knowledge about the exact sub-type.Proxy
. This is the approach taken by the org.apache.sis.metadata.sql
package for generating metadata implementations backed by the content of a database.title
property of a Citation
object), but provide few logic.
The package org.apache.sis.metadata.iso
and its sub-packages are the main examples of such containers.
In addition, the metadata modules provide support methods for handling the metadata objects through Java Reflection. This is an approach similar to Java Beans, in that users are encouraged to use directly the API of Plain Old Java objects (actually interfaces) everytime their type is known at compile time, and fallback on the reflection technic when the type is known only at runtime.
Using Java reflection, a metadata can be viewed in many different ways:
As a Map
The MetadataStandard
class provides various methods returning a view
of an arbitrary metadata implementation as a Map
, where the key are the property names and the
values are the return values, types or descriptions of getter methods. The map is writable if the
underlying metadata implementation has setter methods, otherwise attempts to set a value throw an
UnmodifiableMetadataException
.
As a TreeTable
The metadata are organized as a tree. For example the Citation
metadata contains one or many
ResponsibleParty
elements, each of them containing a Contact
element, which contains
a Telephone
element, etc. For each node, there is many information that can be displayed
in columns:
String
, double
, etc).As a table record in a database (using org.apache.sis.metadata.sql
)
It is possible to establish the following mapping between metadata and a SQL database:
Only the implementation classes defined in the org.apache.sis.metadata.iso
packages and sub-packages
are annotated for JAXB marshalling. If a metadata is implemented by an other package (for example
org.apache.sis.metadata.sql
), then it shall be converted to an annotated class before to be marshalled.
All SIS annotated classes provide a copy constructor for this purpose. A shallow copy is sufficient;
JAXB adapters will convert the elements on-the-fly when needed.
The annotated classes can be given to a JAXB Marshaller
. For best results, it shall be a marshaller
obtained from the MarshallerPool
, otherwise some XML outputs may be incomplete
(missing namespaces for instance). The XML
class provides convenience methods
for this purpose.
Defined in the sis-metadata
module
Copyright © 2010–2014 The Apache Software Foundation. All rights reserved.