Exploring the PIM: Versions and Users

This post will begin to introduce PIM and PIM API organization. The PIM API is coupled with the tables and views in the PIM based on the rule set discussed in the previous post.

The fundamental object (and table) in the PIM API and the PIM is the pimVersion. Each element in the PIM and PIM API is tied to a version. In the current structure, pimVersions are identified (pimVersion.ID) by a real number. The use of a real number in this context as opposed to some string value; e.g. ‘2.1.4’, is arbitrary and can be easily accommodated in small PIM revisions.

The pimVersion table contains ONLY the ID, and a description. These same properties of a pimVersion exist in the PIM API but it is the methods and collections of a pimVersion that provide the power of the PIM and the API. This is accomplished by including the versionID in every table and every object. In fact, the versionID is a part of the Primary Key in each and every table.

Special NOTE:

Each object in the PIM API has a common base object. This is the pimObject. It has properties of [ID], [Name], [Owner], and [Parent]. As a base object, each object in the PIM API has these properties plus other custom properties.

Object diagram showing the relationship between the pimVersion and its base class

Within the PIM API there are two additional special capabilities that provide a great deal of developer power. You may recall that each element within the PIM and PIM API object model contain a GUID/UUID. These are reflected in the tables as configID, featureID, attributeID, valueID, and the PIM API as pimObject.ID. In the PIM API, these are cast to a special data type of PimID. This allows for obtaining any pimObject (pimConfig, pimFeature, pimAttribute, etc) by using either the ID with a data type of pimID or Name with a data type of string.

There is also an object called a ‘pimObjectSet’, which can be defined in software as a Collection (IEnumerable). The pimObjectSet can be defined as any of the pimObjects; e.g. pimObjectSet<pimFeature> or pimObjectSet<pimAttribute>. This allows for selection of a FeatureType within a Configuration Feature Set or an Attribute within a Feature Attribute Set, etc. In writing applications for the PIM API, this capability is particularly valuable.


So inside the PIM there is a table called pimVersion which equates to pimVersion in the PIM API. Within each pimVersion, there is a single pimConfiguration which equates to the master set of all pimFeatures and pimAttributes in that pimVersion. That special pimConfiguration is commonly referred to as Gold. It is the union of everything in the PIM included for that pimVersion and it is referred to as the special GUID/UUID (pimConfiguration.ID) of {00000000-0000-0000-0000-00000000}


The other important attribute that is in every table is the userID, which is defined as a 64-bit integer (“bigint”) at the database level. The PIM can use either an internal user table or one that provides external user numbers. These typically are provided by the portal or other web interface. The purpose of the userID is to allow for custom profiles or the addition of adapted (non-Gold) elements. Those elements would be identified as having the userID associated with the user requesting those elements. Once again, the userID is in every table in the PIM and, in the PIM API, it is associated with the ‘Owner’ which is a property of the pimObject portion of every PIM API object. Within the PIM, a userID of 0 is that owner associated with Gold. All external users of the PIM should have a userID > 0.


So, these two critical attributes (versionID and userID) are included in each and every primary key in all PIM tables, and are included in each and every object in the PIM API as a part of the base pimObject; e.g. pimObject.ID and pimObject.Owner.

In the next post, we’ll delve into the PIM Configuration object and explore its role in the PIM. Stay tuned…

This post was written by:

Barry Schimpf

Vice President

For more information on this post, the PIM, Zekiah’s geospatial standards support, or our data configuration management capabilities, please e-mail us at contact@zekiah.com