[BACK]Return to data-format.tex CVS log [TXT][DIR] Up to [local] / OpenXM / doc / issac2000

File: [local] / OpenXM / doc / issac2000 / data-format.tex (download)

Revision 1.6, Sat Jan 15 03:18:27 2000 UTC (24 years, 4 months ago) by noro
Branch: MAIN
Changes since 1.5: +9 -15 lines

Slightly restructured.

% $OpenXM: OpenXM/doc/issac2000/data-format.tex,v 1.6 2000/01/15 03:18:27 noro Exp $

\section{Data Format}   (Ohara)

OpenXM admits multiple mathematical encodings such as OpenMath, MP, CMO
(Common Mathematical Object format).
OpenXM itself does not exhibit a bias towards a particular encodings 
as a main mathematical data carrier and an OpenXM compliant system do not need to
implement all possible data formats.
A server or a client does not necessarily implement full specifications
of OpenXM. However  they should at least implement seven primitive 
data types of the CMO, which are necessary to 
carry several control informations such as a {\it mathcap}.
Mathcap is a list of supported CMO's, OpenXM stack machine codes, 
and necessary extra informations.
If a program sends an OX messages to its peer, 
an unrecoverable error may occur. 
By exchanging mathcaps a program knows its peer's capability 
and such an error can be avoided.
Mathcap is also defined as a CMO and the CMO has a structure of a nest
of lists.  its leafs of the end are also a CMO which tags with
CMO\_INT32 or CMO\_STRING.

Mathematical encoding types of OX data are distinguished with tags
of OX messages.
For example,
an OX message with the tag 
OX\_DATA is followed by a CMO packet.
An OX message with the tag 
OX\_DATA\_OPENMATH\_XML is followed by 
an OpenMath XML string and its length.

Let us explain the data format of CMO.
Any CMO packet consists of a header and a body.
The size of the header is 4 bytes that tags the data type of the body.
Data type tags are signed 32 bit integers which is called {\sl int32} in this
paper.
Following tags are registered in the OpenXM for now.
\begin{verbatim}
#define CMO_ERROR2                         0x7f000002
#define CMO_NULL                           1
#define CMO_INT32                          2
#define CMO_DATUM                          3
#define CMO_STRING                         4
#define CMO_MATHCAP                        5
#define CMO_LIST                           17

#define CMO_MONOMIAL32                     19
#define CMO_ZZ                             20
#define CMO_QQ                             21
#define CMO_ZERO                           22
#define CMO_DMS_GENERIC                    24
#define CMO_DMS_OF_N_VARIABLES             25
#define CMO_RING_BY_NAME                   26
#define CMO_RECURSIVE_POLYNOMIAL           27
#define CMO_LIST_R                         28
#define CMO_INT32COEFF                     30
#define CMO_DISTRIBUTED_POLYNOMIAL         31
#define CMO_POLYNOMIAL_IN_ONE_VARIABLE     33
#define CMO_RATIONAL                       34
#define CMO_64BIT_MACHINE_DOUBLE           40
#define CMO_ARRAY_OF_64BIT_MACHINE_DOUBLE  41
#define CMO_128BIT_MACHINE_DOUBLE          42
#define CMO_ARRAY_OF_128BIT_MACHINE_DOUBLE 43
#define CMO_BIGFLOAT                       50
#define CMO_IEEE_DOUBLE_FLOAT              51
#define CMO_INDETERMINATE                  60
#define CMO_TREE                           61
#define CMO_LAMBDA                         62
\end{verbatim}
The first seven types should be implemented on all OpenXM compliant systems.
The format of the first seven CMO's are as follows. \\
\begin{tabular}{|c|c|}
\hline
{\sl int32} {\tt CMO\_ERROR2} & {\sl CMObject} {\rm ob} \\ 
\hline
\end{tabular} \\
\begin{tabular}{|c|c|}
\hline
{\sl int32} {\tt CMO\_NULL}  \\ 
\hline
\end{tabular} \\
\begin{tabular}{|c|c|}
\hline
{\sl int32} {\tt CMO\_INT32}& {\sl int32} {\rm n}  \\ 
\hline
\end{tabular} \\
\begin{tabular}{|c|c|c|}
\hline
{\sl int32} {\tt CMO\_DATUM}& {\sl int32} {\rm n} & {\sl byte} {\rm  data[0]} \\
\hline
$\cdots$ & {\sl byte} {\rm  data[n-1]} \\ 
\cline{1-2}
\end{tabular} \\
\begin{tabular}{|c|c|c|}
\hline
{\sl int32} {\tt CMO\_STRING}& {\sl int32} {\rm n} & {\sl byte} {\rm data[0]} \\
\hline
$\cdots$ & {\sl byte} {\rm data[n-1]} \\ 
\cline{1-2}
\end{tabular} \\
\begin{tabular}{|c|c|}
\hline
{\sl int32} {\tt CMO\_MATHCAP} & {\sl CMObject} {\rm ob} \\ 
\hline
\end{tabular} \\
\begin{tabular}{|c|c|c|}
\hline
{\sl int32} {\tt CMO\_LIST}& {\sl int32} {\rm n} & {\sl CMObject} {\rm ob[0]} \\
\hline
$\cdots$ & {\sl CMObject} {\rm ob[n-1]} \\ 
\cline{1-2}
\end{tabular} \\

A mathematical programmer who wants to implement CMO on a server proceeds 
as follows.
\begin{enumerate}
\item Look for the CMO list at the web cite \cite{openxm-web}.
If there is a CMO that fits to her or his requirement, then use this CMO.     
\item If there is no suitable CMO, design a new CMO and register 
the new CMO to \cite{openxm-web} with a description and examples.
\end{enumerate}