fact, depends on the type of parameter, we understand
it as a name of an atomic simple type.
3.2 Mathematical Basis for Ontology
and Inference Formalization
It follows from the above that domain ontology could
be represented by a system of abstract types equipped
with a set of transformation functions. The set of
transformation functions consists of different groups.
The first group of transformations are directly repre-
sented as functions by the programmer. For instance,
function that transforms Document-type objects into
Invoice-type objects. The fact that not every docu-
ment can be transformed into an invocice can be re-
flected in function type making it’s value optional:
Option[Invoice].
Other groups of transformations could be derived
implicitly, e.g.:
• Field accessors of objects; for example, func-
tion name ‘transforms’ an object of type Person
into a string, and function work transforms an
object of type Employee into an object of type
Organization.
• Coercion functions implementing subtyping; for
inctance, if types Person and Company inherit
type Client that means there are implicit type
transformation functions:
Person → Client and Company → Client,
implementing rules “Each person (company) is a
client”.
• Inverse coercion functions; for instance, in terms
of previous example the assertion “Some clients
are persons (companies)” can be represented by
the corresponding functions returning the value of
an optional type:
Client → Option[Person] and
Client → Option[Company].
The rules above a uniform way to represent both
specialized transformations and field values as well
as taxonomical relations. And vice versa we can see
that specialized transformations can interpreted as ex-
tensions of the domain taxonomic structure — for in-
stance, from given example it can be inferred that type
Invoice can be regarded as subtype of the Document
type
1
.
1
In explicit form this idea is implemented in some
programming languages with so called coercive subtyping
(Luo, 1999).
4 FUNCTIONAL MODEL OF THE
INTEGRATION PLATFORM
Domain entities as well as the structure of their API
representation can be presented as types that allows to
simulate the system purely with mathematical meth-
ods — as a set of functions.
To complete the platform, in addition to the on-
tology (with transformations), it is required to have
special objects to communicate with external systems
by API — connectors. Let us consider the structure
of these objects.
Each of the integrated applications provides ac-
cess to different types of objects. Within the data syn-
chronization task such an access means an opportu-
nity to send and receive a set of objects in order to
synchronize data between systems.
To structure the connectors the ‘repository’ pat-
tern was used: each connector is a set of repositories
— objects of type Repository[T ], which provide ac-
cess to entities of type T . In other words, the reposi-
tory is a set of two functions:
pull : Unit → List[A] and push : List[A] → Unit.
The function pull is responsible for loading ob-
jects of type A. The function push is responsible for
uploading objects of type A.
Unit is a special type with only one value. We use
the type U nit as input or output value types of func-
tions that do not accept or do not return any values.
In other words, the value of type U nit has no infor-
mation attached to it and is unique because there is no
way to distinguish it from other values of this type.
The main problem in the development of connec-
tors is the development of bidirectional conversions
between ontology objects and types of API messages.
4.1 Levels of Data Access
As it was described above, due to the presence of
explicit relations there is no need for identifiers in
ontological representation while the communication
with external services predominantly consists in the
exchange of identifiers: to upload an object with links
we have to upload linked objects first to get their iden-
tifiers and so on. For simplicity, we assume that iden-
tifiers are strings — type String.
For this purpose connectors are equipped with a
set of advanced repositories with additional functions:
pushId : List[A] → List[String] and
pullId : List[String] → List[A].
The function pushId is responsible for uploading
set of objects of type A and returns a list of identifiers
AType-theoreticApproachtoCloudDataIntegration
167