## SIXX ##

- Smalltalk Instance eXchange in XML -

What's new


SIXX is an XML serializer/deserializer written in Smalltalk. The purpose is to store and load Smalltalk objects in a portable, dialect-independent XML format.


Latest useful document are available in SIXX Wiki

Design Policies:

SIXX format is human and machine readable. It basically uses only one XML element tag. (Please see SIXX instance example and SIXX schema).
SIXX implementation is carefully written so that it only uses portable Smalltalk methods. ( It avoids using dialect-specific methods). Furthermore, SIXX is not particular about XML parsers. DTD validation nor namespaces support are NOT needed to implement SIXX. The present implementation (for Squeak) has already been working both on YAXO and VWXML.
SIXX resolves shared/circular object references. Unlike classic #storeOn: and #readFrom:, it never create copies. Advanced users can implement custom serialization/deserialization format by overriding only a few hook methods.


Currently, this site provides packages for Squeak 3.7-3.10, Pharo 1.0 beta, VisualWorks 5i.4-7, and Dolphin XP-X6. Recently SIXX has been ported to Smalltalk/X, GemStone and VASmalltalk, also (see the download section).


XML Parser:

Squeak and Pharo:

Two XML parsers (YAXO and VWXML) are supported.


SIXX runs on default VW XML parser (VWXML).


SIXX runs on YAXO for Dolphin, ported by Steve Waring.


Squeak and Pharo:
Using Metacello

Please see 'Installation using Metacello' section on GitHub SIXX repository.

Squeak 3.x & Pharo 1.x

Extract the zip file to any parcel directory and parcel in 'SIXX-Install'.
(In VW 7.7, you need to pre-install SUnit manually - I'll fix it soon).


Extract the zip file to your Dolphin root directory and install a package named 'SIXX Install.pac'.



Current releases and snapshot:

Release notes:
Squeak and Pharo:

For other dialects:

For porters:

For formalists:


How to use:

Basic writing/reading:

SIXX is very easy to use. Like #storeString, You can generate a SIXX string by #sixxString.

array := Array with: 1 with: 'Hello' with: Date today.
array sixxString.

This code generates a SIXX string below:

'<sixx.object sixx.id="0" sixx.type="Array" >
        <sixx.object sixx.id="1" sixx.type="SmallInteger" >1</sixx.object>
        <sixx.object sixx.id="2" sixx.type="String" >Hello</sixx.object>
        <sixx.object sixx.id="3" sixx.type="Date" >16 June 2002</sixx.object>

This string can be read by #readSixxFrom:.

Object readSixxFrom: sixxString. "sixxString is the above string"

Stream writing/reading:

SixxWriteStream and SixxReadStream are provided so that you can write/read Smalltalk objects like a binary-object-stream way. (Yes, the BOSS in VW, and the ReferenceStream in Squeak).

In order to write objects to an external file, you can:

sws := SixxWriteStream newFileNamed: 'obj.sixx'.
sws nextPut: <object>.
sws nextPutAll: <collection of object>.
sws close.

And to read objects from an external file:

srs := SixxReadStream readOnlyFileNamed: 'obj.sixx'.
objects := srs contents.
srs close.

Future Plan:




Related Links:

Other XML object serializer/deserializers:

There are XML object serializer/deserializers already available. (Generally speaking, SIXX is much simpler, because it has been specialized for Smalltalk.)

For ODMG objects:

For Java objects:

SMIX (SMalltalk Interchnage Format in XML):

SIXX is designed for serializing/deserializing object instances "data"(states). If you would like to save/load Smalltalk class definitions, use SMIX, instead.


Authors are:

Any feedback is welcome.
Masashi Umezawa