- Smalltalk Instance eXchange in XML -
What's new
- (2010/1/23) For VW 7.7 users: Please install SUnit parcel before installing SIXX. From VW 7.7, SUnit is packaged as an optional parcel. Since SIXX needs
SUnit for testing, loading SIXX will fail if you do not install SUnit before.
I'll update prerequisites of SIXX soon.
- (2009/12/1) Julian Fitzell ported SIXX 0.3c to VASmalltalk! It is downloadable from VAStGoodies site. I will integrate the minor changes to other portings.
- (2009/10/24) SIXX 0.3c is out. This version supports VW 7.7 and Pharo 1.0. A new option "supperssNilWrite"
has been introduced. If the option is on, SIXX avoids writings nil inst
var values. It is useful for reducing SIXX size.
- (2009/1/1) Happy new year! I've uploaded SIXX 0.3b. This version includes bug fix of ShapeChanger, performance improvement
in reading, etc. Thanks to David Shaffer, Annick Fron, Vladimir Musulainen,
and others for reporting bugs and suggesting new ideas.
- (2008/10/08) GemStone port of SIXX has just emerged on GemSource. Thanks to Dale Henrichs and Norbert Hartl for porting effort. The new
version will improve the scalability for loading big object graph. I'll
incorporate those cool changes for upcoming SIXX 0.4!
- (2007/12/10) VW version of SIXX 0.3 had a few missing methods (Rectangle
reading and test methods). It was a simple packaging failure. Thanks Annick
Fron for pointing that. Now VW parcel has been fixed and marked as 0.3a.
- (2007/11/11) SIXX 0.3 is available on VW, Squeak, and Dolphin Smalltalk. Features are listed
here. Special thanks to Tim Mackinnon and David Shaffer for useful suggestions.
Enjoy!
- (2007/11/4) I'm preparing SIXX 0.3. This version includes a new feature
"Formatter". I've written a doc: SIXX 0.3 release note. Please stay tuned.
- (2007/8/12) SIXX 0.2c is available. ShapeChanger now works correctly. Fraction serialization/deserialization
support. By overriding "Object>>sixxReferenceIdInContext:",
you can use your domain object's persistent id in SIXX. Thanks Tim Mackinnon
for useful suggestions.
- (2007/4/20) SIXX 0.2b has been released. From this version, a SIXX variation format - CIXX
can be used. CIXX is an abbreviation of "Compact SIXX". It does
not change the semantics of SIXX, but just uses more compact tags. I also
refactored Boolean and UndefinedObject serialization. It is backward compatible
and improves human-readability of SIXX. Thanks David Shaffer and Tim Mackinnon
for useful suggestions.
- (2007/01/30) SIXX 0.2 is now available for all platforms! The new version
supports reading 'shape changed' classes. I wrote a small document explaining
new features of SIXX 0.2. Please read it for more details.
- (2007/01/05) I'm releasing SIXX 0.2. Firstly, squeak version was uploaded on SqueakMap. Enjoy!
- (2004/07/24) SIXX 0.1h is available. This version has instance creation hooks, performance tuning.
- (2004/07/18) SIXX 0.1h RC1 series are on the developers' ftp site (try
the newest - 20040720). Thanks to Filip Stádník for suggesting
about instance creation hooks.
- (2002-2003) See: What's new (older).
Description
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.
Wiki:
Latest useful document are available in SIXX Wiki
Design Policies:
- Simple:
- SIXX format is human and machine readable. It basically uses only one XML
element tag. (Please see SIXX instance example and SIXX schema).
- Portable:
- 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.
- Smart:
- 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.
Implementation:
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).
Prerequisites:
XML Parser:
Squeak and Pharo:
Two XML parsers (YAXO and VWXML) are supported.
VisualWorks:
SIXX runs on default VW XML parser (VWXML).
Dolphin:
SIXX runs on YAXO for Dolphin, ported by Steve Waring.
Installation:
Squeak and Pharo:
Just load .sar file to your Squeak or Pharo environment.
(Legacy cs installer): Extract the zip file to your directory and just
file in 'install.st'.
VisualWorks:
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).
Dolphin:
Extract the zip file to your Dolphin root directory and install a package
named 'SIXX Install.pac'.
Limitations:
- SIXX cannot store/load context objects.
Current releases and snapshot:
Release notes:
Squeak and Pharo:
VisualWorks:
Dolphin:
For other dialects:
For porters:
For formalists:
- SIXX DTD: (2007/11/04) - This is not important for just using SIXX. I wrote it
for advanced developers who are curious about SIXX elements and attributes
semantics. (Note: a new attribute "sixx.formatter" was added
for supporting Formatter in SIXX 0.3)
License:
- SIXX is under original license (MITstyle), intended to be easily linked to Smalltalk image file.
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>
</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:
2009/12/2
- Integration with VASmalltalk port.
2009/10/29
- Integration with GemStone port.
2002/09/15
- Porting to other Smalltalks (VisualAge Smalltalk, SmallScript, etc). Contributors
are welcome!
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:
- OIFML - Using XML as an Object Interchange Format (ODMG)
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.
Suggestions?
Authors are:
- Masashi Umezawa (Squeak, VW, Dolphin)
- Tetsuya Kurihara (Squeak)
- Kazuki MINAMITANI (VW, Dolphin)
Any feedback is welcome.
Masashi Umezawa

