public interface HGAtomType extends HGGraphHolder
A HGAtomType
is an object capable of translating run-time atom instances to/from
data in HGStore
as well as providing minimal semantic information about
the entities being constructed in the form of a predicate, called subsumes
that
determines whether one entity is a specialization of another.
HGAtomType
s deal with hypergraph atom values, their layout and management in
the HGStore
. An atom type can be seen as a constructor that "knows" how
to build an appropriately typed, in-memory instance of an atom. It is capable of constructing
both node and link instances. It is also capable of recording an atom value in the HGStore
or removing it from there.
The motivation behind the subsumes
predicate is the notion of sub-typing. However, it
has been lifted into a general semantic partial order relation between entities. If A subsumes
B and B subsumes
A then they are equivalent. For a more thourough discussion of the
subsumes
predicate and how it fits into the overall framework of HyperGraphDB's type
system and general data management, please consult the HyperGraphDB manual.
Modifier and Type | Method and Description |
---|---|
Object |
make(HGPersistentHandle handle,
LazyRef<HGHandle[]> targetSet,
IncidenceSetRef incidenceSet)
Construct a new run-time instance of a hypergraph atom.
|
void |
release(HGPersistentHandle handle)
Release a hypergraph value instance from the persistent store.
|
HGPersistentHandle |
store(Object instance)
Store a run-time instance of a hypergraph atom into the hypergraph
HGStore
as a new atom. |
boolean |
subsumes(Object general,
Object specific)
A generic semantic predicate that returns
true if the first argument
is more general than the second. |
setHyperGraph
Object make(HGPersistentHandle handle, LazyRef<HGHandle[]> targetSet, IncidenceSetRef incidenceSet)
Construct a new run-time instance of a hypergraph atom. A plain node must
be constructed whenever the targetSet
parameter is null or of
length 0. Otherwise, a HGLink
instance must be constructed.
It is not required that all atom types be able to construct both plain (node)
atoms and HGLink
s. It is up to an HGAtomType
implementation
to support either or both. When a HGLink
counterpart is not available
for a particular run-time type, an implementation may choose to create an instance
of the default link value holder implementation HGValuedLink
, provided
by HyperGraph.
handle
- The HGPersistentHandle
of the atom value.targetSet
- When the atom is a link, this parameter holds the target set of
the link. When the atom is a node, the parameter is an array of 0 length.incidenceSet
- A lazy reference to the set of links pointing to this atom. This is
null
if we are constructing an internal/nested value of some complex type.null
.
In case the handle
points to an invalid instance (inexisting or with
a erronous layout), the method should throw a HGException
.HGPersistentHandle store(Object instance)
Store a run-time instance of a hypergraph atom into the hypergraph HGStore
as a new atom.
instance
- The atom instance.void release(HGPersistentHandle handle)
Release a hypergraph value instance from the persistent store.
This method should be called when a HGPersistentHandle
returned from the store
is no longer in use.
handle
- The persistent handle of the value to release.boolean subsumes(Object general, Object specific)
A generic semantic predicate that returns true
if the first argument
is more general than the second. Atom types must implement this notion of specialization
whenever meaningful in the context of the entities being constructed.
The notion of subsumption can be seen as partial equivalence, or equivalence in one direction only.
As a relation, subsumtion is transitive and reflexive. The latter implies that, at a minimum,
the subsumes
method must return true
if
general.equals(specific)
.
general
- The object which might be more general. Cannot be null
.specific
- The object which might be more specific. Cannot be null
.true if specific
can be used whenever general
is required and false
otherwise.
Copyright © 2015. All rights reserved.