|
The Type OSID defines a set of interfaces for managing
Type definitions. Types are used
as an identifier primarily for identification of interface
extensions throughout the OSIDs and occasionally used as
an extensible enumeration. An agreement between an OSID
Consumer and an OSID Provider means they support the same
Type.
Types
A Type is similar to an Id but includes
other data for display and organization. The
identification portion of the Type is globally unique and
contains:
- authority: the name of the entity or organization
responsible for the type. Using a domain name is a
reasonable convention.
- identifier: a string serving as an id. The
identifier may be a urn, guid, oid or some other means
of identification. Since all of the identification
elements including the domain and authority create an
overall unique Type, the identifier may even be a
sequence number defined within a particular domain.
- namespace: a string identifying the namespace of
the identifier, such as "urn" or "oid".
Example
Type type = lookupSession.getType("asset", "uri",
"http://harvestroad.com/osidTypes/image",
"harvestroad.com");
print type.getDisplayName();
The sessions in this OSID offer the capabilities of a
Type registry to centrally manage definitions
and localized display strings and descriptions.
Applications may opt to construct their own
Types directly and bypass this service.
Type Hierarchies
Types are part of an internal hierarchy. A
Type in a hierarchy includes the
Types of its children. For example, an
Asset may have a "photograph"
Type included as part of an "image" base
Type.
Unless an application will display a type, it can
simply construct a type based on the identification
components. OSID Providers may benefit by using this
service to manage the type hierarchy, to provide a place
to perform mappings across different type definitions, and
to provide displayable metadata to its consumers.
Type Type Relations
Types may relate to other Types
to describe constraints or compositions. The relationship
is expressed as another Type. For example, a
Position of type "researcher" may be
appropriately associated with an Organization
of type "laboratory" using a relation Type of "allowed."
Or, a root Event type depends on a root
TimePeriod type using a relationship type of
"depends on."
Types for Constraints and Side Effects
An OSID Provider may link a Type, such as
a genus, to a set of constraints that are made known to
the application as Metadata through an
OsidForm. Types of an OsidObject
may also be used by an OSID Provider to constrain the
possible relationship Types that may be
possible to that OsidObject. In these uses of
Types, there is a semantic accompanying the
Type definition managed within an OSID
Provider. The Type OSID manages the metadata of the
Type itself. Logic implementing the meaning
of the Type is managed completely within an
OSID Provider.
OSIDs emphasize relationships over data typing since
type agreements are often an impediment to
interoperability. Generally, the rule of thumb for record
Types is to first explore other
OsidObjects, even those in other OSIDs for a
place for extra data. Often, what is hiding behind a list
of data elements is a separate service that can be
provided as a separate module and serves to keep the
principal OsidObject lighter and more
flexible.
Genus Types primarily serve as a quick
and dirty way to unclutter the record Types
with "is kind of like" tags. OsidCatalogs can
be used for a richer solution. For example, a genus
Type may be used to identify all
Events on a Calendar which are
classes at a school and is accompanied by constraint logic
such that the Events occur at a
Location on campus.
Another pathway to explore is to create a smart
Calendar from an EventQuery that
specifies constrraints on the Event sponsor,
Location, or other data required for classes.
Creates and updates for Events in that smart
Calendar will be similarly constrained and
surfaced to the OSID Consumer through the
Metadata in the EventForms. While this path
is certainly more difficult than simply nailing up some
logic indexed by a genus Type, it can be considered if
there is a need to expose the logic and authoring
capabilities.
OsidPrimitives
Most OSID interfaces are used to encapsulate
implementation-specific objects from provider to consumer.
Type is an OsidPrimitive and as
such cannot be used to encapsulate implementation-specific
data other than what is defined explicitly in the
Type. An OSID Provider must respect any
Type constructed by an OSID Consumer.
|