[doc] save() page updated for 6.0 (rewritten)
[scilab.git] / scilab / modules / fileio / help / en_US / save_format.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3     * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4     * Copyright (C) 2008 - INRIA
5     * ...
6     *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15     *
16 -->
17 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="save_format" xml:lang="en">
18     <refnamediv>
19         <refname>save format</refname>
20         <refpurpose>format of files produced by "save"</refpurpose>
21     </refnamediv>
22     <refsection>
23         <title>Abstract</title>
24         <para>The goal of this document is to specify the HDF5 format used by Scilab to store its data.</para>
25         <para>The format is called SOD for Scilab Open Data.</para>
26         <para>The first public release of SOD has been done with Scilab 5.4.0.</para>
27     </refsection>
28     <refsection>
29         <title>Rationale</title>
30         <para>Interoperability is one of the key aspects of modern software. In order to improve more and more this aspect, a standard definition of the HDF5 format is proposed in this SEP.</para>
31         <para>Since Scilab 5.2.0, an export / import capability has been developed and maintain to exchange data. This is already one of the base components of Xcos to store and exchange data.</para>
32     </refsection>
33     <refsection>
34         <title>Supported data types</title>
35         <para>All Scilab data types are supported. For example:</para>
36         <informaltable border="1">
37             <tbody>
38                 <tr>
39                     <td>
40                         <emphasis role="bold">Name</emphasis>
41                     </td>
42                     <td>
43                         <emphasis role="bold">Example in Scilab</emphasis>
44                     </td>
45                 </tr>
46                 <tr>
47                     <td>
48                         <emphasis role="bold">double</emphasis>
49                     </td>
50                     <programlisting>
51                         A=32;
52                         b=[32,2];
53                         c=[2,2;3,4];
54                         d=rand(10,10);
55                     </programlisting>
56                 </tr>
57                 <tr>
58                     <td>
59                         <emphasis role="bold">string</emphasis>
60                     </td>
61                     <programlisting>
62                         a="my string";
63                         b=["string 1";"my string 2"];
64                     </programlisting>
65                 </tr>
66                 <tr>
67                     <td>
68                         <emphasis role="bold">boolean</emphasis>
69                     </td>
70                     <programlisting>
71                         a=%t;
72                         b=[%t, %f];
73                     </programlisting>
74                 </tr>
75                 <tr>
76                     <td>
77                         <emphasis role="bold">integer</emphasis>
78                     </td>
79                     <td>
80                         <programlisting>
81                             int8([1 -120 127 312])
82                             x=int32(-200:100:400)
83                         </programlisting>
84                     </td>
85                 </tr>
86                 <tr>
87                     <td>
88                         <emphasis role="bold">polynomial</emphasis>
89                     </td>
90                     <td>
91                         <programlisting>
92                             s=poly([2 3],"s")
93                             poly(1:4,'s','c')
94                         </programlisting>
95                     </td>
96                 </tr>
97                 <tr>
98                     <td>
99                         <emphasis role="bold">sparse</emphasis>
100                     </td>
101                     <td align="justify">
102                         <programlisting>
103                             sp=sparse([1,2;4,5;3,10],[1,2,3])
104                         </programlisting>
105                     </td>
106                 </tr>
107                 <tr>
108                     <td>
109                         <emphasis role="bold">boolean sparse</emphasis>
110                     </td>
111                     <td align="justify">
112                         <programlisting>
113                             dense=[%F, %F, %T, %F, %F
114                             %T, %F, %F, %F, %F
115                             %F, %F, %F, %F, %F
116                             %F, %F, %F, %F, %T];
117                             sp=sparse(dense)
118                         </programlisting>
119                     </td>
120                 </tr>
121                 <tr>
122                     <td>
123                         <emphasis role="bold">list</emphasis>
124                     </td>
125                     <td align="justify">
126                         <programlisting>
127                             l = list(1,["a" "b"])
128                         </programlisting>
129                     </td>
130                 </tr>
131                 <tr>
132                     <td>
133                         <emphasis role="bold">tlist</emphasis>
134                     </td>
135                     <td align="justify">
136                         <programlisting>
137                             t = tlist(["listtype","field1","field2"], [], []);
138                         </programlisting>
139                     </td>
140                 </tr>
141                 <tr>
142                     <td>
143                         <emphasis role="bold">mlist</emphasis>
144                     </td>
145                     <td align="justify">
146                         <programlisting>
147                             M=mlist(['V','name','value'],['a','b';'c' 'd'],[1 2; 3 4]);
148                         </programlisting>
149                     </td>
150                 </tr>
151             </tbody>
152         </informaltable>
153         <para>
154             Several "types" are based on <emphasis>tlist</emphasis> or <emphasis>mlist</emphasis>.
155           It is the case of <emphasis>rational</emphasis>, <emphasis>state-space</emphasis>,
156           <emphasis>cell</emphasis> and <emphasis>struct</emphasis>. They are therefore transparently saved.
157         </para>
158         <para>
159             <emphasis>void </emphasis>and <emphasis>undefined </emphasis>are two specific elements created to manage special cases in the list management. They are described later in this document.
160         </para>
161     </refsection>
162     <refsection>
163         <title>HDF5 File Structure</title>
164         <para>Scilab HDF5 architecture is pretty straightforward. </para>
165         <emphasis role="bold">General</emphasis>
166         <para>For each Scilab variable, a dataset at the root position is declared. The name of the dataset is the name of Scilab variable. </para>
167         <para>Example, the following code:</para>
168         <programlisting>
169             emptyuint32matrix = uint32([]);
170             uint32scalar = uint32(1);
171             uint32rowvector = uint32([1 4 7]);
172             uint32colvector = uint32([1;4;7]);
173             uint32matrix = uint32([1 4 7;9 6 3]);
174             save("uint32.sod","emptyuint32matrix","uint32scalar","uint32rowvector","uint32colvector","uint32matrix");
175         </programlisting>
176         <para>produces:</para>
177         <mediaobject>
178             <imageobject>
179                 <imagedata fileref="../images/img001.png"/>
180             </imageobject>
181         </mediaobject>
182         <para>
183             Each root dataset has an attribute called <literal>SCILAB_Class</literal>. This attribute defines which types is the variable stored in the HDF5 file.
184         </para>
185         <para>If the variable is a primitive type and without complex values associated, data are stored directly into the dataset. Otherwise, the dataset contains references to the actual data.</para>
186         <para>Every SOD file contains two specific variables:</para>
187         <itemizedlist>
188             <listitem>
189                 <para>
190                     <literal>SCILAB_scilab_version</literal> – Describe which version of Scilab has been used to save the SOD file.
191                 </para>
192                 <para>For example, with Scilab 5.4.0, the data will be:</para>
193                 <para>
194                     <emphasis>SCILAB_scilab_version = scilab-5.4.0</emphasis>
195                 </para>
196             </listitem>
197             <listitem>
198                 <para>SCILAB_sod_version – Describe which version of the SOD specification has been used to save the file.</para>
199                 <para>For example, with Scilab 5.4.0, the data will be:</para>
200                 <para>
201                     <emphasis>SCILAB_sod_version = 2</emphasis>
202                 </para>
203             </listitem>
204         </itemizedlist>
205         <para>
206             Types where data are stored straight into the dataset.
207         </para>
208         <informaltable border="1">
209             <tbody>
210                 <tr>
211                     <td align="left">
212                         <emphasis role="bold">Scilab Type</emphasis>
213                     </td>
214                     <td align="left">
215                         <emphasis role="bold">HDF5 Scilab type attribute</emphasis>
216                     </td>
217                     <td align="left">
218                         <emphasis role="bold">HDF5 attributes</emphasis>
219                     </td>
220                     <td align="left">
221                         <emphasis role="bold">HDF data types mapping</emphasis>
222                     </td>
223                 </tr>
224                 <tr>
225                     <td align="left">
226                         <para>string</para>
227                     </td>
228                     <td align="left">
229                         <para>SCILAB_Class = string</para>
230                     </td>
231                     <td align="left">
232
233                     </td>
234                     <td align="left">
235                         <para>String</para>
236                     </td>
237                 </tr>
238                 <tr>
239                     <td align="left">
240                         <para>boolean</para>
241                     </td>
242                     <td namest="c2" nameend="c3" align="left">
243                         <para>SCILAB_Class = boolean</para>
244                     </td>
245                     <td align="left">
246
247                     </td>
248                     <td align="left">
249                         <para>32-bit integer</para>
250                     </td>
251                 </tr>
252                 <tr>
253                     <td align="left">
254                         <para>integer</para>
255                     </td>
256                     <td namest="c2" nameend="c3" align="left">
257                         <para>SCILAB_Class = integer</para>
258                     </td>
259                     <td align="left">
260                         <para>SCILAB_precision = {8, 16, 32, u8, u16, u32}</para>
261                     </td>
262                     <td namest="c1" nameend="c2" align="left">
263                         <para>8 = 8-bit character</para>
264                         <para>16 = 16-bit integer</para>
265                         <para>32 = 32-bit integer</para>
266                         <para>u8 = 8-bit unsigned character</para>
267                         <para>u16 = 16-bit unsigned integer</para>
268                         <para>u32 = 32-bit unsigned integer</para>
269                     </td>
270                 </tr>
271             </tbody>
272         </informaltable>
273         <para>For these types, like in Scilab, the data are stored in a one dimension array. Data are stored by column wise.</para>
274         <para>To reconstruct the matrix, vector or scalar, two attributes provides the number of columns and rows. </para>
275         <para>
276             Since the 5.4.0 release of Scilab and SOD v2, <literal>SCILAB_cols</literal> and <literal>SCILAB_rows</literal> are no longer used for matrices of double, integer, polynomial and string. SOD uses the native multidimensional HDF5 feature.
277         </para>
278         <para>
279             <emphasis role="bold">Example</emphasis>
280         </para>
281         <para>
282             The saving of the declaration: <code>int32([1 -4 7;-9 6 -3])</code> will be displayed as:
283         </para>
284         <mediaobject>
285             <imageobject>
286                 <imagedata fileref="../images/img002.png"/>
287             </imageobject>
288         </mediaobject>
289         <para>in hdfview.</para>
290         <para>And the metadata will be:</para>
291         <emphasis role="italic">
292             <para>int32matrix (800, 2)</para>
293             <para>32-bit integer, 3 x 2 =&gt; the size of the variable</para>
294             <para>Number of attributes = 2</para>
295             <para>SCILAB_Class = integer</para>
296             <para>SCILAB_precision = 32</para>
297         </emphasis>
298         <para>
299             <note>
300                 Scalar value are stored as a matrix of size 1 by 1.
301             </note>
302         </para>
303         <para>
304             An empty variable (<literal>[]</literal>) will have the attribute <literal>SCILAB_empty</literal> set to true.
305         </para>
306         <para>
307             <emphasis role="bold">Types where data are stored in a dedicated group</emphasis>
308         </para>
309         <para>Many of Scilab datatypes are stored using groups. This allows a clear separations of the value but also an easy access.</para>
310         <para>
311             Groups are named from the variables enclosed by "#". For example, for a matrix of double called matrixofdouble, the name of the root dataset will be matrixofdouble, the name of the associated group will be <emphasis role="strong">#matrixofdouble#</emphasis>.
312         </para>
313         <para>For recursive data type (list, mlist, tlist, etc), names of subgroup are constructed the following way:</para>
314         <para>
315             The <literal>#</literal> allows the creation of an unique identifier. The number of initial <literal>#</literal> shows the level of depth. Therefore, the sublist <emphasis>###listnested#_#2##_#1##</emphasis> will indicate that it is located at the second level.
316         </para>
317         <para>The underscore "_" is a way to represent the depth. Usually, the "/" character is used in such case but it is a reserved keyword in the HDF5 specification.</para>
318         <para>
319             The integers used in the naming shows the position in the data structure, both in term of position in the current structure but also regarding the parent element. In the example, <emphasis>###listnested#_#2##_#1##</emphasis>, the 1 shows that it is dealing with the second element of the third structure of the main element (elements are indexed from 0).
320         </para>
321         <para>
322             For example, the group named <emphasis>###listnested#_#2##_#1##</emphasis>, will point to the value [32, 42] from the example:
323         </para>
324         <programlisting>
325             listnested=list(2,%i,'f',ones(3,3))
326             listnested(3) = list( %t, [32,42]);
327         </programlisting>
328         <para>
329             <emphasis role="bold">Sparse</emphasis>
330         </para>
331         <para>
332             <emphasis role="strong">Scilab type:</emphasis> sparse
333         </para>
334         <para>
335             <emphasis role="strong">HDF5 Scilab type attribute:</emphasis> SCILAB_Class = sparse
336         </para>
337         <para>
338             <emphasis role="strong">HDF5 attributes: </emphasis>
339         </para>
340         <para>SCILAB_rows = &lt;int&gt;</para>
341         <para>Number of rows</para>
342         <para>
343             <emphasis>SCILAB_cols = &lt;int&gt;</emphasis>
344         </para>
345         <para>Number of columns</para>
346         <para>
347             <emphasis>SCILAB_items = &lt;int&gt;</emphasis>
348         </para>
349         <para>Define the number of elements in the sparse matrix</para>
350         <para>
351             <emphasis role="strong">Root dataset values:</emphasis>
352         </para>
353         <para>
354             First value (<literal>#0#</literal>): Each element of this data structure shows the number of non-null element per line. Therefore, the first element shows the number of element in the first line of the sparse matrix.
355         </para>
356         <para>
357             Second value (<literal>#1#</literal>): Provides the position of the column of each elements of the sparse matrix.
358         </para>
359         <para>
360             Third value (<literal>#2#</literal>): Stores the reference to the actual values of the element in the sparse matrix (which will be stored in a specific group).
361         </para>
362         <para>Example, taking this matrix:</para>
363         <programlisting role="no-scilab-exec">
364             0. 1. 0. 0. 0. 0. 0. 0. 0. 0.
365             0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
366             0. 0. 0. 0. 0. 0. 0. 0. 0. 3.
367             0. 0. 0. 0. 2. 0. 0. 0. 0. 0.
368         </programlisting>
369         <para>which is generated by the function:</para>
370         <programlisting role="scilab_code">
371             sparse([1,2;4,5;3,10],[1,2,3])
372         </programlisting>
373         <para>
374             will have:
375         </para>
376         <para>
377             <emphasis>#0#</emphasis> contains <emphasis>1;0;1;1</emphasis>
378         </para>
379         <para>
380             <emphasis>#1#</emphasis> contains <emphasis>2;10;5</emphasis>
381         </para>
382         <para>
383             <emphasis>#2#</emphasis> references a matrix of double (not complex in this example) which contains <emphasis>1.0; 3.0; 2.0</emphasis>
384         </para>
385         <para>
386             <emphasis role="bold">Boolean sparse</emphasis>
387         </para>
388         <para>
389             <emphasis role="strong">Scilab type:</emphasis> boolean sparse
390         </para>
391         <para>
392             <emphasis role="strong">HDF5 Scilab type attribute:</emphasis> SCILAB_Class = boolean sparse
393         </para>
394         <para>
395             <emphasis>HDF5 attributes:</emphasis>
396         </para>
397         <para>
398             <emphasis>SCILAB_rows = &lt;int&gt;</emphasis>
399         </para>
400         <para>Number of rows</para>
401         <para>
402             <emphasis>SCILAB_cols = &lt;int&gt;</emphasis>
403         </para>
404         <para>Number of columns</para>
405         <para>
406             <emphasis>SCILAB_items = &lt;int&gt;</emphasis>
407         </para>
408         <para>Define the number of elements in the sparse matrix</para>
409         <para>
410             <emphasis role="strong">Root dataset values:</emphasis> While a sparse has 3 datasets, the boolean sparse has only 2 because defined values are automatically considered as true.
411         </para>
412         <para>
413             First value (<literal>#0#</literal>): Each element of this data structure shows the number of non-null element per line.
414         </para>
415         <para>Therefore, the first element shows the number of element in the first line of the sparse matrix.</para>
416         <para>
417             Second value (<literal>#1#</literal>): Provides the position of the column of each elements of the sparse matrix.
418         </para>
419         <para>With the boolean sparse matrix:</para>
420         <programlisting>
421             dense=[%F, %F, %T, %F, %F
422             %T, %F, %F, %F, %F
423             %F, %F, %F, %F, %F
424             %F, %F, %F, %F, %T];
425         </programlisting>
426         <para>
427             <emphasis>#0#</emphasis> contains <emphasis>1;1;0;1</emphasis>.
428         </para>
429         <para>
430             <emphasis>#1#</emphasis> contains <emphasis>3;1;5</emphasis>.
431         </para>
432         <para>Only the two information are necessary to recreate the boolean sparse.</para>
433         <para>HDF data types mapping:</para>
434         <para>32-bit integer</para>
435         <para>
436             <emphasis role="bold">Double</emphasis>
437         </para>
438         <para>
439             <emphasis role="strong">Scilab type:</emphasis> double
440         </para>
441         <para>
442             <emphasis role="strong">HDF5 Scilab type attribute:</emphasis> SCILAB_Class = double
443         </para>
444         <para>
445             <emphasis role="strong">Root dataset values:</emphasis> Both real and complex values are stored in a group called <literal>#&lt;variable name&gt;#</literal>.
446         </para>
447         <para>
448             First value: Reference to the real values. Named <literal>#0#</literal>.
449         </para>
450         <para>
451             If the matrix is complex, the second value will reference the complex values. Named <literal>#1#</literal>.
452         </para>
453         <para>
454             <emphasis role="strong">HDF data types mapping:</emphasis> 64-bit floating-point
455         </para>
456         <para>
457             <emphasis role="bold">Polynomial</emphasis>
458         </para>
459         <para>
460             <emphasis role="strong">Scilab type:</emphasis> polynomial
461         </para>
462         <para>
463             <emphasis role="strong">HDF5 Scilab type attribute:</emphasis> SCILAB_Class = polynomial
464         </para>
465         <para>
466             <emphasis role="strong">HDF5 attributes: </emphasis>
467         </para>
468         <para>SCILAB_Class = polynomial</para>
469         <para>SCILAB_varname = &lt;string&gt;</para>
470         <para>The symbolic variable name</para>
471         <para>
472             <emphasis>SCILAB_Complex = &lt;boolean&gt;</emphasis>
473         </para>
474         <para>If the polynomial is complex (not set if false)</para>
475         <para>
476             <emphasis role="strong">Root dataset values:</emphasis>
477         </para>
478         <para>Coefficients are stored under the form of a matrix of double (cf the relative section to double storage). It is interesting to note that coefficients can be complex and, therefore, be stored as a matrix of complex. Rules of naming of the (sub-)groups and dataset are described at the beginning of the chapter.</para>
479         <para>
480             <emphasis role="strong">HDF data types mapping:</emphasis> Object reference
481         </para>
482         <para>
483             <emphasis role="bold">list</emphasis>
484         </para>
485         <para>
486             <emphasis role="strong">Scilab type:</emphasis> list
487         </para>
488         <para>
489             <emphasis role="strong">HDF5 Scilab type attribute:</emphasis>
490         </para>
491         <para>SCILAB_Class = list</para>
492         <para>
493             <emphasis role="strong">HDF5 attributes:</emphasis> SCILAB_items = &lt;number of items in the list&gt;
494         </para>
495         <para>
496             <emphasis role="strong">Root dataset values:</emphasis>
497         </para>
498         <para>
499             Associated to the root dataset, values stored in this dataset are the references to the values stored in the list. The values are stored in the group called <literal>#&lt;variable name&gt;#</literal>. In the <literal>#&lt;variable name&gt;#</literal> group, data can be any type. They are included straight into the group. Their representations are the same as in other cases, based in recursive structure (meaning that list of list of list of various types can stored and loaded).
500         </para>
501         <para>Rules of naming of the (sub-)groups and dataset are described at the beginning of the chapter.</para>
502         <para>
503             <emphasis role="strong">HDF data types mapping:</emphasis> Object reference
504         </para>
505         <para>
506             <emphasis role="bold">tlist </emphasis>
507         </para>
508         <para>
509             <emphasis role="strong">Scilab type:</emphasis> tlist
510         </para>
511         <para>
512             <emphasis role="strong">HDF5 Scilab type attribute:</emphasis>
513         </para>
514         <para> SCILAB_Class = tlist</para>
515         <para>
516             <emphasis role="strong">HDF5 attributes:</emphasis> cf list
517         </para>
518         <para>
519             <emphasis role="bold">mlist </emphasis>
520         </para>
521         <para>
522             <emphasis role="strong">Scilab type:</emphasis> mlist
523         </para>
524         <para>
525             <emphasis role="strong">HDF5 Scilab type attribute:</emphasis>
526         </para>
527         <para>SCILAB_Class = mlist</para>
528         <para>
529             <emphasis role="strong">HDF5 attributes:</emphasis> cf list
530         </para>
531         <para>
532             <emphasis role="bold">void </emphasis>
533         </para>
534         <para>
535             <emphasis role="strong">Scilab type:</emphasis> void
536         </para>
537         <para>
538             <emphasis role="strong">HDF5 Scilab type attribute:</emphasis>
539         </para>
540         <para>SCILAB_Class = void</para>
541         <para>A void value can only be found in very special usages of list, tlist and mlist. It can be created with the following syntax:</para>
542         <programlisting>voidelement_ref=list(1,,3);</programlisting>
543         <para>
544             <emphasis role="bold">undefined </emphasis>
545         </para>
546         <para>
547             <emphasis role="strong">Scilab type:</emphasis> undefined
548         </para>
549         <para>
550             <emphasis role="strong">HDF5 Scilab type attribute:</emphasis>
551         </para>
552         <para> SCILAB_Class = undefined</para>
553         <para>
554             An undefined value is generated when the size of a list is increased and some elements not defined. They will be generated with the syntax:
555         </para>
556         <programlisting>
557             undefinedelement_ref=list(2,%i,'f',ones(3,3));
558             undefinedelement_ref(6)="toto"
559         </programlisting>
560     </refsection>
561     <refsection>
562         <title>Real life examples</title>
563         <para>
564             Sample files of all these variables are provided into the Scilab distribution. They are available in the directory: <emphasis>SCI/modules/hdf5/tests/sample_scilab_data/</emphasis>
565         </para>
566         <para>At the date of redaction of this document, the following files are provided with the Scilab distribution:</para>
567         <emphasis role="italic">
568             <para>
569                 booleanmatrix.sod
570             </para>
571             <para>booleanscalar.sod
572             </para>
573             <para>booleansparse.sod
574             </para>
575             <para>emptymatrix.sod
576             </para>
577             <para>emptysparse.sod
578             </para>
579             <para>hypermatrixcomplex.sod
580             </para>
581             <para>hypermatrix.sod
582             </para>
583             <para>int16.sod
584             </para>
585             <para>int32.sod
586             </para>
587             <para>int8.sod
588             </para>
589             <para>listnested.sod
590             </para>
591             <para>list.sod
592             </para>
593             <para>matricedoublecomplexscalar.sod
594             </para>
595             <para>matricedoublecomplex.sod
596             </para>
597             <para>matricedoublescalar.sod
598             </para>
599             <para>matricedouble.sod
600             </para>
601             <para>matricestringscalar.sod
602             </para>
603             <para>matricestring.sod
604             </para>
605             <para>mlist.sod
606             </para>
607             <para>polynomialscoef.sod
608             </para>
609             <para>polynomials.sod
610             </para>
611             <para>sparsematrix.sod
612             </para>
613             <para>tlist.sod
614             </para>
615             <para>uint16.sod
616             </para>
617             <para>uint32.sod
618             </para>
619             <para>uint8.sod
620             </para>
621             <para>undefinedelement.sod
622             </para>
623             <para>voidelement.sod
624             </para>
625         </emphasis>
626     </refsection>
627     <refsection>
628         <title>Format evolutions</title>
629         <informaltable border="1">
630             <tbody>
631                 <tr>
632                     <td align="justify">
633                         <emphasis role="bold">SOD version</emphasis>
634                     </td>
635                     <td align="justify">
636                         <emphasis role="bold">Scilab version</emphasis>
637                     </td>
638                     <td align="justify">
639                         <emphasis role="bold">Description</emphasis>
640                     </td>
641                 </tr>
642                 <tr>
643                     <td align="center">
644                         <para>0</para>
645                     </td>
646                     <td align="center">
647                         <para>5.2.0</para>
648                     </td>
649                     <td align="justify">
650                         <para>Initial version of the Scilab/HDF5 format</para>
651                     </td>
652                 </tr>
653                 <tr>
654                     <td align="center">
655                         <para>1</para>
656                     </td>
657                     <td align="center">
658                         <para>5.4.0 alpha / beta</para>
659                     </td>
660                     <td align="left">
661                         <para>Default format for load and save</para>
662                         <para>Previous format (.bin) still supported</para>
663                     </td>
664                 </tr>
665                 <tr>
666                     <td>
667                         <para>2</para>
668                     </td>
669                     <td>
670                         <para>5.4.0</para>
671                     </td>
672                     <td>
673                         <para>
674                             For matrices of double, integer, polynomial and string <emphasis>SCILAB_cols</emphasis> / <emphasis>SCILAB_rows</emphasis> have been removed to use multidimensional HDF5
675                         </para>
676                     </td>
677                 </tr>
678                 <tr>
679                     <td align="center">
680                         3
681                     </td>
682                     <td align="center">
683                         <para>6.0.0</para>
684                     </td>
685                     <td align="justify">
686                         <para>.bin support dropped.</para>
687                     </td>
688                 </tr>
689             </tbody>
690         </informaltable>
691     </refsection>
692     <refsection role="see also">
693         <title>See also</title>
694         <simplelist type="inline">
695             <member>
696                 <link linkend="save">save</link>
697             </member>
698             <member>
699                 <link linkend="load">load</link>
700             </member>
701             <member>
702                 <link linkend="listvarinfile">listvarinfile</link>
703             </member>
704             <member>
705                 <link linkend="type">type</link>
706             </member>
707             <member>
708                 <link linkend="typeof">typeof</link>
709             </member>
710         </simplelist>
711     </refsection>
712 </refentry>
713