The end of a long day

I received a call last night from Tanya Epstein, my former colleague and mentor-in-many-ways in SmarTeam, a company I used to work for. This brought back memories from my enterprise software days, which led me to think of iXF.

iXF was one of my favorite undertakings in SmarTeam, which at that point was a subsidiary of Dassault Systemes, and now no longer is at all. In a nutshell, iXF was a data format designed for storage and exchange of structured data.

How do you represent an object in XML? There are so many to do that. How do you represent a class in XML or XML Schema? SOAP perhaps? That’s a good start. But SOAP is slightly too flexible, resulting in potential incompatibilities when trying to map it back into relational database format. How do you represent the concept of a class interface though..? How do you represent revisions to an object, revisions of classes and interfaces, and all the other goodies needed to provide full fidelity, rich and yet interoperable data model?

While expressed in XML and XML Schema (duh!), iXF went way beyond these basics and defined formal, extendible representations for many useful concepts, like:

  • Tabular data
  • Structured object oriented data
  • Schema versioning and forward compatibility
  • Object versioning and change tracking
  • Associating files with objects
  • Packaging data, metadata and extended data into a single archive format
  • And, most important, a formal extension mechanism for adding additional concepts without creating backward, forward and inter-systems compatibility issues.

Many of the concepts described in iXF were formalization of concepts we’ve implemented before, either in the series of applications based on the HADAR platform I’ve created before SmarTeam (together with Eran Tromer, Eitan Yaffe and many others), or in the incredibly flexible data model Tanya Epstein designed in SmarTeam.

Other concepts, like namespacing the class behaviors, the de-coupling of domain behaviors from class names, the change tracking mechanism and others were adapted from other domains (for example, interface declarations in programming languages), or invented specifically for iXF.

The result was an interesting beast. It was a format based on open, well defined standards (XML, XML Schema, SOAP, SOAP Messages with Attachments, XML Namespaces, MIME and ZLIB), which proved versatile enough to be used in multiple use cases, from data modeling to inter-vendor data exchange to database generation to inter-machine communication and more.

While there were a number of people signed on the iXF spec, much of the credit for in depth thinking, alignment with existing specs and creative ideas should go to a then-young software engineer named Noga Atsil.

SmarTeam no longer exists, and the original ixfstd.org web site is no longer available on the web. But being the sentimental fool that I am, I figured I’ll leave this little post behind, as a small tribute to the efforts that went into this work.

The original iXF 1.0 specifications (later revisions existed but are not salvageable anymore).